ETH Price: $3,101.43 (-5.79%)
Gas: 5 Gwei

Token

Battle Racers Part (BRPART)
 

Overview

Max Total Supply

2,244 BRPART

Holders

184

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
3 BRPART
0x67c8A4D9B638847c27B35673474001090F97d210
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

New blockchain arcade racing game from Altitude Games for the Decentraland platform.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Part

Compiler Version
v0.5.2+commit.1df8f40c

Optimization Enabled:
No with 200 runs

Other Settings:
byzantium EvmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-01
*/

// File: node_modules\openzeppelin-solidity\contracts\introspection\IERC165.sol

pragma solidity ^0.5.2;

/**
 * @title IERC165
 * @dev https://eips.ethereum.org/EIPS/eip-165
 */
interface IERC165 {
    /**
     * @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.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC721\IERC721.sol

pragma solidity ^0.5.2;


/**
 * @title ERC721 Non-Fungible Token Standard basic interface
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
contract 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);

    function balanceOf(address owner) public view returns (uint256 balance);
    function ownerOf(uint256 tokenId) public view returns (address owner);

    function approve(address to, uint256 tokenId) public;
    function getApproved(uint256 tokenId) public view returns (address operator);

    function setApprovalForAll(address operator, bool _approved) public;
    function isApprovedForAll(address owner, address operator) public view returns (bool);

    function transferFrom(address from, address to, uint256 tokenId) public;
    function safeTransferFrom(address from, address to, uint256 tokenId) public;

    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public;
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC721\IERC721Receiver.sol

pragma solidity ^0.5.2;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
contract IERC721Receiver {
    /**
     * @notice Handle the receipt of an NFT
     * @dev The ERC721 smart contract calls this function on the recipient
     * after a `safeTransfer`. This function MUST return the function selector,
     * otherwise the caller will revert the transaction. The selector to be
     * returned can be obtained as `this.onERC721Received.selector`. This
     * function MAY throw to revert and reject the transfer.
     * Note: the ERC721 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 `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
     */
    function onERC721Received(address operator, address from, uint256 tokenId, bytes memory data)
    public returns (bytes4);
}

// File: node_modules\openzeppelin-solidity\contracts\math\SafeMath.sol

pragma solidity ^0.5.2;

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

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

        return c;
    }

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

        return c;
    }

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

        return c;
    }

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

        return c;
    }

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

// File: node_modules\openzeppelin-solidity\contracts\utils\Address.sol

pragma solidity ^0.5.2;

/**
 * Utility library of inline functions on addresses
 */
library Address {
    /**
     * Returns whether the target address is a contract
     * @dev This function will return false if invoked during the constructor of a contract,
     * as the code is not actually created until after the constructor finishes.
     * @param account address of the account to check
     * @return whether the target address is a contract
     */
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        // XXX Currently there is no better way to check if there is a contract in an address
        // than to check the size of the code at that address.
        // See https://ethereum.stackexchange.com/a/14016/36603
        // for more details about how this works.
        // TODO Check this again before the Serenity release, because all addresses will be
        // contracts then.
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

// File: node_modules\openzeppelin-solidity\contracts\drafts\Counters.sol

pragma solidity ^0.5.2;


/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids
 *
 * Include with `using Counters for Counters.Counter;`
 * Since it is not possible to overflow a 256 bit integer with increments of one, `increment` can skip the SafeMath
 * overflow check, thereby saving gas. This does assume however correct usage, in that the underlying `_value` is never
 * directly accessed.
 */
library Counters {
    using SafeMath for uint256;

    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        counter._value += 1;
    }

    function decrement(Counter storage counter) internal {
        counter._value = counter._value.sub(1);
    }
}

// File: node_modules\openzeppelin-solidity\contracts\introspection\ERC165.sol

pragma solidity ^0.5.2;


/**
 * @title ERC165
 * @author Matt Condon (@shrugs)
 * @dev Implements ERC165 using a lookup table.
 */
contract ERC165 is IERC165 {
    bytes4 private constant _INTERFACE_ID_ERC165 = 0x01ffc9a7;
    /*
     * 0x01ffc9a7 ===
     *     bytes4(keccak256('supportsInterface(bytes4)'))
     */

    /**
     * @dev a mapping of interface id to whether or not it's supported
     */
    mapping(bytes4 => bool) private _supportedInterfaces;

    /**
     * @dev A contract implementing SupportsInterfaceWithLookup
     * implement ERC165 itself
     */
    constructor () internal {
        _registerInterface(_INTERFACE_ID_ERC165);
    }

    /**
     * @dev implement supportsInterface(bytes4) using a lookup table
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool) {
        return _supportedInterfaces[interfaceId];
    }

    /**
     * @dev internal method for registering an interface
     */
    function _registerInterface(bytes4 interfaceId) internal {
        require(interfaceId != 0xffffffff);
        _supportedInterfaces[interfaceId] = true;
    }
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC721\ERC721.sol

pragma solidity ^0.5.2;







/**
 * @title ERC721 Non-Fungible Token Standard basic implementation
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721 is ERC165, IERC721 {
    using SafeMath for uint256;
    using Address for address;
    using Counters for Counters.Counter;

    // Equals to `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`
    // which can be also obtained as `IERC721Receiver(0).onERC721Received.selector`
    bytes4 private constant _ERC721_RECEIVED = 0x150b7a02;

    // Mapping from token ID to owner
    mapping (uint256 => address) private _tokenOwner;

    // Mapping from token ID to approved address
    mapping (uint256 => address) private _tokenApprovals;

    // Mapping from owner to number of owned token
    mapping (address => Counters.Counter) private _ownedTokensCount;

    // Mapping from owner to operator approvals
    mapping (address => mapping (address => bool)) private _operatorApprovals;

    bytes4 private constant _INTERFACE_ID_ERC721 = 0x80ac58cd;
    /*
     * 0x80ac58cd ===
     *     bytes4(keccak256('balanceOf(address)')) ^
     *     bytes4(keccak256('ownerOf(uint256)')) ^
     *     bytes4(keccak256('approve(address,uint256)')) ^
     *     bytes4(keccak256('getApproved(uint256)')) ^
     *     bytes4(keccak256('setApprovalForAll(address,bool)')) ^
     *     bytes4(keccak256('isApprovedForAll(address,address)')) ^
     *     bytes4(keccak256('transferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^
     *     bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)'))
     */

    constructor () public {
        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721);
    }

    /**
     * @dev Gets the balance of the specified address
     * @param owner address to query the balance of
     * @return uint256 representing the amount owned by the passed address
     */
    function balanceOf(address owner) public view returns (uint256) {
        require(owner != address(0));
        return _ownedTokensCount[owner].current();
    }

    /**
     * @dev Gets the owner of the specified token ID
     * @param tokenId uint256 ID of the token to query the owner of
     * @return address currently marked as the owner of the given token ID
     */
    function ownerOf(uint256 tokenId) public view returns (address) {
        address owner = _tokenOwner[tokenId];
        require(owner != address(0));
        return owner;
    }

    /**
     * @dev Approves another address to transfer the given token ID
     * The zero address indicates there is no approved address.
     * There can only be one approved address per token at a given time.
     * Can only be called by the token owner or an approved operator.
     * @param to address to be approved for the given token ID
     * @param tokenId uint256 ID of the token to be approved
     */
    function approve(address to, uint256 tokenId) public {
        address owner = ownerOf(tokenId);
        require(to != owner);
        require(msg.sender == owner || isApprovedForAll(owner, msg.sender));

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @dev Gets the approved address for a token ID, or zero if no address set
     * Reverts if the token ID does not exist.
     * @param tokenId uint256 ID of the token to query the approval of
     * @return address currently approved for the given token ID
     */
    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId));
        return _tokenApprovals[tokenId];
    }

    /**
     * @dev Sets or unsets the approval of a given operator
     * An operator is allowed to transfer all tokens of the sender on their behalf
     * @param to operator address to set the approval
     * @param approved representing the status of the approval to be set
     */
    function setApprovalForAll(address to, bool approved) public {
        require(to != msg.sender);
        _operatorApprovals[msg.sender][to] = approved;
        emit ApprovalForAll(msg.sender, to, approved);
    }

    /**
     * @dev Tells whether an operator is approved by a given owner
     * @param owner owner address which you want to query the approval of
     * @param operator operator address which you want to query the approval of
     * @return bool whether the given operator is approved by the given owner
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev Transfers the ownership of a given token ID to another address
     * Usage of this method is discouraged, use `safeTransferFrom` whenever possible
     * Requires the msg.sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function transferFrom(address from, address to, uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId));

        _transferFrom(from, to, tokenId);
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg.sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev Safely transfers the ownership of a given token ID to another address
     * If the target address is a contract, it must implement `onERC721Received`,
     * which is called upon a safe transfer, and return the magic value
     * `bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"))`; otherwise,
     * the transfer is reverted.
     * Requires the msg.sender to be the owner, approved, or operator
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes data to send along with a safe transfer check
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public {
        transferFrom(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, _data));
    }

    /**
     * @dev Returns whether the specified token exists
     * @param tokenId uint256 ID of the token to query the existence of
     * @return bool whether the token exists
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        address owner = _tokenOwner[tokenId];
        return owner != address(0);
    }

    /**
     * @dev Returns whether the given spender can transfer a given token ID
     * @param spender address of the spender to query
     * @param tokenId uint256 ID of the token to be transferred
     * @return bool whether the msg.sender is approved for the given token ID,
     * is an operator of the owner, or is the owner of the token
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        address owner = ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to The address that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0));
        require(!_exists(tokenId));

        _tokenOwner[tokenId] = to;
        _ownedTokensCount[to].increment();

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

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * Deprecated, use _burn(uint256) instead.
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(address owner, uint256 tokenId) internal {
        require(ownerOf(tokenId) == owner);

        _clearApproval(tokenId);

        _ownedTokensCount[owner].decrement();
        _tokenOwner[tokenId] = address(0);

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

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(uint256 tokenId) internal {
        _burn(ownerOf(tokenId), tokenId);
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        require(ownerOf(tokenId) == from);
        require(to != address(0));

        _clearApproval(tokenId);

        _ownedTokensCount[from].decrement();
        _ownedTokensCount[to].increment();

        _tokenOwner[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Internal function to invoke `onERC721Received` on a target address
     * The call is not executed if the target address is not a contract
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        internal returns (bool)
    {
        if (!to.isContract()) {
            return true;
        }

        bytes4 retval = IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data);
        return (retval == _ERC721_RECEIVED);
    }

    /**
     * @dev Private function to clear current approval of a given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _clearApproval(uint256 tokenId) private {
        if (_tokenApprovals[tokenId] != address(0)) {
            _tokenApprovals[tokenId] = address(0);
        }
    }
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC721\IERC721Enumerable.sol

pragma solidity ^0.5.2;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Enumerable is IERC721 {
    function totalSupply() public view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256 tokenId);

    function tokenByIndex(uint256 index) public view returns (uint256);
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC721\ERC721Enumerable.sol

pragma solidity ^0.5.2;




/**
 * @title ERC-721 Non-Fungible Token with optional enumeration extension logic
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721Enumerable is ERC165, ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => uint256[]) private _ownedTokens;

    // Mapping from token ID to index of the owner tokens list
    mapping(uint256 => uint256) private _ownedTokensIndex;

    // Array with all token ids, used for enumeration
    uint256[] private _allTokens;

    // Mapping from token id to position in the allTokens array
    mapping(uint256 => uint256) private _allTokensIndex;

    bytes4 private constant _INTERFACE_ID_ERC721_ENUMERABLE = 0x780e9d63;
    /*
     * 0x780e9d63 ===
     *     bytes4(keccak256('totalSupply()')) ^
     *     bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^
     *     bytes4(keccak256('tokenByIndex(uint256)'))
     */

    /**
     * @dev Constructor function
     */
    constructor () public {
        // register the supported interface to conform to ERC721Enumerable via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_ENUMERABLE);
    }

    /**
     * @dev Gets the token ID at a given index of the tokens list of the requested owner
     * @param owner address owning the tokens list to be accessed
     * @param index uint256 representing the index to be accessed of the requested tokens list
     * @return uint256 token ID at the given index of the tokens list owned by the requested address
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view returns (uint256) {
        require(index < balanceOf(owner));
        return _ownedTokens[owner][index];
    }

    /**
     * @dev Gets the total amount of tokens stored by the contract
     * @return uint256 representing the total amount of tokens
     */
    function totalSupply() public view returns (uint256) {
        return _allTokens.length;
    }

    /**
     * @dev Gets the token ID at a given index of all the tokens in this contract
     * Reverts if the index is greater or equal to the total number of tokens
     * @param index uint256 representing the index to be accessed of the tokens list
     * @return uint256 token ID at the given index of the tokens list
     */
    function tokenByIndex(uint256 index) public view returns (uint256) {
        require(index < totalSupply());
        return _allTokens[index];
    }

    /**
     * @dev Internal function to transfer ownership of a given token ID to another address.
     * As opposed to transferFrom, this imposes no restrictions on msg.sender.
     * @param from current owner of the token
     * @param to address to receive the ownership of the given token ID
     * @param tokenId uint256 ID of the token to be transferred
     */
    function _transferFrom(address from, address to, uint256 tokenId) internal {
        super._transferFrom(from, to, tokenId);

        _removeTokenFromOwnerEnumeration(from, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);
    }

    /**
     * @dev Internal function to mint a new token
     * Reverts if the given token ID already exists
     * @param to address the beneficiary that will own the minted token
     * @param tokenId uint256 ID of the token to be minted
     */
    function _mint(address to, uint256 tokenId) internal {
        super._mint(to, tokenId);

        _addTokenToOwnerEnumeration(to, tokenId);

        _addTokenToAllTokensEnumeration(tokenId);
    }

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * Deprecated, use _burn(uint256) instead
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned
     */
    function _burn(address owner, uint256 tokenId) internal {
        super._burn(owner, tokenId);

        _removeTokenFromOwnerEnumeration(owner, tokenId);
        // Since tokenId will be deleted, we can clear its slot in _ownedTokensIndex to trigger a gas refund
        _ownedTokensIndex[tokenId] = 0;

        _removeTokenFromAllTokensEnumeration(tokenId);
    }

    /**
     * @dev Gets the list of token IDs of the requested owner
     * @param owner address owning the tokens
     * @return uint256[] List of token IDs owned by the requested address
     */
    function _tokensOfOwner(address owner) internal view returns (uint256[] storage) {
        return _ownedTokens[owner];
    }

    /**
     * @dev Private function to add a token to this extension's ownership-tracking data structures.
     * @param to address representing the new owner of the given token ID
     * @param tokenId uint256 ID of the token to be added to the tokens list of the given address
     */
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        _ownedTokensIndex[tokenId] = _ownedTokens[to].length;
        _ownedTokens[to].push(tokenId);
    }

    /**
     * @dev Private function to add a token to this extension's token tracking data structures.
     * @param tokenId uint256 ID of the token to be added to the tokens list
     */
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }

    /**
     * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
     * while the token is not assigned a new owner, the _ownedTokensIndex mapping is _not_ updated: this allows for
     * gas optimizations e.g. when performing a transfer operation (avoiding double writes).
     * This has O(1) time complexity, but alters the order of the _ownedTokens array.
     * @param from address representing the previous owner of the given token ID
     * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
     */
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _ownedTokens[from].length.sub(1);
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary
        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
            _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
        }

        // This also deletes the contents at the last position of the array
        _ownedTokens[from].length--;

        // Note that _ownedTokensIndex[tokenId] hasn't been cleared: it still points to the old slot (now occupied by
        // lastTokenId, or just over the end of the array if the token was the last one).
    }

    /**
     * @dev Private function to remove a token from this extension's token tracking data structures.
     * This has O(1) time complexity, but alters the order of the _allTokens array.
     * @param tokenId uint256 ID of the token to be removed from the tokens list
     */
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
        // then delete the last slot (swap and pop).

        uint256 lastTokenIndex = _allTokens.length.sub(1);
        uint256 tokenIndex = _allTokensIndex[tokenId];

        // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
        // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
        // an 'if' statement (like in _removeTokenFromOwnerEnumeration)
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
        _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index

        // This also deletes the contents at the last position of the array
        _allTokens.length--;
        _allTokensIndex[tokenId] = 0;
    }
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC721\IERC721Metadata.sol

pragma solidity ^0.5.2;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
contract IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

// File: node_modules\openzeppelin-solidity\contracts\token\ERC721\ERC721Metadata.sol

pragma solidity ^0.5.2;




contract ERC721Metadata is ERC165, ERC721, IERC721Metadata {
    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    bytes4 private constant _INTERFACE_ID_ERC721_METADATA = 0x5b5e139f;
    /*
     * 0x5b5e139f ===
     *     bytes4(keccak256('name()')) ^
     *     bytes4(keccak256('symbol()')) ^
     *     bytes4(keccak256('tokenURI(uint256)'))
     */

    /**
     * @dev Constructor function
     */
    constructor (string memory name, string memory symbol) public {
        _name = name;
        _symbol = symbol;

        // register the supported interfaces to conform to ERC721 via ERC165
        _registerInterface(_INTERFACE_ID_ERC721_METADATA);
    }

    /**
     * @dev Gets the token name
     * @return string representing the token name
     */
    function name() external view returns (string memory) {
        return _name;
    }

    /**
     * @dev Gets the token symbol
     * @return string representing the token symbol
     */
    function symbol() external view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns an URI for a given token ID
     * Throws if the token ID does not exist. May return an empty string.
     * @param tokenId uint256 ID of the token to query
     */
    function tokenURI(uint256 tokenId) external view returns (string memory) {
        require(_exists(tokenId));
        return _tokenURIs[tokenId];
    }

    /**
     * @dev Internal function to set the token URI for a given token
     * Reverts if the token ID does not exist
     * @param tokenId uint256 ID of the token to set its URI
     * @param uri string URI to assign
     */
    function _setTokenURI(uint256 tokenId, string memory uri) internal {
        require(_exists(tokenId));
        _tokenURIs[tokenId] = uri;
    }

    /**
     * @dev Internal function to burn a specific token
     * Reverts if the token does not exist
     * Deprecated, use _burn(uint256) instead
     * @param owner owner of the token to burn
     * @param tokenId uint256 ID of the token being burned by the msg.sender
     */
    function _burn(address owner, uint256 tokenId) internal {
        super._burn(owner, tokenId);

        // Clear metadata (if any)
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
    }
}

// File: openzeppelin-solidity\contracts\token\ERC721\ERC721Full.sol

pragma solidity ^0.5.2;




/**
 * @title Full ERC721 Token
 * This implementation includes all the required and some optional functionality of the ERC721 standard
 * Moreover, it includes approve all functionality using operator terminology
 * @dev see https://eips.ethereum.org/EIPS/eip-721
 */
contract ERC721Full is ERC721, ERC721Enumerable, ERC721Metadata {
    constructor (string memory name, string memory symbol) public ERC721Metadata(name, symbol) {
        // solhint-disable-previous-line no-empty-blocks
    }
}

// File: node_modules\openzeppelin-solidity\contracts\access\Roles.sol

pragma solidity ^0.5.2;

/**
 * @title Roles
 * @dev Library for managing addresses assigned to a Role.
 */
library Roles {
    struct Role {
        mapping (address => bool) bearer;
    }

    /**
     * @dev give an account access to this role
     */
    function add(Role storage role, address account) internal {
        require(account != address(0));
        require(!has(role, account));

        role.bearer[account] = true;
    }

    /**
     * @dev remove an account's access to this role
     */
    function remove(Role storage role, address account) internal {
        require(account != address(0));
        require(has(role, account));

        role.bearer[account] = false;
    }

    /**
     * @dev check if an account has this role
     * @return bool
     */
    function has(Role storage role, address account) internal view returns (bool) {
        require(account != address(0));
        return role.bearer[account];
    }
}

// File: node_modules\openzeppelin-solidity\contracts\access\roles\MinterRole.sol

pragma solidity ^0.5.2;


contract MinterRole {
    using Roles for Roles.Role;

    event MinterAdded(address indexed account);
    event MinterRemoved(address indexed account);

    Roles.Role private _minters;

    constructor () internal {
        _addMinter(msg.sender);
    }

    modifier onlyMinter() {
        require(isMinter(msg.sender));
        _;
    }

    function isMinter(address account) public view returns (bool) {
        return _minters.has(account);
    }

    function addMinter(address account) public onlyMinter {
        _addMinter(account);
    }

    function renounceMinter() public {
        _removeMinter(msg.sender);
    }

    function _addMinter(address account) internal {
        _minters.add(account);
        emit MinterAdded(account);
    }

    function _removeMinter(address account) internal {
        _minters.remove(account);
        emit MinterRemoved(account);
    }
}

// File: openzeppelin-solidity\contracts\token\ERC721\ERC721Mintable.sol

pragma solidity ^0.5.2;



/**
 * @title ERC721Mintable
 * @dev ERC721 minting logic
 */
contract ERC721Mintable is ERC721, MinterRole {
    /**
     * @dev Function to mint tokens
     * @param to The address that will receive the minted tokens.
     * @param tokenId The token id to mint.
     * @return A boolean that indicates if the operation was successful.
     */
    function mint(address to, uint256 tokenId) public onlyMinter returns (bool) {
        _mint(to, tokenId);
        return true;
    }
}

// File: openzeppelin-solidity\contracts\token\ERC721\ERC721Burnable.sol

pragma solidity ^0.5.2;


/**
 * @title ERC721 Burnable Token
 * @dev ERC721 Token that can be irreversibly burned (destroyed).
 */
contract ERC721Burnable is ERC721 {
    /**
     * @dev Burns a specific ERC721 token.
     * @param tokenId uint256 id of the ERC721 token to be burned.
     */
    function burn(uint256 tokenId) public {
        require(_isApprovedOrOwner(msg.sender, tokenId));
        _burn(tokenId);
    }
}

// File: openzeppelin-solidity\contracts\ownership\Ownable.sol

pragma solidity ^0.5.2;

/**
 * @title Ownable
 * @dev The Ownable contract has an owner address, and provides basic authorization control
 * functions, this simplifies the implementation of "user permissions".
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev The Ownable constructor sets the original `owner` of the contract to the sender
     * account.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @return the address of the owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner());
        _;
    }

    /**
     * @return true if `msg.sender` is the owner of the contract.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Allows the current owner to relinquish control of the contract.
     * It will not be possible to call the functions with the `onlyOwner`
     * modifier anymore.
     * @notice Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Allows the current owner to transfer control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers control of the contract to a newOwner.
     * @param newOwner The address to transfer ownership to.
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: node_modules\openzeppelin-solidity\contracts\access\roles\PauserRole.sol

pragma solidity ^0.5.2;


contract PauserRole {
    using Roles for Roles.Role;

    event PauserAdded(address indexed account);
    event PauserRemoved(address indexed account);

    Roles.Role private _pausers;

    constructor () internal {
        _addPauser(msg.sender);
    }

    modifier onlyPauser() {
        require(isPauser(msg.sender));
        _;
    }

    function isPauser(address account) public view returns (bool) {
        return _pausers.has(account);
    }

    function addPauser(address account) public onlyPauser {
        _addPauser(account);
    }

    function renouncePauser() public {
        _removePauser(msg.sender);
    }

    function _addPauser(address account) internal {
        _pausers.add(account);
        emit PauserAdded(account);
    }

    function _removePauser(address account) internal {
        _pausers.remove(account);
        emit PauserRemoved(account);
    }
}

// File: openzeppelin-solidity\contracts\lifecycle\Pausable.sol

pragma solidity ^0.5.2;


/**
 * @title Pausable
 * @dev Base contract which allows children to implement an emergency stop mechanism.
 */
contract Pausable is PauserRole {
    event Paused(address account);
    event Unpaused(address account);

    bool private _paused;

    constructor () internal {
        _paused = false;
    }

    /**
     * @return true if the contract is paused, false otherwise.
     */
    function paused() public view returns (bool) {
        return _paused;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     */
    modifier whenNotPaused() {
        require(!_paused);
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     */
    modifier whenPaused() {
        require(_paused);
        _;
    }

    /**
     * @dev called by the owner to pause, triggers stopped state
     */
    function pause() public onlyPauser whenNotPaused {
        _paused = true;
        emit Paused(msg.sender);
    }

    /**
     * @dev called by the owner to unpause, returns to normal state
     */
    function unpause() public onlyPauser whenPaused {
        _paused = false;
        emit Unpaused(msg.sender);
    }
}

// File: openzeppelin-solidity\contracts\cryptography\ECDSA.sol

pragma solidity ^0.5.2;

/**
 * @title Elliptic curve signature operations
 * @dev Based on https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d
 * TODO Remove this library once solidity supports passing a signature to ecrecover.
 * See https://github.com/ethereum/solidity/issues/864
 */

library ECDSA {
    /**
     * @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 signature bytes signature, the signature is generated using web3.eth.sign()
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Check the signature length
        if (signature.length != 65) {
            return (address(0));
        }

        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // ecrecover takes the signature parameters, and the only way to get them
        // currently is to use assembly.
        // solhint-disable-next-line no-inline-assembly
        assembly {
            r := mload(add(signature, 0x20))
            s := mload(add(signature, 0x40))
            v := byte(0, mload(add(signature, 0x60)))
        }

        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return address(0);
        }

        if (v != 27 && v != 28) {
            return address(0);
        }

        // If the signature is valid (and not malleable), return the signer address
        return ecrecover(hash, v, r, s);
    }

    /**
     * toEthSignedMessageHash
     * @dev prefix a bytes32 value with "\x19Ethereum Signed Message:"
     * and hash the result
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
}

// File: contracts\Part-DeployedProd.sol

pragma solidity ^0.5.0;







contract Part is ERC721Full, ERC721Mintable, ERC721Burnable, Ownable, Pausable {
  using ECDSA for bytes32;

  event Disabled(address account);
  event Enabled(address account);

  constructor (string memory name, string memory symbol) public ERC721Full(name, symbol) {
    // solhint-disable-previous-line no-empty-blocks
    _disabled = true;
  }

  bool private _disabled;

  modifier whenNotDisabled() {
      require(!_disabled, "Contract is disabled");
      _;
  }

  modifier whenDisabled() {
      require(_disabled, "Contract is not disabled");
      _;
  }

  /**
   * @dev called by the owner to pause, triggers stopped state
   */
  function disable() public onlyPauser whenNotDisabled {
      _disabled = true;
      emit Disabled(msg.sender);
  }

  /**
   * @dev called by the owner to unpause, returns to normal state
   */
  function enable() public
    onlyPauser
    whenDisabled {
      _disabled = false;
      emit Enabled(msg.sender);
  }

  function mintPart(address to, uint256 tokenId, string memory uri) public
    whenNotPaused
    onlyMinter
    returns (bool) {
    _mint(to, tokenId);
    _setTokenURI(tokenId, uri);
    return true;
  }

  function mintPartSigned(address to, uint256 tokenId, string memory uri,
    bytes memory signature) public
    whenNotDisabled
    returns (bool) {
    address signer = keccak256(abi.encodePacked(tokenId, msg.sender, uri))
      .toEthSignedMessageHash()
      .recover(signature);
    require(signer == owner(), "Incorrect message signer");

    _mint(to, tokenId);
    _setTokenURI(tokenId, uri);
    return true;
  }

  function transferFrom(address from, address to, uint256 tokenId) public
    whenNotDisabled {
      require(_isApprovedOrOwner(msg.sender, tokenId),
        "Item is not approved or owned");

      _transferFrom(from, to, tokenId);
  }

  function safeTransferFrom(address from, address to, uint256 tokenId) public
    whenNotDisabled {
      safeTransferFrom(from, to, tokenId, "");
  }

  function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public
    whenNotDisabled {
      transferFrom(from, to, tokenId);
      require(_checkOnERC721Received(from, to, tokenId, _data),
        "ERC721Received check failed");
  }

  function transferTokenFrom(address from, address to, uint256 tokenId) public 
    onlyMinter {
    require(_isApprovedOrOwner(msg.sender, tokenId),
      "Item is not approved or owned");

    _transferFrom(from, to, tokenId);
  }
}

Contract Security Audit

Contract ABI

[{"constant":true,"inputs":[{"name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"disable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"unpause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"mint","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isPauser","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"paused","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renouncePauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addPauser","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"pause","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"renounceMinter","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"enable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isMinter","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"}],"name":"transferTokenFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"from","type":"address"},{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"uri","type":"string"},{"name":"signature","type":"bytes"}],"name":"mintPartSigned","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"tokenId","type":"uint256"},{"name":"uri","type":"string"}],"name":"mintPart","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"name","type":"string"},{"name":"symbol","type":"string"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Disabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Enabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"PauserRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"MinterRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"approved","type":"address"},{"indexed":true,"name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"operator","type":"address"},{"indexed":false,"name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"}]

60806040523480156200001157600080fd5b5060405162003df838038062003df8833981018060405260408110156200003757600080fd5b8101908080516401000000008111156200005057600080fd5b828101905060208101848111156200006757600080fd5b81518560018202830111640100000000821117156200008557600080fd5b50509291906020018051640100000000811115620000a257600080fd5b82810190506020810184811115620000b957600080fd5b8151856001820283011164010000000082111715620000d757600080fd5b505092919050505081818181620001206301ffc9a77c0100000000000000000000000000000000000000000000000000000000026200033d640100000000026401000000009004565b6200015d6380ac58cd7c0100000000000000000000000000000000000000000000000000000000026200033d640100000000026401000000009004565b6200019a63780e9d637c0100000000000000000000000000000000000000000000000000000000026200033d640100000000026401000000009004565b8160099080519060200190620001b292919062000627565b5080600a9080519060200190620001cb92919062000627565b5062000209635b5e139f7c0100000000000000000000000000000000000000000000000000000000026200033d640100000000026401000000009004565b505050506200022733620003fb640100000000026401000000009004565b33600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3620002ff3362000465640100000000026401000000009004565b6000600f60006101000a81548160ff0219169083151502179055506001600f60016101000a81548160ff0219169083151502179055505050620006d6565b63ffffffff7c010000000000000000000000000000000000000000000000000000000002817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916141515156200038f57600080fd5b6001600080837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6200041f81600c620004cf64010000000002620031b2179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6200048981600e620004cf64010000000002620031b2179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156200050c57600080fd5b62000527828262000592640100000000026401000000009004565b1515156200053457600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620005d057600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200066a57805160ff19168380011785556200069b565b828001600101855582156200069b579182015b828111156200069a5782518255916020019190600101906200067d565b5b509050620006aa9190620006ae565b5090565b620006d391905b80821115620006cf576000816000905550600101620006b5565b5090565b90565b61371280620006e66000396000f3fe608060405234801561001057600080fd5b5060043610610239576000357c010000000000000000000000000000000000000000000000000000000090048063715018a611610142578063a3907d71116100ca578063c60da51e11610099578063c60da51e14610b34578063c87b56dd14610cc8578063e19b064714610d6f578063e985e9c514610e6c578063f2fde38b14610ee857610239565b8063a3907d711461095b578063aa271e1a14610965578063ad221195146109c1578063b88d4fde14610a2f57610239565b80638f32d59b116101115780638f32d59b1461081857806395d89b411461083a578063983b2d56146108bd5780639865027514610901578063a22cb4651461090b57610239565b8063715018a61461077657806382dc1ec4146107805780638456cb59146107c45780638da5cb5b146107ce57610239565b806340c10f19116101c55780634f6ccce7116101945780634f6ccce7146106425780635c975abb146106845780636352211e146106a65780636ef8d66d1461071457806370a082311461071e57610239565b806340c10f19146104e457806342842e0e1461054a57806342966c68146105b857806346fbf68e146105e657610239565b806318160ddd1161020c57806318160ddd146103e257806323b872dd146104005780632f2770db1461046e5780632f745c59146104785780633f4ba83a146104da57610239565b806301ffc9a71461023e57806306fdde03146102a3578063081812fc14610326578063095ea7b314610394575b600080fd5b6102896004803603602081101561025457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610f2c565b604051808215151515815260200191505060405180910390f35b6102ab610f93565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102eb5780820151818401526020810190506102d0565b50505050905090810190601f1680156103185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103526004803603602081101561033c57600080fd5b8101908080359060200190929190505050611035565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e0600480360360408110156103aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611086565b005b6103ea6111cb565b6040518082815260200191505060405180910390f35b61046c6004803603606081101561041657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111d8565b005b6104766112eb565b005b6104c46004803603604081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611404565b6040518082815260200191505060405180910390f35b6104e261147b565b005b610530600480360360408110156104fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061152a565b604051808215151515815260200191505060405180910390f35b6105b66004803603606081101561056057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611554565b005b6105e4600480360360208110156105ce57600080fd5b81019080803590602001909291905050506115fa565b005b610628600480360360208110156105fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061161b565b604051808215151515815260200191505060405180910390f35b61066e6004803603602081101561065857600080fd5b8101908080359060200190929190505050611638565b6040518082815260200191505060405180910390f35b61068c611670565b604051808215151515815260200191505060405180910390f35b6106d2600480360360208110156106bc57600080fd5b8101908080359060200190929190505050611687565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61071c611705565b005b6107606004803603602081101561073457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611710565b6040518082815260200191505060405180910390f35b61077e61179b565b005b6107c26004803603602081101561079657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061186f565b005b6107cc61188f565b005b6107d661193f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610820611969565b604051808215151515815260200191505060405180910390f35b6108426119c1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610882578082015181840152602081019050610867565b50505050905090810190601f1680156108af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108ff600480360360208110156108d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a63565b005b610909611a83565b005b6109596004803603604081101561092157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a8e565b005b610963611bca565b005b6109a76004803603602081101561097b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce2565b604051808215151515815260200191505060405180910390f35b610a2d600480360360608110156109d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cff565b005b610b3260048036036080811015610a4557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610aac57600080fd5b820183602082011115610abe57600080fd5b80359060200191846001830284011164010000000083111715610ae057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611da1565b005b610cae60048036036080811015610b4a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610b9157600080fd5b820183602082011115610ba357600080fd5b80359060200191846001830284011164010000000083111715610bc557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c2857600080fd5b820183602082011115610c3a57600080fd5b80359060200191846001830284011164010000000083111715610c5c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611eb7565b604051808215151515815260200191505060405180910390f35b610cf460048036036020811015610cde57600080fd5b81019080803590602001909291905050506120e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d34578082015181840152602081019050610d19565b50505050905090810190601f168015610d615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e5260048036036060811015610d8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610dcc57600080fd5b820183602082011115610dde57600080fd5b80359060200191846001830284011164010000000083111715610e0057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121af565b604051808215151515815260200191505060405180910390f35b610ece60048036036040811015610e8257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612200565b604051808215151515815260200191505060405180910390f35b610f2a60048036036020811015610efe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612294565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561102b5780601f106110005761010080835404028352916020019161102b565b820191906000526020600020905b81548152906001019060200180831161100e57829003601f168201915b5050505050905090565b6000611040826122b3565b151561104b57600080fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061109182611687565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156110ce57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061110e575061110d8133612200565b5b151561111957600080fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b600f60019054906101000a900460ff1615151561125d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b6112673382612325565b15156112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4974656d206973206e6f7420617070726f766564206f72206f776e656400000081525060200191505060405180910390fd5b6112e68383836123ba565b505050565b6112f43361161b565b15156112ff57600080fd5b600f60019054906101000a900460ff16151515611384576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055507ff54453d15e2e6aee566733e6da03165ea58500408e802e05aa4e75f2408f59fe33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600061140f83611710565b8210151561141c57600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561146857fe5b9060005260206000200154905092915050565b6114843361161b565b151561148f57600080fd5b600f60009054906101000a900460ff1615156114aa57600080fd5b6000600f60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600061153533611ce2565b151561154057600080fd5b61154a83836123de565b6001905092915050565b600f60019054906101000a900460ff161515156115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b6115f58383836020604051908101604052806000815250611da1565b505050565b6116043382612325565b151561160f57600080fd5b611618816123ff565b50565b600061163182600e61241490919063ffffffff16565b9050919050565b60006116426111cb565b8210151561164f57600080fd5b60078281548110151561165e57fe5b90600052602060002001549050919050565b6000600f60009054906101000a900460ff16905090565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116fc57600080fd5b80915050919050565b61170e336124a8565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561174d57600080fd5b611794600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612502565b9050919050565b6117a3611969565b15156117ae57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118783361161b565b151561188357600080fd5b61188c81612510565b50565b6118983361161b565b15156118a357600080fd5b600f60009054906101000a900460ff161515156118bf57600080fd5b6001600f60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a595780601f10611a2e57610100808354040283529160200191611a59565b820191906000526020600020905b815481529060010190602001808311611a3c57829003601f168201915b5050505050905090565b611a6c33611ce2565b1515611a7757600080fd5b611a808161256a565b50565b611a8c336125c4565b565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611ac957600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bd33361161b565b1515611bde57600080fd5b600f60019054906101000a900460ff161515611c62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6e7472616374206973206e6f742064697361626c6564000000000000000081525060200191505060405180910390fd5b6000600f60016101000a81548160ff0219169083151502179055507f44bcce471802f9158ee4390426e4a931d186757cc50d302f6747504c17516d1233604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000611cf882600c61241490919063ffffffff16565b9050919050565b611d0833611ce2565b1515611d1357600080fd5b611d1d3382612325565b1515611d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4974656d206973206e6f7420617070726f766564206f72206f776e656400000081525060200191505060405180910390fd5b611d9c8383836123ba565b505050565b600f60019054906101000a900460ff16151515611e26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b611e318484846111d8565b611e3d8484848461261e565b1515611eb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f455243373231526563656976656420636865636b206661696c6564000000000081525060200191505060405180910390fd5b50505050565b6000600f60019054906101000a900460ff16151515611f3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b60006120198361200b873388604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140182805190602001908083835b602083101515611fc95780518252602082019150602081019050602083039250611fa4565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405160208183030381529060405280519060200120612841565b61289990919063ffffffff16565b905061202361193f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e636f7272656374206d657373616765207369676e6572000000000000000081525060200191505060405180910390fd5b6120cf86866123de565b6120d985856129a0565b6001915050949350505050565b60606120f1826122b3565b15156120fc57600080fd5b600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121a35780601f10612178576101008083540402835291602001916121a3565b820191906000526020600020905b81548152906001019060200180831161218657829003601f168201915b50505050509050919050565b6000600f60009054906101000a900460ff161515156121cd57600080fd5b6121d633611ce2565b15156121e157600080fd5b6121eb84846123de565b6121f583836129a0565b600190509392505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61229c611969565b15156122a757600080fd5b6122b0816129e0565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061233183611687565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a057508373ffffffffffffffffffffffffffffffffffffffff1661238884611035565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b157506123b08185612200565b5b91505092915050565b6123c5838383612adc565b6123cf8382612ca3565b6123d98282612e47565b505050565b6123e88282612f0e565b6123f28282612e47565b6123fb81613058565b5050565b61241161240b82611687565b826130a4565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561245157600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124bc81600e61310390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b600081600001549050919050565b61252481600e6131b290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b61257e81600c6131b290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6125d881600c61310390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b600061263f8473ffffffffffffffffffffffffffffffffffffffff16613262565b151561264e5760019050612839565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561274557808201518184015260208101905061272a565b50505050905090810190601f1680156127725780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561279457600080fd5b505af11580156127a8573d6000803e3d6000fd5b505050506040513d60208110156127be57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b6000604182511415156128af576000905061299a565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115612904576000935050505061299a565b601b8160ff161415801561291c5750601c8160ff1614155b1561292d576000935050505061299a565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561298a573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b6129a9826122b3565b15156129b457600080fd5b80600b600084815260200190815260200160002090805190602001906129db9291906135cd565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612a1c57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff16612afc82611687565b73ffffffffffffffffffffffffffffffffffffffff16141515612b1e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612b5a57600080fd5b612b6381613275565b612baa600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613335565b612bf1600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613358565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612cfb6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061336e90919063ffffffff16565b90506000600660008481526020019081526020016000205490508181141515612dee576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515612d6c57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515612dc657fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612e40919061364d565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612f4a57600080fd5b612f53816122b3565b151515612f5f57600080fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612ff8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613358565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b6130ae8282613390565b6000600b60008381526020019081526020016000208054600181600116156101000203166002900490501415156130ff57600b600082815260200190815260200160002060006130fe9190613679565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561313f57600080fd5b6131498282612414565b151561315457600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156131ee57600080fd5b6131f88282612414565b15151561320457600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156133325760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61334d6001826000015461336e90919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600082821115151561337f57600080fd5b600082840390508091505092915050565b61339a82826133ca565b6133a48282612ca3565b600060066000838152602001908152602001600020819055506133c68161350f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff166133ea82611687565b73ffffffffffffffffffffffffffffffffffffffff1614151561340c57600080fd5b61341581613275565b61345c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613335565b60006001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061352a600160078054905061336e90919063ffffffff16565b9050600060086000848152602001908152602001600020549050600060078381548110151561355557fe5b906000526020600020015490508060078381548110151561357257fe5b906000526020600020018190555081600860008381526020019081526020016000208190555060078054809190600190036135ad919061364d565b506000600860008681526020019081526020016000208190555050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061360e57805160ff191683800117855561363c565b8280016001018555821561363c579182015b8281111561363b578251825591602001919060010190613620565b5b50905061364991906136c1565b5090565b8154818355818111156136745781836000526020600020918201910161367391906136c1565b5b505050565b50805460018160011615610100020316600290046000825580601f1061369f57506136be565b601f0160209004906000526020600020908101906136bd91906136c1565b5b50565b6136e391905b808211156136df5760008160009055506001016136c7565b5090565b9056fea165627a7a72305820e31a5479eae447a61bf03b1638b054dfe2259fdfc5935c61d4c2a31b1ba6ed0f0029000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012426174746c65205261636572732050617274000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064252504152540000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b5060043610610239576000357c010000000000000000000000000000000000000000000000000000000090048063715018a611610142578063a3907d71116100ca578063c60da51e11610099578063c60da51e14610b34578063c87b56dd14610cc8578063e19b064714610d6f578063e985e9c514610e6c578063f2fde38b14610ee857610239565b8063a3907d711461095b578063aa271e1a14610965578063ad221195146109c1578063b88d4fde14610a2f57610239565b80638f32d59b116101115780638f32d59b1461081857806395d89b411461083a578063983b2d56146108bd5780639865027514610901578063a22cb4651461090b57610239565b8063715018a61461077657806382dc1ec4146107805780638456cb59146107c45780638da5cb5b146107ce57610239565b806340c10f19116101c55780634f6ccce7116101945780634f6ccce7146106425780635c975abb146106845780636352211e146106a65780636ef8d66d1461071457806370a082311461071e57610239565b806340c10f19146104e457806342842e0e1461054a57806342966c68146105b857806346fbf68e146105e657610239565b806318160ddd1161020c57806318160ddd146103e257806323b872dd146104005780632f2770db1461046e5780632f745c59146104785780633f4ba83a146104da57610239565b806301ffc9a71461023e57806306fdde03146102a3578063081812fc14610326578063095ea7b314610394575b600080fd5b6102896004803603602081101561025457600080fd5b8101908080357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19169060200190929190505050610f2c565b604051808215151515815260200191505060405180910390f35b6102ab610f93565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102eb5780820151818401526020810190506102d0565b50505050905090810190601f1680156103185780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6103526004803603602081101561033c57600080fd5b8101908080359060200190929190505050611035565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e0600480360360408110156103aa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611086565b005b6103ea6111cb565b6040518082815260200191505060405180910390f35b61046c6004803603606081101561041657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506111d8565b005b6104766112eb565b005b6104c46004803603604081101561048e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611404565b6040518082815260200191505060405180910390f35b6104e261147b565b005b610530600480360360408110156104fa57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061152a565b604051808215151515815260200191505060405180910390f35b6105b66004803603606081101561056057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611554565b005b6105e4600480360360208110156105ce57600080fd5b81019080803590602001909291905050506115fa565b005b610628600480360360208110156105fc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061161b565b604051808215151515815260200191505060405180910390f35b61066e6004803603602081101561065857600080fd5b8101908080359060200190929190505050611638565b6040518082815260200191505060405180910390f35b61068c611670565b604051808215151515815260200191505060405180910390f35b6106d2600480360360208110156106bc57600080fd5b8101908080359060200190929190505050611687565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61071c611705565b005b6107606004803603602081101561073457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611710565b6040518082815260200191505060405180910390f35b61077e61179b565b005b6107c26004803603602081101561079657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061186f565b005b6107cc61188f565b005b6107d661193f565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610820611969565b604051808215151515815260200191505060405180910390f35b6108426119c1565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610882578082015181840152602081019050610867565b50505050905090810190601f1680156108af5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6108ff600480360360208110156108d357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611a63565b005b610909611a83565b005b6109596004803603604081101561092157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611a8e565b005b610963611bca565b005b6109a76004803603602081101561097b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ce2565b604051808215151515815260200191505060405180910390f35b610a2d600480360360608110156109d757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611cff565b005b610b3260048036036080811015610a4557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610aac57600080fd5b820183602082011115610abe57600080fd5b80359060200191846001830284011164010000000083111715610ae057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611da1565b005b610cae60048036036080811015610b4a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610b9157600080fd5b820183602082011115610ba357600080fd5b80359060200191846001830284011164010000000083111715610bc557600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190640100000000811115610c2857600080fd5b820183602082011115610c3a57600080fd5b80359060200191846001830284011164010000000083111715610c5c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611eb7565b604051808215151515815260200191505060405180910390f35b610cf460048036036020811015610cde57600080fd5b81019080803590602001909291905050506120e6565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610d34578082015181840152602081019050610d19565b50505050905090810190601f168015610d615780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610e5260048036036060811015610d8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190640100000000811115610dcc57600080fd5b820183602082011115610dde57600080fd5b80359060200191846001830284011164010000000083111715610e0057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505091929192905050506121af565b604051808215151515815260200191505060405180910390f35b610ece60048036036040811015610e8257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612200565b604051808215151515815260200191505060405180910390f35b610f2a60048036036020811015610efe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612294565b005b6000806000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b606060098054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561102b5780601f106110005761010080835404028352916020019161102b565b820191906000526020600020905b81548152906001019060200180831161100e57829003601f168201915b5050505050905090565b6000611040826122b3565b151561104b57600080fd5b6002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061109182611687565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141515156110ce57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061110e575061110d8133612200565b5b151561111957600080fd5b826002600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000600780549050905090565b600f60019054906101000a900460ff1615151561125d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b6112673382612325565b15156112db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4974656d206973206e6f7420617070726f766564206f72206f776e656400000081525060200191505060405180910390fd5b6112e68383836123ba565b505050565b6112f43361161b565b15156112ff57600080fd5b600f60019054906101000a900460ff16151515611384576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b6001600f60016101000a81548160ff0219169083151502179055507ff54453d15e2e6aee566733e6da03165ea58500408e802e05aa4e75f2408f59fe33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600061140f83611710565b8210151561141c57600080fd5b600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110151561146857fe5b9060005260206000200154905092915050565b6114843361161b565b151561148f57600080fd5b600f60009054906101000a900460ff1615156114aa57600080fd5b6000600f60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b600061153533611ce2565b151561154057600080fd5b61154a83836123de565b6001905092915050565b600f60019054906101000a900460ff161515156115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b6115f58383836020604051908101604052806000815250611da1565b505050565b6116043382612325565b151561160f57600080fd5b611618816123ff565b50565b600061163182600e61241490919063ffffffff16565b9050919050565b60006116426111cb565b8210151561164f57600080fd5b60078281548110151561165e57fe5b90600052602060002001549050919050565b6000600f60009054906101000a900460ff16905090565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156116fc57600080fd5b80915050919050565b61170e336124a8565b565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561174d57600080fd5b611794600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020612502565b9050919050565b6117a3611969565b15156117ae57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6118783361161b565b151561188357600080fd5b61188c81612510565b50565b6118983361161b565b15156118a357600080fd5b600f60009054906101000a900460ff161515156118bf57600080fd5b6001600f60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614905090565b6060600a8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611a595780601f10611a2e57610100808354040283529160200191611a59565b820191906000526020600020905b815481529060010190602001808311611a3c57829003601f168201915b5050505050905090565b611a6c33611ce2565b1515611a7757600080fd5b611a808161256a565b50565b611a8c336125c4565b565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611ac957600080fd5b80600460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051808215151515815260200191505060405180910390a35050565b611bd33361161b565b1515611bde57600080fd5b600f60019054906101000a900460ff161515611c62576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f436f6e7472616374206973206e6f742064697361626c6564000000000000000081525060200191505060405180910390fd5b6000600f60016101000a81548160ff0219169083151502179055507f44bcce471802f9158ee4390426e4a931d186757cc50d302f6747504c17516d1233604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390a1565b6000611cf882600c61241490919063ffffffff16565b9050919050565b611d0833611ce2565b1515611d1357600080fd5b611d1d3382612325565b1515611d91576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4974656d206973206e6f7420617070726f766564206f72206f776e656400000081525060200191505060405180910390fd5b611d9c8383836123ba565b505050565b600f60019054906101000a900460ff16151515611e26576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b611e318484846111d8565b611e3d8484848461261e565b1515611eb1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f455243373231526563656976656420636865636b206661696c6564000000000081525060200191505060405180910390fd5b50505050565b6000600f60019054906101000a900460ff16151515611f3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f436f6e74726163742069732064697361626c656400000000000000000000000081525060200191505060405180910390fd5b60006120198361200b873388604051602001808481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166c0100000000000000000000000002815260140182805190602001908083835b602083101515611fc95780518252602082019150602081019050602083039250611fa4565b6001836020036101000a038019825116818451168082178552505050505050905001935050505060405160208183030381529060405280519060200120612841565b61289990919063ffffffff16565b905061202361193f565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260188152602001807f496e636f7272656374206d657373616765207369676e6572000000000000000081525060200191505060405180910390fd5b6120cf86866123de565b6120d985856129a0565b6001915050949350505050565b60606120f1826122b3565b15156120fc57600080fd5b600b60008381526020019081526020016000208054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156121a35780601f10612178576101008083540402835291602001916121a3565b820191906000526020600020905b81548152906001019060200180831161218657829003601f168201915b50505050509050919050565b6000600f60009054906101000a900460ff161515156121cd57600080fd5b6121d633611ce2565b15156121e157600080fd5b6121eb84846123de565b6121f583836129a0565b600190509392505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61229c611969565b15156122a757600080fd5b6122b0816129e0565b50565b6000806001600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b60008061233183611687565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123a057508373ffffffffffffffffffffffffffffffffffffffff1661238884611035565b73ffffffffffffffffffffffffffffffffffffffff16145b806123b157506123b08185612200565b5b91505092915050565b6123c5838383612adc565b6123cf8382612ca3565b6123d98282612e47565b505050565b6123e88282612f0e565b6123f28282612e47565b6123fb81613058565b5050565b61241161240b82611687565b826130a4565b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415151561245157600080fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6124bc81600e61310390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fcd265ebaf09df2871cc7bd4133404a235ba12eff2041bb89d9c714a2621c7c7e60405160405180910390a250565b600081600001549050919050565b61252481600e6131b290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6719d08c1888103bea251a4ed56406bd0c3e69723c8a1686e017e7bbe159b6f860405160405180910390a250565b61257e81600c6131b290919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f6ae172837ea30b801fbfcdd4108aa1d5bf8ff775444fd70256b44e6bf3dfc3f660405160405180910390a250565b6125d881600c61310390919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fe94479a9f7e1952cc78f2d6baab678adc1b772d936c6583def489e524cb6669260405160405180910390a250565b600061263f8473ffffffffffffffffffffffffffffffffffffffff16613262565b151561264e5760019050612839565b60008473ffffffffffffffffffffffffffffffffffffffff1663150b7a02338887876040518563ffffffff167c0100000000000000000000000000000000000000000000000000000000028152600401808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561274557808201518184015260208101905061272a565b50505050905090810190601f1680156127725780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b15801561279457600080fd5b505af11580156127a8573d6000803e3d6000fd5b505050506040513d60208110156127be57600080fd5b8101908080519060200190929190505050905063150b7a027c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b6000604182511415156128af576000905061299a565b60008060006020850151925060408501519150606085015160001a90507f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a082600190041115612904576000935050505061299a565b601b8160ff161415801561291c5750601c8160ff1614155b1561292d576000935050505061299a565b60018682858560405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa15801561298a573d6000803e3d6000fd5b5050506020604051035193505050505b92915050565b6129a9826122b3565b15156129b457600080fd5b80600b600084815260200190815260200160002090805190602001906129db9291906135cd565b505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515612a1c57600080fd5b8073ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff16612afc82611687565b73ffffffffffffffffffffffffffffffffffffffff16141515612b1e57600080fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612b5a57600080fd5b612b6381613275565b612baa600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613335565b612bf1600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613358565b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000612cfb6001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208054905061336e90919063ffffffff16565b90506000600660008481526020019081526020016000205490508181141515612dee576000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515612d6c57fe5b9060005260206000200154905080600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083815481101515612dc657fe5b9060005260206000200181905550816006600083815260200190815260200160002081905550505b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480919060019003612e40919061364d565b5050505050565b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490506006600083815260200190815260200160002081905550600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150509060018203906000526020600020016000909192909190915055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515612f4a57600080fd5b612f53816122b3565b151515612f5f57600080fd5b816001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612ff8600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613358565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6007805490506008600083815260200190815260200160002081905550600781908060018154018082558091505090600182039060005260206000200160009091929091909150555050565b6130ae8282613390565b6000600b60008381526020019081526020016000208054600181600116156101000203166002900490501415156130ff57600b600082815260200190815260200160002060006130fe9190613679565b5b5050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415151561313f57600080fd5b6131498282612414565b151561315457600080fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141515156131ee57600080fd5b6131f88282612414565b15151561320457600080fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff166002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415156133325760006002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b50565b61334d6001826000015461336e90919063ffffffff16565b816000018190555050565b6001816000016000828254019250508190555050565b600082821115151561337f57600080fd5b600082840390508091505092915050565b61339a82826133ca565b6133a48282612ca3565b600060066000838152602001908152602001600020819055506133c68161350f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff166133ea82611687565b73ffffffffffffffffffffffffffffffffffffffff1614151561340c57600080fd5b61341581613275565b61345c600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020613335565b60006001600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600061352a600160078054905061336e90919063ffffffff16565b9050600060086000848152602001908152602001600020549050600060078381548110151561355557fe5b906000526020600020015490508060078381548110151561357257fe5b906000526020600020018190555081600860008381526020019081526020016000208190555060078054809190600190036135ad919061364d565b506000600860008681526020019081526020016000208190555050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061360e57805160ff191683800117855561363c565b8280016001018555821561363c579182015b8281111561363b578251825591602001919060010190613620565b5b50905061364991906136c1565b5090565b8154818355818111156136745781836000526020600020918201910161367391906136c1565b5b505050565b50805460018160011615610100020316600290046000825580601f1061369f57506136be565b601f0160209004906000526020600020908101906136bd91906136c1565b5b50565b6136e391905b808211156136df5760008160009055506001016136c7565b5090565b9056fea165627a7a72305820e31a5479eae447a61bf03b1638b054dfe2259fdfc5935c61d4c2a31b1ba6ed0f0029

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000012426174746c65205261636572732050617274000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000064252504152540000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Battle Racers Part
Arg [1] : symbol (string): BRPART

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 426174746c652052616365727320506172740000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [5] : 4252504152540000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

44801:2578:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;44801:2578:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8675:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8675:135:0;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31478:85;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31478:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12816:154;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12816:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12224:299;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12224:299:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23235:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;46461:241;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46461:241:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45473:118;;;:::i;:::-;;22892:185;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22892:185:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41539:118;;;:::i;:::-;;36266:135;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36266:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;46708:151;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;46708:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36794:130;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36794:130:0;;;;;;;;;;;;;;;;;:::i;:::-;;39717:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39717:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;23676:151;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;23676:151:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40792:78;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11612:181;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11612:181:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;39934:77;;;:::i;:::-;;11224:163;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11224:163:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;38470:140;;;:::i;:::-;;39834:92;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;39834:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;41328:116;;;:::i;:::-;;37680:79;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38015:92;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31677:89;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31677:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35347:92;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35347:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;35447:77;;;:::i;:::-;;13270:217;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13270:217:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45678:124;;;:::i;:::-;;35230:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35230:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;47140:236;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;47140:236:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46865:269;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;46865:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;46865:269:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46865:269:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46865:269:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;46865:269:0;;;;;;;;;;;;;;;:::i;:::-;;46024:431;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;46024:431:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;46024:431:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46024:431:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46024:431:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;46024:431:0;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;46024:431:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;46024:431:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;46024:431:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;46024:431:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;31972:154;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31972:154:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;31972:154:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45808:210;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;45808:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;45808:210:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;45808:210:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;45808:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;45808:210:0;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;13816:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13816:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;38787:109;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;38787:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;8675:135;8745:4;8769:20;:33;8790:11;8769:33;;;;;;;;;;;;;;;;;;;;;;;;;;;8762:40;;8675:135;;;:::o;31478:85::-;31517:13;31550:5;31543:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31478:85;:::o;12816:154::-;12875:7;12903:16;12911:7;12903;:16::i;:::-;12895:25;;;;;;;;12938:15;:24;12954:7;12938:24;;;;;;;;;;;;;;;;;;;;;12931:31;;12816:154;;;:::o;12224:299::-;12288:13;12304:16;12312:7;12304;:16::i;:::-;12288:32;;12345:5;12339:11;;:2;:11;;;;12331:20;;;;;;;;12384:5;12370:19;;:10;:19;;;:58;;;;12393:35;12410:5;12417:10;12393:16;:35::i;:::-;12370:58;12362:67;;;;;;;;12469:2;12442:15;:24;12458:7;12442:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12507:7;12503:2;12487:28;;12496:5;12487:28;;;;;;;;;;;;12224:299;;;:::o;23235:96::-;23279:7;23306:10;:17;;;;23299:24;;23235:96;:::o;46461:241::-;45238:9;;;;;;;;;;;45237:10;45229:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46571:39;46590:10;46602:7;46571:18;:39::i;:::-;46563:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46664:32;46678:4;46684:2;46688:7;46664:13;:32::i;:::-;46461:241;;;:::o;45473:118::-;39668:20;39677:10;39668:8;:20::i;:::-;39660:29;;;;;;;;45238:9;;;;;;;;;;;45237:10;45229:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45547:4;45535:9;;:16;;;;;;;;;;;;;;;;;;45565:20;45574:10;45565:20;;;;;;;;;;;;;;;;;;;;;;45473:118::o;22892:185::-;22972:7;23008:16;23018:5;23008:9;:16::i;:::-;23000:5;:24;22992:33;;;;;;;;23043:12;:19;23056:5;23043:19;;;;;;;;;;;;;;;23063:5;23043:26;;;;;;;;;;;;;;;;;;23036:33;;22892:185;;;;:::o;41539:118::-;39668:20;39677:10;39668:8;:20::i;:::-;39660:29;;;;;;;;41208:7;;;;;;;;;;;41200:16;;;;;;;;41608:5;41598:7;;:15;;;;;;;;;;;;;;;;;;41629:20;41638:10;41629:20;;;;;;;;;;;;;;;;;;;;;;41539:118::o;36266:135::-;36336:4;35181:20;35190:10;35181:8;:20::i;:::-;35173:29;;;;;;;;36353:18;36359:2;36363:7;36353:5;:18::i;:::-;36389:4;36382:11;;36266:135;;;;:::o;46708:151::-;45238:9;;;;;;;;;;;45237:10;45229:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46814:39;46831:4;46837:2;46841:7;46814:39;;;;;;;;;;;;;:16;:39::i;:::-;46708:151;;;:::o;36794:130::-;36851:39;36870:10;36882:7;36851:18;:39::i;:::-;36843:48;;;;;;;;36902:14;36908:7;36902:5;:14::i;:::-;36794:130;:::o;39717:109::-;39773:4;39797:21;39810:7;39797:8;:12;;:21;;;;:::i;:::-;39790:28;;39717:109;;;:::o;23676:151::-;23734:7;23770:13;:11;:13::i;:::-;23762:5;:21;23754:30;;;;;;;;23802:10;23813:5;23802:17;;;;;;;;;;;;;;;;;;23795:24;;23676:151;;;:::o;40792:78::-;40831:4;40855:7;;;;;;;;;;;40848:14;;40792:78;:::o;11612:181::-;11667:7;11687:13;11703:11;:20;11715:7;11703:20;;;;;;;;;;;;;;;;;;;;;11687:36;;11759:1;11742:19;;:5;:19;;;;11734:28;;;;;;;;11780:5;11773:12;;;11612:181;;;:::o;39934:77::-;39978:25;39992:10;39978:13;:25::i;:::-;39934:77::o;11224:163::-;11279:7;11324:1;11307:19;;:5;:19;;;;11299:28;;;;;;;;11345:34;:17;:24;11363:5;11345:24;;;;;;;;;;;;;;;:32;:34::i;:::-;11338:41;;11224:163;;;:::o;38470:140::-;37892:9;:7;:9::i;:::-;37884:18;;;;;;;;38569:1;38532:40;;38553:6;;;;;;;;;;;38532:40;;;;;;;;;;;;38600:1;38583:6;;:19;;;;;;;;;;;;;;;;;;38470:140::o;39834:92::-;39668:20;39677:10;39668:8;:20::i;:::-;39660:29;;;;;;;;39899:19;39910:7;39899:10;:19::i;:::-;39834:92;:::o;41328:116::-;39668:20;39677:10;39668:8;:20::i;:::-;39660:29;;;;;;;;41029:7;;;;;;;;;;;41028:8;41020:17;;;;;;;;41398:4;41388:7;;:14;;;;;;;;;;;;;;;;;;41418:18;41425:10;41418:18;;;;;;;;;;;;;;;;;;;;;;41328:116::o;37680:79::-;37718:7;37745:6;;;;;;;;;;;37738:13;;37680:79;:::o;38015:92::-;38055:4;38093:6;;;;;;;;;;;38079:20;;:10;:20;;;38072:27;;38015:92;:::o;31677:89::-;31718:13;31751:7;31744:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31677:89;:::o;35347:92::-;35181:20;35190:10;35181:8;:20::i;:::-;35173:29;;;;;;;;35412:19;35423:7;35412:10;:19::i;:::-;35347:92;:::o;35447:77::-;35491:25;35505:10;35491:13;:25::i;:::-;35447:77::o;13270:217::-;13356:10;13350:16;;:2;:16;;;;13342:25;;;;;;;;13415:8;13378:18;:30;13397:10;13378:30;;;;;;;;;;;;;;;:34;13409:2;13378:34;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;13466:2;13439:40;;13454:10;13439:40;;;13470:8;13439:40;;;;;;;;;;;;;;;;;;;;;;13270:217;;:::o;45678:124::-;39668:20;39677:10;39668:8;:20::i;:::-;39660:29;;;;;;;;45335:9;;;;;;;;;;;45327:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45758:5;45746:9;;:17;;;;;;;;;;;;;;;;;;45777:19;45785:10;45777:19;;;;;;;;;;;;;;;;;;;;;;45678:124::o;35230:109::-;35286:4;35310:21;35323:7;35310:8;:12;;:21;;;;:::i;:::-;35303:28;;35230:109;;;:::o;47140:236::-;35181:20;35190:10;35181:8;:20::i;:::-;35173:29;;;;;;;;47249:39;47268:10;47280:7;47249:18;:39::i;:::-;47241:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47338:32;47352:4;47358:2;47362:7;47338:13;:32::i;:::-;47140:236;;;:::o;46865:269::-;45238:9;;;;;;;;;;;45237:10;45229:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46991:31;47004:4;47010:2;47014:7;46991:12;:31::i;:::-;47039:48;47062:4;47068:2;47072:7;47081:5;47039:22;:48::i;:::-;47031:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46865:269;;;;:::o;46024:431::-;46167:4;45238:9;;;;;;;;;;;45237:10;45229:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46180:14;46197:113;46300:9;46197:86;46224:7;46233:10;46245:3;46207:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;51:19;36:153;;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;46207:42:0;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;46207:42:0;;;46197:53;;;;;;:84;:86::i;:::-;:102;;:113;;;;:::i;:::-;46180:130;;46335:7;:5;:7::i;:::-;46325:17;;:6;:17;;;46317:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46380:18;46386:2;46390:7;46380:5;:18::i;:::-;46405:26;46418:7;46427:3;46405:12;:26::i;:::-;46445:4;46438:11;;;46024:431;;;;;;:::o;31972:154::-;32030:13;32064:16;32072:7;32064;:16::i;:::-;32056:25;;;;;;;;32099:10;:19;32110:7;32099:19;;;;;;;;;;;32092:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31972:154;;;:::o;45808:210::-;45930:4;41029:7;;;;;;;;;;;41028:8;41020:17;;;;;;;;35181:20;35190:10;35181:8;:20::i;:::-;35173:29;;;;;;;;45943:18;45949:2;45953:7;45943:5;:18::i;:::-;45968:26;45981:7;45990:3;45968:12;:26::i;:::-;46008:4;46001:11;;45808:210;;;;;:::o;13816:147::-;13896:4;13920:18;:25;13939:5;13920:25;;;;;;;;;;;;;;;:35;13946:8;13920:35;;;;;;;;;;;;;;;;;;;;;;;;;13913:42;;13816:147;;;;:::o;38787:109::-;37892:9;:7;:9::i;:::-;37884:18;;;;;;;;38860:28;38879:8;38860:18;:28::i;:::-;38787:109;:::o;16505:155::-;16562:4;16579:13;16595:11;:20;16607:7;16595:20;;;;;;;;;;;;;;;;;;;;;16579:36;;16650:1;16633:19;;:5;:19;;;;16626:26;;;16505:155;;;:::o;17029:249::-;17114:4;17131:13;17147:16;17155:7;17147;:16::i;:::-;17131:32;;17193:5;17182:16;;:7;:16;;;:51;;;;17226:7;17202:31;;:20;17214:7;17202:11;:20::i;:::-;:31;;;17182:51;:87;;;;17237:32;17254:5;17261:7;17237:16;:32::i;:::-;17182:87;17174:96;;;17029:249;;;;:::o;24211:245::-;24297:38;24317:4;24323:2;24327:7;24297:19;:38::i;:::-;24348:47;24381:4;24387:7;24348:32;:47::i;:::-;24408:40;24436:2;24440:7;24408:27;:40::i;:::-;24211:245;;;:::o;24719:202::-;24783:24;24795:2;24799:7;24783:11;:24::i;:::-;24820:40;24848:2;24852:7;24820:27;:40::i;:::-;24873;24905:7;24873:31;:40::i;:::-;24719:202;;:::o;18556:92::-;18608:32;18614:16;18622:7;18614;:16::i;:::-;18632:7;18608:5;:32::i;:::-;18556:92;:::o;34581:165::-;34653:4;34697:1;34678:21;;:7;:21;;;;34670:30;;;;;;;;34718:4;:11;;:20;34730:7;34718:20;;;;;;;;;;;;;;;;;;;;;;;;;34711:27;;34581:165;;;;:::o;40149:130::-;40209:24;40225:7;40209:8;:15;;:24;;;;:::i;:::-;40263:7;40249:22;;;;;;;;;;;;40149:130;:::o;7471:114::-;7536:7;7563;:14;;;7556:21;;7471:114;;;:::o;40019:122::-;40076:21;40089:7;40076:8;:12;;:21;;;;:::i;:::-;40125:7;40113:20;;;;;;;;;;;;40019:122;:::o;35532:::-;35589:21;35602:7;35589:8;:12;;:21;;;;:::i;:::-;35638:7;35626:20;;;;;;;;;;;;35532:122;:::o;35662:130::-;35722:24;35738:7;35722:8;:15;;:24;;;;:::i;:::-;35776:7;35762:22;;;;;;;;;;;;35662:130;:::o;19945:356::-;20067:4;20094:15;:2;:13;;;:15::i;:::-;20093:16;20089:60;;;20133:4;20126:11;;;;20089:60;20161:13;20193:2;20177:36;;;20214:10;20226:4;20232:7;20241:5;20177:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;20177:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20177:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20177:70:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20177:70:0;;;;;;;;;;;;;;;;20161:86;;9679:10;20276:16;;20266:26;;;:6;:26;;;;20258:35;;;19945:356;;;;;;;:::o;44442:269::-;44511:7;44697:4;44644:58;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;44644:58:0;;;44634:69;;;;;;44627:76;;44442:269;;;:::o;42355:1930::-;42433:7;42516:2;42496:9;:16;:22;;42492:74;;;42551:1;42535:19;;;;42492:74;42635:9;42655;42675:7;42927:4;42916:9;42912:20;42906:27;42901:32;;42973:4;42962:9;42958:20;42952:27;42947:32;;43027:4;43016:9;43012:20;43006:27;43003:1;42998:36;42993:41;;43957:66;43952:1;43944:10;;;:79;43940:129;;;44055:1;44040:17;;;;;;;43940:129;44090:2;44085:1;:7;;;;:18;;;;;44101:2;44096:1;:7;;;;44085:18;44081:68;;;44135:1;44120:17;;;;;;;44081:68;44253:24;44263:4;44269:1;44272;44275;44253:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;44253:24:0;;;;;;;;44246:31;;;;;42355:1930;;;;;:::o;32371:147::-;32457:16;32465:7;32457;:16::i;:::-;32449:25;;;;;;;;32507:3;32485:10;:19;32496:7;32485:19;;;;;;;;;;;:25;;;;;;;;;;;;:::i;:::-;;32371:147;;:::o;39046:187::-;39140:1;39120:22;;:8;:22;;;;39112:31;;;;;;;;39188:8;39159:38;;39180:6;;;;;;;;;;;39159:38;;;;;;;;;;;;39217:8;39208:6;;:17;;;;;;;;;;;;;;;;;;39046:187;:::o;19032:374::-;19146:4;19126:24;;:16;19134:7;19126;:16::i;:::-;:24;;;19118:33;;;;;;;;19184:1;19170:16;;:2;:16;;;;19162:25;;;;;;;;19200:23;19215:7;19200:14;:23::i;:::-;19236:35;:17;:23;19254:4;19236:23;;;;;;;;;;;;;;;:33;:35::i;:::-;19282:33;:17;:21;19300:2;19282:21;;;;;;;;;;;;;;;:31;:33::i;:::-;19351:2;19328:11;:20;19340:7;19328:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;19390:7;19386:2;19371:27;;19380:4;19371:27;;;;;;;;;;;;19032:374;;;:::o;27388:1148::-;27654:22;27679:32;27709:1;27679:12;:18;27692:4;27679:18;;;;;;;;;;;;;;;:25;;;;:29;;:32;;;;:::i;:::-;27654:57;;27722:18;27743:17;:26;27761:7;27743:26;;;;;;;;;;;;27722:47;;27890:14;27876:10;:28;;27872:328;;;27921:19;27943:12;:18;27956:4;27943:18;;;;;;;;;;;;;;;27962:14;27943:34;;;;;;;;;;;;;;;;;;27921:56;;28027:11;27994:12;:18;28007:4;27994:18;;;;;;;;;;;;;;;28013:10;27994:30;;;;;;;;;;;;;;;;;:44;;;;28144:10;28111:17;:30;28129:11;28111:30;;;;;;;;;;;:43;;;;27872:328;;28289:12;:18;28302:4;28289:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;:::i;:::-;;27388:1148;;;;:::o;26212:186::-;26326:12;:16;26339:2;26326:16;;;;;;;;;;;;;;;:23;;;;26297:17;:26;26315:7;26297:26;;;;;;;;;;;:52;;;;26360:12;:16;26373:2;26360:16;;;;;;;;;;;;;;;26382:7;26360:30;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;26360:30:0;;;;;;;;;;;;;;;;;;;;;;26212:186;;:::o;17529:267::-;17615:1;17601:16;;:2;:16;;;;17593:25;;;;;;;;17638:16;17646:7;17638;:16::i;:::-;17637:17;17629:26;;;;;;;;17691:2;17668:11;:20;17680:7;17668:20;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;17704:33;:17;:21;17722:2;17704:21;;;;;;;;;;;;;;;:31;:33::i;:::-;17780:7;17776:2;17755:33;;17772:1;17755:33;;;;;;;;;;;;17529:267;;:::o;26599:164::-;26703:10;:17;;;;26676:15;:24;26692:7;26676:24;;;;;;;;;;;:44;;;;26731:10;26747:7;26731:24;;39:1:-1;33:3;27:10;23:18;57:10;52:3;45:23;79:10;72:17;;0:93;26731:24:0;;;;;;;;;;;;;;;;;;;;;;26599:164;:::o;32817:247::-;32884:27;32896:5;32903:7;32884:11;:27::i;:::-;33001:1;32970:10;:19;32981:7;32970:19;;;;;;;;;;;32964:33;;;;;;;;;;;;;;;;:38;;32960:97;;;33026:10;:19;33037:7;33026:19;;;;;;;;;;;;33019:26;;;;:::i;:::-;32960:97;32817:247;;:::o;34298:189::-;34397:1;34378:21;;:7;:21;;;;34370:30;;;;;;;;34419:18;34423:4;34429:7;34419:3;:18::i;:::-;34411:27;;;;;;;;34474:5;34451:4;:11;;:20;34463:7;34451:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34298:189;;:::o;34033:186::-;34129:1;34110:21;;:7;:21;;;;34102:30;;;;;;;;34152:18;34156:4;34162:7;34152:3;:18::i;:::-;34151:19;34143:28;;;;;;;;34207:4;34184;:11;;:20;34196:7;34184:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34033:186;;:::o;5705:627::-;5765:4;5782:12;6289:7;6277:20;6269:28;;6323:1;6316:4;:8;6309:15;;;5705:627;;;:::o;20468:175::-;20568:1;20532:38;;:15;:24;20548:7;20532:24;;;;;;;;;;;;;;;;;;;;;:38;;;;20528:108;;;20622:1;20587:15;:24;20603:7;20587:24;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20528:108;20468:175;:::o;7692:110::-;7773:21;7792:1;7773:7;:14;;;:18;;:21;;;;:::i;:::-;7756:7;:14;;:38;;;;7692:110;:::o;7593:91::-;7675:1;7657:7;:14;;;:19;;;;;;;;;;;7593:91;:::o;4474:150::-;4532:7;4565:1;4560;:6;;4552:15;;;;;;;;4578:9;4594:1;4590;:5;4578:17;;4615:1;4608:8;;;4474:150;;;;:::o;25202:372::-;25269:27;25281:5;25288:7;25269:11;:27::i;:::-;25309:48;25342:5;25349:7;25309:32;:48::i;:::-;25507:1;25478:17;:26;25496:7;25478:26;;;;;;;;;;;:30;;;;25521:45;25558:7;25521:36;:45::i;:::-;25202:372;;:::o;18078:292::-;18173:5;18153:25;;:16;18161:7;18153;:16::i;:::-;:25;;;18145:34;;;;;;;;18192:23;18207:7;18192:14;:23::i;:::-;18228:36;:17;:24;18246:5;18228:24;;;;;;;;;;;;;;;:34;:36::i;:::-;18306:1;18275:11;:20;18287:7;18275:20;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;18354:7;18350:1;18326:36;;18335:5;18326:36;;;;;;;;;;;;18078:292;;:::o;28831:1082::-;29084:22;29109:24;29131:1;29109:10;:17;;;;:21;;:24;;;;:::i;:::-;29084:49;;29144:18;29165:15;:24;29181:7;29165:24;;;;;;;;;;;;29144:45;;29516:19;29538:10;29549:14;29538:26;;;;;;;;;;;;;;;;;;29516:48;;29602:11;29577:10;29588;29577:22;;;;;;;;;;;;;;;;;:36;;;;29713:10;29682:15;:28;29698:11;29682:28;;;;;;;;;;;:41;;;;29847:10;:19;;;;;;;;;;;;:::i;:::-;;29904:1;29877:15;:24;29893:7;29877:24;;;;;;;;;;;:28;;;;28831:1082;;;;:::o;44801:2578::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

bzzr://e31a5479eae447a61bf03b1638b054dfe2259fdfc5935c61d4c2a31b1ba6ed0f
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.