ETH Price: $3,392.75 (-1.92%)
Gas: 9 Gwei

Token

CosmoChamber (CC)
 

Overview

Max Total Supply

0 CC

Holders

412

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
2 CC
0x354640486e3e8e9f151158197e4667daa2ad0bdc
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Cosmo chamber is an entrance, a connector, to the chamber of each artist's inner universe.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CosmoChamber

Compiler Version
v0.5.12+commit.7709ece9

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-06
*/

pragma solidity >=0.5.0;

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

    return c;
  }
  
  function div(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b > 0, "SafeMath#div: DIVISION_BY_ZERO");
    uint256 c = a / b;

    return c;
  }

  function sub(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b <= a, "SafeMath#sub: UNDERFLOW");
    uint256 c = a - b;

    return c;
  }

  function add(uint256 a, uint256 b) internal pure returns (uint256) {
    uint256 c = a + b;
    require(c >= a, "SafeMath#add: OVERFLOW");

    return c; 
  }

  function mod(uint256 a, uint256 b) internal pure returns (uint256) {
    require(b != 0, "SafeMath#mod: DIVISION_BY_ZERO");
    return a % b;
  }

}

library Address {
  function isContract(address account) internal view returns (bool) {
    bytes32 codehash;
    bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;

    // 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.
    assembly { codehash := extcodehash(account) }
    return (codehash != 0x0 && codehash != accountHash);
  }

}

library Strings {
	function strConcat(
		string memory _a,
		string memory _b,
		string memory _c,
		string memory _d,
		string memory _e
	) internal pure returns (string memory) {
		bytes memory _ba = bytes(_a);
		bytes memory _bb = bytes(_b);
		bytes memory _bc = bytes(_c);
		bytes memory _bd = bytes(_d);
		bytes memory _be = bytes(_e);
		string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length);
		bytes memory babcde = bytes(abcde);
		uint256 k = 0;
		for (uint256 i = 0; i < _ba.length; i++) babcde[k++] = _ba[i];
		for (uint256 i = 0; i < _bb.length; i++) babcde[k++] = _bb[i];
		for (uint256 i = 0; i < _bc.length; i++) babcde[k++] = _bc[i];
		for (uint256 i = 0; i < _bd.length; i++) babcde[k++] = _bd[i];
		for (uint256 i = 0; i < _be.length; i++) babcde[k++] = _be[i];
		return string(babcde);
	}

	function strConcat(
		string memory _a,
		string memory _b,
		string memory _c,
		string memory _d
	) internal pure returns (string memory) {
		return strConcat(_a, _b, _c, _d, "");
	}

	function strConcat(
		string memory _a,
		string memory _b,
		string memory _c
	) internal pure returns (string memory) {
		return strConcat(_a, _b, _c, "", "");
	}

	function strConcat(string memory _a, string memory _b) internal pure returns (string memory) {
		return strConcat(_a, _b, "", "", "");
	}

	function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
		if (_i == 0) {
			return "0";
		}
		uint256 j = _i;
		uint256 len;
		while (j != 0) {
			len++;
			j /= 10;
		}
		bytes memory bstr = new bytes(len);
		uint256 k = len - 1;
		while (_i != 0) {
			bstr[k--] = bytes1(uint8(48 + (_i % 10)));
			_i /= 10;
		}
		return string(bstr);
	}
}

contract Context {
    constructor () internal { }

    function _msgSender() internal view returns (address payable) {
        return msg.sender;
    }

    function _msgData() internal view returns (bytes memory) {
        this; 
        return msg.data;
    }
}

contract Ownable is Context {
    address payable public owner;

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

    constructor () internal {
        owner = msg.sender;
        emit OwnershipTransferred(address(0), msg.sender);
    }

    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    function isOwner() public view returns (bool) {
        return _msgSender() == owner;
    }
    
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(owner, address(0));
        owner = address(0);
    }
    
    function transferOwnership(address payable newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address payable newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(owner, newOwner);
        owner = newOwner;
    }
}

interface IERC165 {
    /**
     * @notice Query if a contract implements an interface
     * @dev Interface identification is specified in ERC-165. This function
     * uses less than 30,000 gas
     * @param _interfaceId The interface identifier, as specified in ERC-165
     */
    function supportsInterface(bytes4 _interfaceId)
    external
    view
    returns (bool);
}

interface IERC721 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

interface IERC721Metadata {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the token collection symbol.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

contract ERC721 is Context, IERC165, IERC721, IERC721Metadata {
    using Address for address;

    // Token name
    string public name;

    // Token symbol
    string public symbol;

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

    // Mapping owner address to token count
    mapping(address => uint256) private _balances;

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

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

    bytes4 constant private INTERFACE_SIGNATURE_ERC165 = 0x01ffc9a7;
    bytes4 constant private INTERFACE_SIGNATURE_ERC721 = 0x80ac58cd;
    bytes4 constant private INTERFACE_SIGNATURE_ERC721METADATA = 0x5b5e139f;
    bytes4 constant private INTERFACE_SIGNATURE_ERC721ENUMERABLE = 0x780e9d63;

    function supportsInterface(bytes4 _interfaceId) external view returns (bool) {
        if (
            _interfaceId == INTERFACE_SIGNATURE_ERC165 ||
            _interfaceId == INTERFACE_SIGNATURE_ERC721 ||
            _interfaceId == INTERFACE_SIGNATURE_ERC721METADATA ||
            _interfaceId == INTERFACE_SIGNATURE_ERC721ENUMERABLE
            ) {
                return true;
            }
        return false;
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view  returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view  returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
    
    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `_data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal {
        _transfer(from, to, tokenId);
        _checkOnERC721Received(from, to, tokenId, _data);
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _owners[tokenId] != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal {
        _mint(to, tokenId);
        _checkOnERC721Received(address(0), to, tokenId, _data);
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId);

        _balances[to] += 1;
        _owners[tokenId] = to;

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

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId) internal {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        // Clear approvals
        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

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

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(from, to, tokenId);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId);

        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(from, to, tokenId);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-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
     */
    bytes4 constant internal ERC721_RECEIVED_VALUE = 0xf0b9e5ba; 
    
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) private{
        if (to.isContract()) {
            bytes4 retval = IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data);
            require(retval == ERC721_RECEIVED_VALUE, "ERC721: INVALID_ON_RECEIVE_MESSAGE");
        }
            
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, ``from``'s `tokenId` will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal {}
}

contract OwnableDelegateProxy {}

contract ProxyRegistry {
	mapping(address => OwnableDelegateProxy) public proxies;
}


interface ERC721Token {
    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) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function transferFrom(address from, address to, uint256 tokenId) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(address from, address to, uint256 tokenId,  bytes calldata data) external;

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

contract ERC721Tradable is ERC721, Ownable{
    using SafeMath for uint256;
    using Strings for string;
    
    event NFTGenerated(address indexed _owner, uint256 indexed _nftId, uint256 _series);
    event NewNFTPrice(uint256 indexed _newprice);
    
    string internal baseMetadataURI;
	address proxyRegistryAddress;
	uint256 public totalNFTs;
	uint256 NFTAvaliable;
	uint256 public currentNFTid = 0;
	uint256 public NFTprice = 0.05 * 10**18;
	
	uint256 totalAirDrop;
	uint256 totalAuthorize;
	uint256 totalPerverse;
	uint256 totalFreeBuy;
	
    uint256 series = 0;
	
	mapping (address => uint256) public MarketingQuota;
	mapping (address => bool) public PartnerTokenCheck;
	mapping (address => bool) public IfWhiteList;
	mapping (address => bool) public Authorized;
	
	bytes4 constant InterfaceSignature_ERC721 = 0x80ac58cd;
	ERC721Token public CryptoPunks;
	ERC721Token public LOSTPOETS;
	ERC721Token public PakCube;
	ERC721Token public TheCurrency;
	
	bool public canMint = true;
	modifier CanMint() {
	    require(canMint);
	    _;
	}
    
	constructor(
		string memory  _name,
		string memory _symbol,
		uint256 _totalNFTs,
		uint256 _airdrop,
		uint256 _authorize,
		uint256 _perserve,
		uint256 _freebuy,
		address _proxyRegistryAddress
	) public {
		name = _name;
		symbol = _symbol;
		totalNFTs = _totalNFTs;
		totalAirDrop = _airdrop;
		totalAuthorize = _authorize;
		totalPerverse = _perserve;
		totalFreeBuy = _freebuy;
		NFTAvaliable = _totalNFTs - _airdrop - _authorize - _perserve;
		proxyRegistryAddress = _proxyRegistryAddress;
	}
	
	function mintDisable() public onlyOwner {
	    canMint = false;
	}
	
	function mintEnable() public onlyOwner {
	    canMint = true;
	}
	
	// Regular Purchase
	function buyNFT(uint256 _amount) public payable CanMint {
	    require(msg.value >= NFTprice.mul(_amount), "Insufficient ETH");
	    require(totalFreeBuy >= _amount);
	    require(currentNFTid.add(_amount) <= totalNFTs+1, "Total Amount Exceed!");
	    for(uint i=0; i< _amount; i++) {
	        _mint(msg.sender, currentNFTid);
	        currentNFTid = currentNFTid.add(1);
	        emit NFTGenerated(msg.sender, currentNFTid, series);
	    }
	    totalFreeBuy = totalFreeBuy.sub(_amount);
	}
	
	function adminGenerator(uint256 _amount, address receiver) public onlyOwner CanMint {
	    require(currentNFTid.add(_amount) <= totalNFTs+1, "Total Amount Exceed!");
	    require(NFTAvaliable >= _amount, "NFT not available");
	    require(totalPerverse >= _amount, "Perserve Amount Exceed!");
	    for(uint i=0; i< _amount; i++) {
	        _mint(receiver, currentNFTid);
	        currentNFTid = currentNFTid.add(1);
	        emit NFTGenerated(receiver, currentNFTid, series);
	    }
	    NFTAvaliable = NFTAvaliable.sub(_amount);
	    totalPerverse = totalPerverse.sub(_amount);
	}
	
	function marketGenerator(uint256 _amount, address receiver) public CanMint {
	    require(MarketingQuota[msg.sender] >= _amount, "Marketing Quota is not enough!");
	    require(currentNFTid.add(_amount) <= totalNFTs+1, "Total Amount Exceed!");
	    for(uint i=0; i< _amount; i++) {
	        _mint(receiver, currentNFTid);
	        currentNFTid = currentNFTid.add(1);
	        emit NFTGenerated(receiver, currentNFTid, series);
	    }
	    MarketingQuota[msg.sender] = MarketingQuota[msg.sender].sub(_amount);
	}
	
	function authorizedGenerator(uint256 _amount, address receiver) public CanMint {
	    require(Authorized[msg.sender]);
	    require(totalAuthorize >= _amount);
	    require(currentNFTid.add(_amount) <= totalNFTs+1, "Total Amount Exceed!");
	    for(uint i=0; i< _amount; i++) {
	        _mint(receiver, currentNFTid);
	        currentNFTid = currentNFTid.add(1);
	        emit NFTGenerated(receiver, currentNFTid, series);
	    }
	    totalAuthorize = totalAuthorize.sub(_amount);
	}
	
	function authorizeAddress(address _vp) public onlyOwner {
	    Authorized[_vp] = true;
	}
	
	function cancelAuthorized(address _vp) public onlyOwner {
	    Authorized[_vp] = false;
	}
	
	function setSeries(uint256 _series) public onlyOwner {
	    series = _series;
	}
	
	function setMarketQuota(address _spender, uint256 _amount) public onlyOwner {
	    require(_amount >0);
	    require(NFTAvaliable >= _amount);
	    MarketingQuota[_spender] = MarketingQuota[_spender] + _amount;
	    NFTAvaliable = NFTAvaliable.sub(_amount);
	}
	
	function airdrop() public CanMint {
	    require(_canAirdrop(msg.sender) || _ifWhiteListed(msg.sender), "Unqualified!");
	    require(currentNFTid <= totalNFTs, "Total Amount Exceed!");
	    require(totalAirDrop > 0);
	    _mint(msg.sender, currentNFTid);
	    currentNFTid = currentNFTid.add(1);
	    emit NFTGenerated(msg.sender, currentNFTid, series);
	    if(IfWhiteList[msg.sender]) {
	        IfWhiteList[msg.sender] = false;
	    } else {
	        PartnerTokenCheck[msg.sender] = true;
	    }
	    totalAirDrop = totalAirDrop.sub(1);
	}
	
	function setWhitelist(address[] memory _users) public onlyOwner {
	    uint userLength = _users.length;
	    for (uint i = 0; i < userLength; i++) {
	        IfWhiteList[_users[i]] = true;
	    }
	}
	
	function initialPartnerNFT(address _cryptoPunksAddress, address _lostpoetsAddress, address _pakCube, address _theCurrencyAddress) public onlyOwner {
	    ERC721Token cryptoPunks = ERC721Token(_cryptoPunksAddress);
        CryptoPunks = cryptoPunks;
        
        ERC721Token lostpoets = ERC721Token(_lostpoetsAddress);
        LOSTPOETS = lostpoets;
        
        ERC721Token pakCube = ERC721Token(_pakCube);
        PakCube = pakCube;
        
        ERC721Token theCurrencyAddress = ERC721Token(_theCurrencyAddress);
        TheCurrency = theCurrencyAddress;
	}

	function _canAirdrop(address _user) private view returns(bool) {
	    if (PartnerTokenCheck[_user]){
	        return false;
	    }
	    if(CryptoPunks.balanceOf(_user) > 0) {
	        return true;
	    } else if (LOSTPOETS.balanceOf(_user) > 0) {
	        return true;
	    } else if (PakCube.balanceOf(_user) > 0) {
	        return true;
	    } else if (TheCurrency.balanceOf(_user) > 0) {
	        return true;
	    } else{
	        return false;
	    }
	}
	
	function _ifWhiteListed(address _user) private view returns(bool) {
	    return IfWhiteList[_user];
	}
	
	function setNFTPrice(uint256 _newPrice) public onlyOwner {
	    require(_newPrice > 0);
	    NFTprice = _newPrice;
	    emit NewNFTPrice(_newPrice);
	}
	
	function setProxyAddress(address _proxyAddress) public onlyOwner {
	    proxyRegistryAddress = _proxyAddress;
	}

    function tokenURI(uint256 _tokenId) public view returns (string memory) {
        require(_exists(_tokenId), "ERC721Tradable#uri: NONEXISTENT_TOKEN");
        return Strings.strConcat(baseMetadataURI, Strings.uint2str(_tokenId));
    }
    
    function _setBaseMetadataURI(string memory _newBaseMetadataURI) internal {
        baseMetadataURI = _newBaseMetadataURI;
    }

	function setBaseMetadataURI(string memory _newBaseMetadataURI) public onlyOwner {
		_setBaseMetadataURI(_newBaseMetadataURI);
	}

	function isApprovedForAll(address _owner, address _operator) public view returns (bool isOperator) {
		ProxyRegistry proxyRegistry = ProxyRegistry(proxyRegistryAddress);
		if (address(proxyRegistry.proxies(_owner)) == _operator) {
			return true;
		}

		return ERC721.isApprovedForAll(_owner, _operator);
	}
}

contract CosmoChamber is ERC721Tradable {
	constructor(address _proxyRegistryAddress) public ERC721Tradable("CosmoChamber", "CC", 6001, 800, 500, 500, 4201, _proxyRegistryAddress) {
		_setBaseMetadataURI("https://api.cosmochamber.art/metadata/");
	}

	function contractURI() public pure returns (string memory) {
		return "https://www.cosmoschanmber.art/about-us";
	}
	
	function withdrawBalance() external onlyOwner {
        owner.transfer(address(this).balance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_proxyRegistryAddress","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"_nftId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_series","type":"uint256"}],"name":"NFTGenerated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_newprice","type":"uint256"}],"name":"NewNFTPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"Authorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"CryptoPunks","outputs":[{"internalType":"contract ERC721Token","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"IfWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"LOSTPOETS","outputs":[{"internalType":"contract ERC721Token","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"MarketingQuota","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"NFTprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PakCube","outputs":[{"internalType":"contract ERC721Token","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"PartnerTokenCheck","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"TheCurrency","outputs":[{"internalType":"contract ERC721Token","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"adminGenerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"airdrop","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_vp","type":"address"}],"name":"authorizeAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"authorizedGenerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"buyNFT","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"canMint","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_vp","type":"address"}],"name":"cancelAuthorized","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"currentNFTid","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_cryptoPunksAddress","type":"address"},{"internalType":"address","name":"_lostpoetsAddress","type":"address"},{"internalType":"address","name":"_pakCube","type":"address"},{"internalType":"address","name":"_theCurrencyAddress","type":"address"}],"name":"initialPartnerNFT","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"isOperator","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"receiver","type":"address"}],"name":"marketGenerator","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"mintDisable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"mintEnable","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"string","name":"_newBaseMetadataURI","type":"string"}],"name":"setBaseMetadataURI","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_spender","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMarketQuota","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setNFTPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_proxyAddress","type":"address"}],"name":"setProxyAddress","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_series","type":"uint256"}],"name":"setSeries","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"setWhitelist","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"bytes4","name":"_interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalNFTs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawBalance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526000600b81905566b1a2bc2ec50000600c556011556019805460ff60a01b1916740100000000000000000000000000000000000000001790553480156200004a57600080fd5b50604051620034b6380380620034b6833981810160405260208110156200007057600080fd5b5051604080518082018252600c81527f436f736d6f4368616d626572000000000000000000000000000000000000000060208281019190915282518084018452600281527f434300000000000000000000000000000000000000000000000000000000000091810191909152600680546001600160a01b0319163390811790915592519192909161177191610320916101f49182916110699189916000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a38751620001489060009060208b0190620001f4565b5086516200015e9060019060208a0190620001f4565b506009869055600d859055600e849055600f839055601091909155929093030391909103600a55600880546001600160a01b0319166001600160a01b03909216919091179055505060408051606081019091526026808252620001d491906200349060208301396001600160e01b03620001db16565b5062000299565b8051620001f0906007906020840190620001f4565b5050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200023757805160ff191683800117855562000267565b8280016001018555821562000267579182015b82811115620002675782518255916020019190600101906200024a565b506200027592915062000279565b5090565b6200029691905b8082111562000275576000815560010162000280565b90565b6131e780620002a96000396000f3fe6080604052600436106102885760003560e01c80635fdbefb71161015a578063b88d4fde116100c1578063dc84e3a41161007a578063dc84e3a414610acd578063e65f349a14610b00578063e8a3d48514610b15578063e985e9c514610b2a578063f2fde38b14610b65578063f421764814610b9857610288565b8063b88d4fde1461095e578063beb9716d14610a31578063c1e1ce2914610a46578063c87b56dd14610a5b578063db4dfc0e14610a85578063dc4af4a014610ab857610288565b806382b95cab1161011357806382b95cab146108785780638da5cb5b146108b15780638f32d59b146108c657806395d89b41146108db578063a22cb465146108f0578063ade706c61461092b57610288565b80635fdbefb7146107145780636352211e1461072957806370a0823114610753578063715018a6146107865780637e518ec81461079b57806381530b681461084e57610288565b80633d151d5a116101fe57806351ed8288116101b757806351ed8288146106135780635218ff5c1461063057806352ef6faa1461065a57806354e556f41461069357806355c5fc7d146106c65780635fd8c710146106ff57610288565b80633d151d5a146104d757806341e687f11461050a57806342842e0e146105555780634518714e1461059857806346a7dadc146105ad5780634a5db3b5146105e057610288565b806308c2f9541161025057806308c2f954146103e1578063095ea7b3146103f65780630d0e96da1461043157806323b872dd14610446578063353da41f146104895780633884d635146104c257610288565b806301ffc9a71461028d578063047aa345146102d557806306fdde03146103065780630776c7bd14610390578063081812fc146103b7575b600080fd5b34801561029957600080fd5b506102c1600480360360208110156102b057600080fd5b50356001600160e01b031916610c48565b604080519115158252519081900360200190f35b3480156102e157600080fd5b506102ea610cc5565b604080516001600160a01b039092168252519081900360200190f35b34801561031257600080fd5b5061031b610cd4565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561035557818101518382015260200161033d565b50505050905090810190601f1680156103825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039c57600080fd5b506103a5610d62565b60408051918252519081900360200190f35b3480156103c357600080fd5b506102ea600480360360208110156103da57600080fd5b5035610d68565b3480156103ed57600080fd5b506102ea610dca565b34801561040257600080fd5b5061042f6004803603604081101561041957600080fd5b506001600160a01b038135169060200135610dd9565b005b34801561043d57600080fd5b506103a5610eb4565b34801561045257600080fd5b5061042f6004803603606081101561046957600080fd5b506001600160a01b03813581169160208101359091169060400135610eba565b34801561049557600080fd5b5061042f600480360360408110156104ac57600080fd5b50803590602001356001600160a01b0316610f11565b3480156104ce57600080fd5b5061042f61108c565b3480156104e357600080fd5b5061042f600480360360208110156104fa57600080fd5b50356001600160a01b031661120c565b34801561051657600080fd5b5061042f6004803603608081101561052d57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516611274565b34801561056157600080fd5b5061042f6004803603606081101561057857600080fd5b506001600160a01b0381358116916020810135909116906040013561130b565b3480156105a457600080fd5b506103a5611326565b3480156105b957600080fd5b5061042f600480360360208110156105d057600080fd5b50356001600160a01b031661132c565b3480156105ec57600080fd5b5061042f6004803603602081101561060357600080fd5b50356001600160a01b0316611395565b61042f6004803603602081101561062957600080fd5b5035611400565b34801561063c57600080fd5b5061042f6004803603602081101561065357600080fd5b503561155c565b34801561066657600080fd5b5061042f6004803603604081101561067d57600080fd5b506001600160a01b0381351690602001356115a8565b34801561069f57600080fd5b506103a5600480360360208110156106b657600080fd5b50356001600160a01b0316611643565b3480156106d257600080fd5b5061042f600480360360408110156106e957600080fd5b50803590602001356001600160a01b0316611655565b34801561070b57600080fd5b5061042f61177d565b34801561072057600080fd5b506102ea611801565b34801561073557600080fd5b506102ea6004803603602081101561074c57600080fd5b5035611810565b34801561075f57600080fd5b506103a56004803603602081101561077657600080fd5b50356001600160a01b031661186a565b34801561079257600080fd5b5061042f6118cd565b3480156107a757600080fd5b5061042f600480360360208110156107be57600080fd5b8101906020810181356401000000008111156107d957600080fd5b8201836020820111156107eb57600080fd5b8035906020019184600183028401116401000000008311171561080d57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061195e945050505050565b34801561085a57600080fd5b5061042f6004803603602081101561087157600080fd5b50356119ae565b34801561088457600080fd5b5061042f6004803603604081101561089b57600080fd5b50803590602001356001600160a01b0316611a35565b3480156108bd57600080fd5b506102ea611c31565b3480156108d257600080fd5b506102c1611c40565b3480156108e757600080fd5b5061031b611c67565b3480156108fc57600080fd5b5061042f6004803603604081101561091357600080fd5b506001600160a01b0381351690602001351515611cc1565b34801561093757600080fd5b506102c16004803603602081101561094e57600080fd5b50356001600160a01b0316611dc6565b34801561096a57600080fd5b5061042f6004803603608081101561098157600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156109bc57600080fd5b8201836020820111156109ce57600080fd5b803590602001918460018302840111640100000000831117156109f057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ddb945050505050565b348015610a3d57600080fd5b506102c1611e39565b348015610a5257600080fd5b5061042f611e49565b348015610a6757600080fd5b5061031b60048036036020811015610a7e57600080fd5b5035611ea5565b348015610a9157600080fd5b506102c160048036036020811015610aa857600080fd5b50356001600160a01b0316611f8b565b348015610ac457600080fd5b5061042f611fa0565b348015610ad957600080fd5b506102c160048036036020811015610af057600080fd5b50356001600160a01b0316611ff6565b348015610b0c57600080fd5b506102ea61200b565b348015610b2157600080fd5b5061031b61201a565b348015610b3657600080fd5b506102c160048036036040811015610b4d57600080fd5b506001600160a01b038135811691602001351661203a565b348015610b7157600080fd5b5061042f60048036036020811015610b8857600080fd5b50356001600160a01b03166120e5565b348015610ba457600080fd5b5061042f60048036036020811015610bbb57600080fd5b810190602081018135640100000000811115610bd657600080fd5b820183602082011115610be857600080fd5b80359060200191846020830284011164010000000083111715610c0a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612135945050505050565b60006001600160e01b031982166301ffc9a760e01b1480610c7957506001600160e01b031982166380ac58cd60e01b145b80610c9457506001600160e01b03198216635b5e139f60e01b145b80610caf57506001600160e01b0319821663780e9d6360e01b145b15610cbc57506001610cc0565b5060005b919050565b6017546001600160a01b031681565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d5a5780601f10610d2f57610100808354040283529160200191610d5a565b820191906000526020600020905b815481529060010190602001808311610d3d57829003601f168201915b505050505081565b600c5481565b6000610d73826121d5565b610dae5760405162461bcd60e51b815260040180806020018281038252602c8152602001806130a7602c913960400191505060405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6019546001600160a01b031681565b6000610de482611810565b9050806001600160a01b0316836001600160a01b03161415610e375760405162461bcd60e51b81526004018080602001828103825260218152602001806131416021913960400191505060405180910390fd5b806001600160a01b0316610e496121f2565b6001600160a01b03161480610e6a5750610e6a81610e656121f2565b61203a565b610ea55760405162461bcd60e51b815260040180806020018281038252603881526020018061301c6038913960400191505060405180910390fd5b610eaf83836121f6565b505050565b60095481565b610ecb610ec56121f2565b82612264565b610f065760405162461bcd60e51b81526004018080602001828103825260318152602001806131626031913960400191505060405180910390fd5b610eaf838383612300565b601954600160a01b900460ff16610f2757600080fd5b33600090815260126020526040902054821115610f8b576040805162461bcd60e51b815260206004820152601e60248201527f4d61726b6574696e672051756f7461206973206e6f7420656e6f756768210000604482015290519081900360640190fd5b600954600101610fa683600b5461243090919063ffffffff16565b1115610ff0576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b60005b828110156110575761100782600b5461248a565b600b5461101b90600163ffffffff61243016565b600b81905560115460408051918252516001600160a01b03851691600080516020613193833981519152919081900360200190a3600101610ff3565b5033600090815260126020526040902054611078908363ffffffff6125b716565b336000908152601260205260409020555050565b601954600160a01b900460ff166110a257600080fd5b6110ab33612614565b806110ba57506110ba33612871565b6110fa576040805162461bcd60e51b815260206004820152600c60248201526b556e7175616c69666965642160a01b604482015290519081900360640190fd5b600954600b54111561114a576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b6000600d541161115957600080fd5b61116533600b5461248a565b600b5461117990600163ffffffff61243016565b600b81905560115460408051918252513391600080516020613193833981519152919081900360200190a33360009081526014602052604090205460ff16156111d857336000908152601460205260409020805460ff191690556111f3565b336000908152601360205260409020805460ff191660011790555b600d5461120790600163ffffffff6125b716565b600d55565b611214611c40565b611253576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601560205260409020805460ff19169055565b61127c611c40565b6112bb576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b601680546001600160a01b039586166001600160a01b0319918216179091556017805494861694821694909417909355601880549285169284169290921790915560198054919093169116179055565b610eaf83838360405180602001604052806000815250611ddb565b600b5481565b611334611c40565b611373576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61139d611c40565b6113dc576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b601954600160a01b900460ff1661141657600080fd5b600c54611429908263ffffffff61288f16565b341015611470576040805162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b604482015290519081900360640190fd5b80601054101561147f57600080fd5b60095460010161149a82600b5461243090919063ffffffff16565b11156114e4576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b60005b81811015611542576114fb33600b5461248a565b600b5461150f90600163ffffffff61243016565b600b81905560115460408051918252513391600080516020613193833981519152919081900360200190a36001016114e7565b50601054611556908263ffffffff6125b716565b60105550565b611564611c40565b6115a3576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b601155565b6115b0611c40565b6115ef576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b600081116115fc57600080fd5b80600a54101561160b57600080fd5b6001600160a01b0382166000908152601260205260409020805482019055600a5461163c908263ffffffff6125b716565b600a555050565b60126020526000908152604090205481565b601954600160a01b900460ff1661166b57600080fd5b3360009081526015602052604090205460ff1661168757600080fd5b81600e54101561169657600080fd5b6009546001016116b183600b5461243090919063ffffffff16565b11156116fb576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b60005b828110156117625761171282600b5461248a565b600b5461172690600163ffffffff61243016565b600b81905560115460408051918252516001600160a01b03851691600080516020613193833981519152919081900360200190a36001016116fe565b50600e54611776908363ffffffff6125b716565b600e555050565b611785611c40565b6117c4576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6006546040516001600160a01b0390911690303180156108fc02916000818181858888f193505050501580156117fe573d6000803e3d6000fd5b50565b6016546001600160a01b031681565b6000818152600260205260408120546001600160a01b0316806118645760405162461bcd60e51b815260040180806020018281038252602981526020018061307e6029913960400191505060405180910390fd5b92915050565b60006001600160a01b0382166118b15760405162461bcd60e51b815260040180806020018281038252602a815260200180613054602a913960400191505060405180910390fd5b506001600160a01b031660009081526003602052604090205490565b6118d5611c40565b611914576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b611966611c40565b6119a5576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6117fe816128f7565b6119b6611c40565b6119f5576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b60008111611a0257600080fd5b600c81905560405181907f390fa6f5641344c18975681f7e2891cd82e560e1c7da76da38277104231ebf6e90600090a250565b611a3d611c40565b611a7c576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b601954600160a01b900460ff16611a9257600080fd5b600954600101611aad83600b5461243090919063ffffffff16565b1115611af7576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b81600a541015611b42576040805162461bcd60e51b81526020600482015260116024820152704e4654206e6f7420617661696c61626c6560781b604482015290519081900360640190fd5b81600f541015611b99576040805162461bcd60e51b815260206004820152601760248201527f506572736572766520416d6f756e742045786365656421000000000000000000604482015290519081900360640190fd5b60005b82811015611c0057611bb082600b5461248a565b600b54611bc490600163ffffffff61243016565b600b81905560115460408051918252516001600160a01b03851691600080516020613193833981519152919081900360200190a3600101611b9c565b50600a54611c14908363ffffffff6125b716565b600a55600f54611c2a908363ffffffff6125b716565b600f555050565b6006546001600160a01b031681565b6006546000906001600160a01b0316611c576121f2565b6001600160a01b03161490505b90565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d5a5780601f10610d2f57610100808354040283529160200191610d5a565b611cc96121f2565b6001600160a01b0316826001600160a01b03161415611d2f576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060056000611d3c6121f2565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611d806121f2565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b60136020526000908152604090205460ff1681565b611dec611de66121f2565b83612264565b611e275760405162461bcd60e51b81526004018080602001828103825260318152602001806131626031913960400191505060405180910390fd5b611e338484848461290e565b50505050565b601954600160a01b900460ff1681565b611e51611c40565b611e90576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6019805460ff60a01b1916600160a01b179055565b6060611eb0826121d5565b611eeb5760405162461bcd60e51b81526004018080602001828103825260258152602001806130d36025913960400191505060405180910390fd5b60078054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526118649390929091830182828015611f785780601f10611f4d57610100808354040283529160200191611f78565b820191906000526020600020905b815481529060010190602001808311611f5b57829003601f168201915b5050505050611f8684612925565b6129e6565b60146020526000908152604090205460ff1681565b611fa8611c40565b611fe7576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6019805460ff60a01b19169055565b60156020526000908152604090205460ff1681565b6018546001600160a01b031681565b6060604051806060016040528060278152602001612fc960279139905090565b6008546040805163c455279160e01b81526001600160a01b0385811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561208e57600080fd5b505afa1580156120a2573d6000803e3d6000fd5b505050506040513d60208110156120b857600080fd5b50516001600160a01b031614156120d3576001915050611864565b6120dd8484612a22565b949350505050565b6120ed611c40565b61212c576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6117fe81612a50565b61213d611c40565b61217c576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b805160005b81811015610eaf5760016014600085848151811061219b57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101612181565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061222b82611810565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061226f826121d5565b6122aa5760405162461bcd60e51b815260040180806020018281038252602c815260200180612ff0602c913960400191505060405180910390fd5b60006122b583611810565b9050806001600160a01b0316846001600160a01b031614806122f05750836001600160a01b03166122e584610d68565b6001600160a01b0316145b806120dd57506120dd818561203a565b826001600160a01b031661231382611810565b6001600160a01b0316146123585760405162461bcd60e51b81526004018080602001828103825260298152602001806131186029913960400191505060405180910390fd5b6001600160a01b03821661239d5760405162461bcd60e51b8152600401808060200182810382526024815260200180612fa56024913960400191505060405180910390fd5b6123a8838383610eaf565b6123b36000826121f6565b6001600160a01b038084166000818152600360209081526040808320805460001901905593861680835284832080546001019055858352600290915283822080546001600160a01b031916821790559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600082820183811015612483576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166124e5576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6124ee816121d5565b15612540576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b61254c60008383610eaf565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008282111561260e576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6001600160a01b03811660009081526013602052604081205460ff161561263d57506000610cc0565b601654604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561268e57600080fd5b505afa1580156126a2573d6000803e3d6000fd5b505050506040513d60208110156126b857600080fd5b505111156126c857506001610cc0565b601754604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561271957600080fd5b505afa15801561272d573d6000803e3d6000fd5b505050506040513d602081101561274357600080fd5b5051111561275357506001610cc0565b601854604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b1580156127a457600080fd5b505afa1580156127b8573d6000803e3d6000fd5b505050506040513d60208110156127ce57600080fd5b505111156127de57506001610cc0565b601954604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561282f57600080fd5b505afa158015612843573d6000803e3d6000fd5b505050506040513d602081101561285957600080fd5b5051111561286957506001610cc0565b506000610cc0565b6001600160a01b031660009081526014602052604090205460ff1690565b60008261289e57506000611864565b828202828482816128ab57fe5b0414612483576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236d756c3a204f564552464c4f5760501b604482015290519081900360640190fd5b805161290a906007906020840190612ec4565b5050565b612919848484612300565b611e3384848484612af1565b60608161294a57506040805180820190915260018152600360fc1b6020820152610cc0565b8160005b811561296257600101600a8204915061294e565b6060816040519080825280601f01601f19166020018201604052801561298f576020820181803883390190505b50905060001982015b85156129dd57600a860660300160f81b828280600190039350815181106129bb57fe5b60200101906001600160f81b031916908160001a905350600a86049550612998565b50949350505050565b60606124838383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250612c79565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001600160a01b038116612a955760405162461bcd60e51b8152600401808060200182810382526026815260200180612f5d6026913960400191505060405180910390fd5b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b612b03836001600160a01b0316612e8d565b15611e33576000836001600160a01b031663150b7a02612b216121f2565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612ba6578181015183820152602001612b8e565b50505050905090810190601f168015612bd35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612bf557600080fd5b505af1158015612c09573d6000803e3d6000fd5b505050506040513d6020811015612c1f57600080fd5b505190506001600160e01b0319811663785cf2dd60e11b14612c725760405162461bcd60e51b8152600401808060200182810382526022815260200180612f836022913960400191505060405180910390fd5b5050505050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015612ccd576020820181803883390190505b509050806000805b8851811015612d2657888181518110612cea57fe5b602001015160f81c60f81b838380600101945081518110612d0757fe5b60200101906001600160f81b031916908160001a905350600101612cd5565b5060005b8751811015612d7b57878181518110612d3f57fe5b602001015160f81c60f81b838380600101945081518110612d5c57fe5b60200101906001600160f81b031916908160001a905350600101612d2a565b5060005b8651811015612dd057868181518110612d9457fe5b602001015160f81c60f81b838380600101945081518110612db157fe5b60200101906001600160f81b031916908160001a905350600101612d7f565b5060005b8551811015612e2557858181518110612de957fe5b602001015160f81c60f81b838380600101945081518110612e0657fe5b60200101906001600160f81b031916908160001a905350600101612dd4565b5060005b8451811015612e7a57848181518110612e3e57fe5b602001015160f81c60f81b838380600101945081518110612e5b57fe5b60200101906001600160f81b031916908160001a905350600101612e29565b50909d9c50505050505050505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906120dd5750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f0557805160ff1916838001178555612f32565b82800160010185558215612f32579182015b82811115612f32578251825591602001919060010190612f17565b50612f3e929150612f42565b5090565b611c6491905b80821115612f3e5760008155600101612f4856fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a20494e56414c49445f4f4e5f524543454956455f4d4553534147454552433732313a207472616e7366657220746f20746865207a65726f206164647265737368747470733a2f2f7777772e636f736d6f736368616e6d6265722e6172742f61626f75742d75734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564ffa55b278bf03679f0e30ab08cf1b28540e6f72664096eb483cc4deddcd096b8a265627a7a72315820d5abfefc82eb7d08b081d785ecd7a2d6a3a8dab00f91f8f192606daf2172d14964736f6c634300050c003268747470733a2f2f6170692e636f736d6f6368616d6265722e6172742f6d657461646174612f000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

Deployed Bytecode

0x6080604052600436106102885760003560e01c80635fdbefb71161015a578063b88d4fde116100c1578063dc84e3a41161007a578063dc84e3a414610acd578063e65f349a14610b00578063e8a3d48514610b15578063e985e9c514610b2a578063f2fde38b14610b65578063f421764814610b9857610288565b8063b88d4fde1461095e578063beb9716d14610a31578063c1e1ce2914610a46578063c87b56dd14610a5b578063db4dfc0e14610a85578063dc4af4a014610ab857610288565b806382b95cab1161011357806382b95cab146108785780638da5cb5b146108b15780638f32d59b146108c657806395d89b41146108db578063a22cb465146108f0578063ade706c61461092b57610288565b80635fdbefb7146107145780636352211e1461072957806370a0823114610753578063715018a6146107865780637e518ec81461079b57806381530b681461084e57610288565b80633d151d5a116101fe57806351ed8288116101b757806351ed8288146106135780635218ff5c1461063057806352ef6faa1461065a57806354e556f41461069357806355c5fc7d146106c65780635fd8c710146106ff57610288565b80633d151d5a146104d757806341e687f11461050a57806342842e0e146105555780634518714e1461059857806346a7dadc146105ad5780634a5db3b5146105e057610288565b806308c2f9541161025057806308c2f954146103e1578063095ea7b3146103f65780630d0e96da1461043157806323b872dd14610446578063353da41f146104895780633884d635146104c257610288565b806301ffc9a71461028d578063047aa345146102d557806306fdde03146103065780630776c7bd14610390578063081812fc146103b7575b600080fd5b34801561029957600080fd5b506102c1600480360360208110156102b057600080fd5b50356001600160e01b031916610c48565b604080519115158252519081900360200190f35b3480156102e157600080fd5b506102ea610cc5565b604080516001600160a01b039092168252519081900360200190f35b34801561031257600080fd5b5061031b610cd4565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561035557818101518382015260200161033d565b50505050905090810190601f1680156103825780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561039c57600080fd5b506103a5610d62565b60408051918252519081900360200190f35b3480156103c357600080fd5b506102ea600480360360208110156103da57600080fd5b5035610d68565b3480156103ed57600080fd5b506102ea610dca565b34801561040257600080fd5b5061042f6004803603604081101561041957600080fd5b506001600160a01b038135169060200135610dd9565b005b34801561043d57600080fd5b506103a5610eb4565b34801561045257600080fd5b5061042f6004803603606081101561046957600080fd5b506001600160a01b03813581169160208101359091169060400135610eba565b34801561049557600080fd5b5061042f600480360360408110156104ac57600080fd5b50803590602001356001600160a01b0316610f11565b3480156104ce57600080fd5b5061042f61108c565b3480156104e357600080fd5b5061042f600480360360208110156104fa57600080fd5b50356001600160a01b031661120c565b34801561051657600080fd5b5061042f6004803603608081101561052d57600080fd5b506001600160a01b038135811691602081013582169160408201358116916060013516611274565b34801561056157600080fd5b5061042f6004803603606081101561057857600080fd5b506001600160a01b0381358116916020810135909116906040013561130b565b3480156105a457600080fd5b506103a5611326565b3480156105b957600080fd5b5061042f600480360360208110156105d057600080fd5b50356001600160a01b031661132c565b3480156105ec57600080fd5b5061042f6004803603602081101561060357600080fd5b50356001600160a01b0316611395565b61042f6004803603602081101561062957600080fd5b5035611400565b34801561063c57600080fd5b5061042f6004803603602081101561065357600080fd5b503561155c565b34801561066657600080fd5b5061042f6004803603604081101561067d57600080fd5b506001600160a01b0381351690602001356115a8565b34801561069f57600080fd5b506103a5600480360360208110156106b657600080fd5b50356001600160a01b0316611643565b3480156106d257600080fd5b5061042f600480360360408110156106e957600080fd5b50803590602001356001600160a01b0316611655565b34801561070b57600080fd5b5061042f61177d565b34801561072057600080fd5b506102ea611801565b34801561073557600080fd5b506102ea6004803603602081101561074c57600080fd5b5035611810565b34801561075f57600080fd5b506103a56004803603602081101561077657600080fd5b50356001600160a01b031661186a565b34801561079257600080fd5b5061042f6118cd565b3480156107a757600080fd5b5061042f600480360360208110156107be57600080fd5b8101906020810181356401000000008111156107d957600080fd5b8201836020820111156107eb57600080fd5b8035906020019184600183028401116401000000008311171561080d57600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061195e945050505050565b34801561085a57600080fd5b5061042f6004803603602081101561087157600080fd5b50356119ae565b34801561088457600080fd5b5061042f6004803603604081101561089b57600080fd5b50803590602001356001600160a01b0316611a35565b3480156108bd57600080fd5b506102ea611c31565b3480156108d257600080fd5b506102c1611c40565b3480156108e757600080fd5b5061031b611c67565b3480156108fc57600080fd5b5061042f6004803603604081101561091357600080fd5b506001600160a01b0381351690602001351515611cc1565b34801561093757600080fd5b506102c16004803603602081101561094e57600080fd5b50356001600160a01b0316611dc6565b34801561096a57600080fd5b5061042f6004803603608081101561098157600080fd5b6001600160a01b038235811692602081013590911691604082013591908101906080810160608201356401000000008111156109bc57600080fd5b8201836020820111156109ce57600080fd5b803590602001918460018302840111640100000000831117156109f057600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611ddb945050505050565b348015610a3d57600080fd5b506102c1611e39565b348015610a5257600080fd5b5061042f611e49565b348015610a6757600080fd5b5061031b60048036036020811015610a7e57600080fd5b5035611ea5565b348015610a9157600080fd5b506102c160048036036020811015610aa857600080fd5b50356001600160a01b0316611f8b565b348015610ac457600080fd5b5061042f611fa0565b348015610ad957600080fd5b506102c160048036036020811015610af057600080fd5b50356001600160a01b0316611ff6565b348015610b0c57600080fd5b506102ea61200b565b348015610b2157600080fd5b5061031b61201a565b348015610b3657600080fd5b506102c160048036036040811015610b4d57600080fd5b506001600160a01b038135811691602001351661203a565b348015610b7157600080fd5b5061042f60048036036020811015610b8857600080fd5b50356001600160a01b03166120e5565b348015610ba457600080fd5b5061042f60048036036020811015610bbb57600080fd5b810190602081018135640100000000811115610bd657600080fd5b820183602082011115610be857600080fd5b80359060200191846020830284011164010000000083111715610c0a57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612135945050505050565b60006001600160e01b031982166301ffc9a760e01b1480610c7957506001600160e01b031982166380ac58cd60e01b145b80610c9457506001600160e01b03198216635b5e139f60e01b145b80610caf57506001600160e01b0319821663780e9d6360e01b145b15610cbc57506001610cc0565b5060005b919050565b6017546001600160a01b031681565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d5a5780601f10610d2f57610100808354040283529160200191610d5a565b820191906000526020600020905b815481529060010190602001808311610d3d57829003601f168201915b505050505081565b600c5481565b6000610d73826121d5565b610dae5760405162461bcd60e51b815260040180806020018281038252602c8152602001806130a7602c913960400191505060405180910390fd5b506000908152600460205260409020546001600160a01b031690565b6019546001600160a01b031681565b6000610de482611810565b9050806001600160a01b0316836001600160a01b03161415610e375760405162461bcd60e51b81526004018080602001828103825260218152602001806131416021913960400191505060405180910390fd5b806001600160a01b0316610e496121f2565b6001600160a01b03161480610e6a5750610e6a81610e656121f2565b61203a565b610ea55760405162461bcd60e51b815260040180806020018281038252603881526020018061301c6038913960400191505060405180910390fd5b610eaf83836121f6565b505050565b60095481565b610ecb610ec56121f2565b82612264565b610f065760405162461bcd60e51b81526004018080602001828103825260318152602001806131626031913960400191505060405180910390fd5b610eaf838383612300565b601954600160a01b900460ff16610f2757600080fd5b33600090815260126020526040902054821115610f8b576040805162461bcd60e51b815260206004820152601e60248201527f4d61726b6574696e672051756f7461206973206e6f7420656e6f756768210000604482015290519081900360640190fd5b600954600101610fa683600b5461243090919063ffffffff16565b1115610ff0576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b60005b828110156110575761100782600b5461248a565b600b5461101b90600163ffffffff61243016565b600b81905560115460408051918252516001600160a01b03851691600080516020613193833981519152919081900360200190a3600101610ff3565b5033600090815260126020526040902054611078908363ffffffff6125b716565b336000908152601260205260409020555050565b601954600160a01b900460ff166110a257600080fd5b6110ab33612614565b806110ba57506110ba33612871565b6110fa576040805162461bcd60e51b815260206004820152600c60248201526b556e7175616c69666965642160a01b604482015290519081900360640190fd5b600954600b54111561114a576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b6000600d541161115957600080fd5b61116533600b5461248a565b600b5461117990600163ffffffff61243016565b600b81905560115460408051918252513391600080516020613193833981519152919081900360200190a33360009081526014602052604090205460ff16156111d857336000908152601460205260409020805460ff191690556111f3565b336000908152601360205260409020805460ff191660011790555b600d5461120790600163ffffffff6125b716565b600d55565b611214611c40565b611253576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601560205260409020805460ff19169055565b61127c611c40565b6112bb576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b601680546001600160a01b039586166001600160a01b0319918216179091556017805494861694821694909417909355601880549285169284169290921790915560198054919093169116179055565b610eaf83838360405180602001604052806000815250611ddb565b600b5481565b611334611c40565b611373576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61139d611c40565b6113dc576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152601560205260409020805460ff19166001179055565b601954600160a01b900460ff1661141657600080fd5b600c54611429908263ffffffff61288f16565b341015611470576040805162461bcd60e51b815260206004820152601060248201526f092dce6eaccccd2c6d2cadce8408aa8960831b604482015290519081900360640190fd5b80601054101561147f57600080fd5b60095460010161149a82600b5461243090919063ffffffff16565b11156114e4576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b60005b81811015611542576114fb33600b5461248a565b600b5461150f90600163ffffffff61243016565b600b81905560115460408051918252513391600080516020613193833981519152919081900360200190a36001016114e7565b50601054611556908263ffffffff6125b716565b60105550565b611564611c40565b6115a3576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b601155565b6115b0611c40565b6115ef576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b600081116115fc57600080fd5b80600a54101561160b57600080fd5b6001600160a01b0382166000908152601260205260409020805482019055600a5461163c908263ffffffff6125b716565b600a555050565b60126020526000908152604090205481565b601954600160a01b900460ff1661166b57600080fd5b3360009081526015602052604090205460ff1661168757600080fd5b81600e54101561169657600080fd5b6009546001016116b183600b5461243090919063ffffffff16565b11156116fb576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b60005b828110156117625761171282600b5461248a565b600b5461172690600163ffffffff61243016565b600b81905560115460408051918252516001600160a01b03851691600080516020613193833981519152919081900360200190a36001016116fe565b50600e54611776908363ffffffff6125b716565b600e555050565b611785611c40565b6117c4576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6006546040516001600160a01b0390911690303180156108fc02916000818181858888f193505050501580156117fe573d6000803e3d6000fd5b50565b6016546001600160a01b031681565b6000818152600260205260408120546001600160a01b0316806118645760405162461bcd60e51b815260040180806020018281038252602981526020018061307e6029913960400191505060405180910390fd5b92915050565b60006001600160a01b0382166118b15760405162461bcd60e51b815260040180806020018281038252602a815260200180613054602a913960400191505060405180910390fd5b506001600160a01b031660009081526003602052604090205490565b6118d5611c40565b611914576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b611966611c40565b6119a5576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6117fe816128f7565b6119b6611c40565b6119f5576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b60008111611a0257600080fd5b600c81905560405181907f390fa6f5641344c18975681f7e2891cd82e560e1c7da76da38277104231ebf6e90600090a250565b611a3d611c40565b611a7c576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b601954600160a01b900460ff16611a9257600080fd5b600954600101611aad83600b5461243090919063ffffffff16565b1115611af7576040805162461bcd60e51b8152602060048201526014602482015273546f74616c20416d6f756e74204578636565642160601b604482015290519081900360640190fd5b81600a541015611b42576040805162461bcd60e51b81526020600482015260116024820152704e4654206e6f7420617661696c61626c6560781b604482015290519081900360640190fd5b81600f541015611b99576040805162461bcd60e51b815260206004820152601760248201527f506572736572766520416d6f756e742045786365656421000000000000000000604482015290519081900360640190fd5b60005b82811015611c0057611bb082600b5461248a565b600b54611bc490600163ffffffff61243016565b600b81905560115460408051918252516001600160a01b03851691600080516020613193833981519152919081900360200190a3600101611b9c565b50600a54611c14908363ffffffff6125b716565b600a55600f54611c2a908363ffffffff6125b716565b600f555050565b6006546001600160a01b031681565b6006546000906001600160a01b0316611c576121f2565b6001600160a01b03161490505b90565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610d5a5780601f10610d2f57610100808354040283529160200191610d5a565b611cc96121f2565b6001600160a01b0316826001600160a01b03161415611d2f576040805162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604482015290519081900360640190fd5b8060056000611d3c6121f2565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff191692151592909217909155611d806121f2565b60408051841515815290516001600160a01b0392909216917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319181900360200190a35050565b60136020526000908152604090205460ff1681565b611dec611de66121f2565b83612264565b611e275760405162461bcd60e51b81526004018080602001828103825260318152602001806131626031913960400191505060405180910390fd5b611e338484848461290e565b50505050565b601954600160a01b900460ff1681565b611e51611c40565b611e90576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6019805460ff60a01b1916600160a01b179055565b6060611eb0826121d5565b611eeb5760405162461bcd60e51b81526004018080602001828103825260258152602001806130d36025913960400191505060405180910390fd5b60078054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526118649390929091830182828015611f785780601f10611f4d57610100808354040283529160200191611f78565b820191906000526020600020905b815481529060010190602001808311611f5b57829003601f168201915b5050505050611f8684612925565b6129e6565b60146020526000908152604090205460ff1681565b611fa8611c40565b611fe7576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6019805460ff60a01b19169055565b60156020526000908152604090205460ff1681565b6018546001600160a01b031681565b6060604051806060016040528060278152602001612fc960279139905090565b6008546040805163c455279160e01b81526001600160a01b0385811660048301529151600093831692851691839163c455279191602480820192602092909190829003018186803b15801561208e57600080fd5b505afa1580156120a2573d6000803e3d6000fd5b505050506040513d60208110156120b857600080fd5b50516001600160a01b031614156120d3576001915050611864565b6120dd8484612a22565b949350505050565b6120ed611c40565b61212c576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b6117fe81612a50565b61213d611c40565b61217c576040805162461bcd60e51b815260206004820181905260248201526000805160206130f8833981519152604482015290519081900360640190fd5b805160005b81811015610eaf5760016014600085848151811061219b57fe5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101612181565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061222b82611810565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061226f826121d5565b6122aa5760405162461bcd60e51b815260040180806020018281038252602c815260200180612ff0602c913960400191505060405180910390fd5b60006122b583611810565b9050806001600160a01b0316846001600160a01b031614806122f05750836001600160a01b03166122e584610d68565b6001600160a01b0316145b806120dd57506120dd818561203a565b826001600160a01b031661231382611810565b6001600160a01b0316146123585760405162461bcd60e51b81526004018080602001828103825260298152602001806131186029913960400191505060405180910390fd5b6001600160a01b03821661239d5760405162461bcd60e51b8152600401808060200182810382526024815260200180612fa56024913960400191505060405180910390fd5b6123a8838383610eaf565b6123b36000826121f6565b6001600160a01b038084166000818152600360209081526040808320805460001901905593861680835284832080546001019055858352600290915283822080546001600160a01b031916821790559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b600082820183811015612483576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236164643a204f564552464c4f5760501b604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166124e5576040805162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604482015290519081900360640190fd5b6124ee816121d5565b15612540576040805162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604482015290519081900360640190fd5b61254c60008383610eaf565b6001600160a01b038216600081815260036020908152604080832080546001019055848352600290915280822080546001600160a01b0319168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b60008282111561260e576040805162461bcd60e51b815260206004820152601760248201527f536166654d617468237375623a20554e444552464c4f57000000000000000000604482015290519081900360640190fd5b50900390565b6001600160a01b03811660009081526013602052604081205460ff161561263d57506000610cc0565b601654604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561268e57600080fd5b505afa1580156126a2573d6000803e3d6000fd5b505050506040513d60208110156126b857600080fd5b505111156126c857506001610cc0565b601754604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561271957600080fd5b505afa15801561272d573d6000803e3d6000fd5b505050506040513d602081101561274357600080fd5b5051111561275357506001610cc0565b601854604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b1580156127a457600080fd5b505afa1580156127b8573d6000803e3d6000fd5b505050506040513d60208110156127ce57600080fd5b505111156127de57506001610cc0565b601954604080516370a0823160e01b81526001600160a01b038581166004830152915160009392909216916370a0823191602480820192602092909190829003018186803b15801561282f57600080fd5b505afa158015612843573d6000803e3d6000fd5b505050506040513d602081101561285957600080fd5b5051111561286957506001610cc0565b506000610cc0565b6001600160a01b031660009081526014602052604090205460ff1690565b60008261289e57506000611864565b828202828482816128ab57fe5b0414612483576040805162461bcd60e51b8152602060048201526016602482015275536166654d617468236d756c3a204f564552464c4f5760501b604482015290519081900360640190fd5b805161290a906007906020840190612ec4565b5050565b612919848484612300565b611e3384848484612af1565b60608161294a57506040805180820190915260018152600360fc1b6020820152610cc0565b8160005b811561296257600101600a8204915061294e565b6060816040519080825280601f01601f19166020018201604052801561298f576020820181803883390190505b50905060001982015b85156129dd57600a860660300160f81b828280600190039350815181106129bb57fe5b60200101906001600160f81b031916908160001a905350600a86049550612998565b50949350505050565b60606124838383604051806020016040528060008152506040518060200160405280600081525060405180602001604052806000815250612c79565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001600160a01b038116612a955760405162461bcd60e51b8152600401808060200182810382526026815260200180612f5d6026913960400191505060405180910390fd5b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b612b03836001600160a01b0316612e8d565b15611e33576000836001600160a01b031663150b7a02612b216121f2565b8786866040518563ffffffff1660e01b815260040180856001600160a01b03166001600160a01b03168152602001846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612ba6578181015183820152602001612b8e565b50505050905090810190601f168015612bd35780820380516001836020036101000a031916815260200191505b5095505050505050602060405180830381600087803b158015612bf557600080fd5b505af1158015612c09573d6000803e3d6000fd5b505050506040513d6020811015612c1f57600080fd5b505190506001600160e01b0319811663785cf2dd60e11b14612c725760405162461bcd60e51b8152600401808060200182810382526022815260200180612f836022913960400191505060405180910390fd5b5050505050565b6060808690506060869050606086905060608690506060869050606081518351855187518951010101016040519080825280601f01601f191660200182016040528015612ccd576020820181803883390190505b509050806000805b8851811015612d2657888181518110612cea57fe5b602001015160f81c60f81b838380600101945081518110612d0757fe5b60200101906001600160f81b031916908160001a905350600101612cd5565b5060005b8751811015612d7b57878181518110612d3f57fe5b602001015160f81c60f81b838380600101945081518110612d5c57fe5b60200101906001600160f81b031916908160001a905350600101612d2a565b5060005b8651811015612dd057868181518110612d9457fe5b602001015160f81c60f81b838380600101945081518110612db157fe5b60200101906001600160f81b031916908160001a905350600101612d7f565b5060005b8551811015612e2557858181518110612de957fe5b602001015160f81c60f81b838380600101945081518110612e0657fe5b60200101906001600160f81b031916908160001a905350600101612dd4565b5060005b8451811015612e7a57848181518110612e3e57fe5b602001015160f81c60f81b838380600101945081518110612e5b57fe5b60200101906001600160f81b031916908160001a905350600101612e29565b50909d9c50505050505050505050505050565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906120dd5750141592915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10612f0557805160ff1916838001178555612f32565b82800160010185558215612f32579182015b82811115612f32578251825591602001919060010190612f17565b50612f3e929150612f42565b5090565b611c6491905b80821115612f3e5760008155600101612f4856fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734552433732313a20494e56414c49445f4f4e5f524543454956455f4d4553534147454552433732313a207472616e7366657220746f20746865207a65726f206164647265737368747470733a2f2f7777772e636f736d6f736368616e6d6265722e6172742f61626f75742d75734552433732313a206f70657261746f7220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76652063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f76656420666f7220616c6c4552433732313a2062616c616e636520717565727920666f7220746865207a65726f20616464726573734552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732313a20617070726f76656420717565727920666f72206e6f6e6578697374656e7420746f6b656e4552433732315472616461626c65237572693a204e4f4e4558495354454e545f544f4b454e4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65724552433732313a207472616e73666572206f6620746f6b656e2074686174206973206e6f74206f776e4552433732313a20617070726f76616c20746f2063757272656e74206f776e65724552433732313a207472616e736665722063616c6c6572206973206e6f74206f776e6572206e6f7220617070726f766564ffa55b278bf03679f0e30ab08cf1b28540e6f72664096eb483cc4deddcd096b8a265627a7a72315820d5abfefc82eb7d08b081d785ecd7a2d6a3a8dab00f91f8f192606daf2172d14964736f6c634300050c0032

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

000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1

-----Decoded View---------------
Arg [0] : _proxyRegistryAddress (address): 0xa5409ec958C83C3f309868babACA7c86DCB077c1

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000a5409ec958c83c3f309868babaca7c86dcb077c1


Deployed Bytecode Sourcemap

31111:487:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11856:435;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11856:435:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11856:435:0;-1:-1:-1;;;;;;11856:435:0;;:::i;:::-;;;;;;;;;;;;;;;;;;24468:28;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24468:28:0;;;:::i;:::-;;;;-1:-1:-1;;;;;24468:28:0;;;;;;;;;;;;;;11042:18;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11042:18:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;11042:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23994:39;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23994:39:0;;;:::i;:::-;;;;;;;;;;;;;;;;13358:204;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13358:204:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13358:204:0;;:::i;24530:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24530:30:0;;;:::i;12898:394::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12898:394:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12898:394:0;;;;;;;;:::i;:::-;;23907:24;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23907:24:0;;;:::i;14197:322::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14197:322:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14197:322:0;;;;;;;;;;;;;;;;;:::i;26462:520::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26462:520:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26462:520:0;;;;;;-1:-1:-1;;;;;26462:520:0;;:::i;28041:556::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28041:556:0;;;:::i;27584:92::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27584:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27584:92:0;-1:-1:-1;;;;;27584:92:0;;:::i;28812:582::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28812:582:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;28812:582:0;;;;;;;;;;;;;;;;;;;;;;;;:::i;14590:168::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14590:168:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14590:168:0;;;;;;;;;;;;;;;;;:::i;23959:31::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23959:31:0;;;:::i;30149:114::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30149:114:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30149:114:0;-1:-1:-1;;;;;30149:114:0;;:::i;27487:91::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27487:91:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27487:91:0;-1:-1:-1;;;;;27487:91:0;;:::i;25358:500::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25358:500:0;;:::i;27682:82::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27682:82:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;27682:82:0;;:::i;27770:265::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27770:265:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;27770:265:0;;;;;;;;:::i;24170:50::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24170:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24170:50:0;-1:-1:-1;;;;;24170:50:0;;:::i;26988:493::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;26988:493:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;26988:493:0;;;;;;-1:-1:-1;;;;;26988:493:0;;:::i;31491:102::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31491:102:0;;;:::i;24434:30::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24434:30:0;;;:::i;12609:223::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12609:223:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12609:223:0;;:::i;12355:192::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12355:192:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12355:192:0;-1:-1:-1;;;;;12355:192:0;;:::i;4212:138::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4212:138:0;;;:::i;30655:130::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30655:130:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30655:130:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;30655:130:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;30655:130: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;30655:130:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;30655:130:0;;-1:-1:-1;30655:130:0;;-1:-1:-1;;;;;30655:130:0:i;29988:155::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;29988:155:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29988:155:0;;:::i;25864:592::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25864:592:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25864:592:0;;;;;;-1:-1:-1;;;;;25864:592:0;;:::i;3735:28::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3735:28:0;;;:::i;4107:93::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4107:93:0;;;:::i;11090:20::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11090:20:0;;;:::i;13634:278::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13634:278:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13634:278:0;;;;;;;;;;:::i;24224:50::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24224:50:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24224:50:0;-1:-1:-1;;;;;24224:50:0;;:::i;14829:311::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14829:311:0;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;14829:311:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;14829:311:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;14829:311: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;14829:311:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;14829:311:0;;-1:-1:-1;14829:311:0;;-1:-1:-1;;;;;14829:311:0:i;24567:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24567:26:0;;;:::i;25264:66::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25264:66:0;;;:::i;30271:238::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30271:238:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30271:238:0;;:::i;24278:44::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24278:44:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24278:44:0;-1:-1:-1;;;;;24278:44:0;;:::i;25190:68::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25190:68:0;;;:::i;24326:43::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24326:43:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24326:43:0;-1:-1:-1;;;;;24326:43:0;;:::i;24500:26::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24500:26:0;;;:::i;31368:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31368:117:0;;;:::i;30790:314::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30790:314:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;30790:314:0;;;;;;;;;;:::i;4362:117::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;4362:117:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;4362:117:0;-1:-1:-1;;;;;4362:117:0;;:::i;28603:203::-;;8:9:-1;5:2;;;30:1;27;20:12;5:2;28603:203:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;28603:203:0;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;28603:203:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;28603:203:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28603:203:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;28603:203:0;;-1:-1:-1;28603:203:0;;-1:-1:-1;;;;;28603:203:0:i;11856:435::-;11927:4;-1:-1:-1;;;;;;11962:42:0;;-1:-1:-1;;;11962:42:0;;:101;;-1:-1:-1;;;;;;;12021:42:0;;-1:-1:-1;;;12021:42:0;11962:101;:168;;;-1:-1:-1;;;;;;;12080:50:0;;-1:-1:-1;;;12080:50:0;11962:168;:237;;;-1:-1:-1;;;;;;;12147:52:0;;-1:-1:-1;;;12147:52:0;11962:237;11944:317;;;-1:-1:-1;12241:4:0;12234:11;;11944:317;-1:-1:-1;12278:5:0;11856:435;;;;:::o;24468:28::-;;;-1:-1:-1;;;;;24468:28:0;;:::o;11042:18::-;;;;;;;;;;;;;;;-1:-1:-1;;11042:18:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23994:39::-;;;;:::o;13358:204::-;13417:7;13445:16;13453:7;13445;:16::i;:::-;13437:73;;;;-1:-1:-1;;;13437:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13530:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;13530:24:0;;13358:204::o;24530:30::-;;;-1:-1:-1;;;;;24530:30:0;;:::o;12898:394::-;12962:13;12978:23;12993:7;12978:14;:23::i;:::-;12962:39;;13026:5;-1:-1:-1;;;;;13020:11:0;:2;-1:-1:-1;;;;;13020:11:0;;;13012:57;;;;-1:-1:-1;;;13012:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13120:5;-1:-1:-1;;;;;13104:21:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;13104:21:0;;:62;;;;13129:37;13146:5;13153:12;:10;:12::i;:::-;13129:16;:37::i;:::-;13082:168;;;;-1:-1:-1;;;13082:168:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13263:21;13272:2;13276:7;13263:8;:21::i;:::-;12898:394;;;:::o;23907:24::-;;;;:::o;14197:322::-;14375:41;14394:12;:10;:12::i;:::-;14408:7;14375:18;:41::i;:::-;14367:103;;;;-1:-1:-1;;;14367:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14483:28;14493:4;14499:2;14503:7;14483:9;:28::i;26462:520::-;24632:7;;-1:-1:-1;;;24632:7:0;;;;24624:16;;;;;;26568:10;26553:26;;;;:14;:26;;;;;;:37;-1:-1:-1;26553:37:0;26545:80;;;;;-1:-1:-1;;;26545:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26670:9;;26680:1;26670:11;26641:25;26658:7;26641:12;;:16;;:25;;;;:::i;:::-;:40;;26633:73;;;;;-1:-1:-1;;;26633:73:0;;;;;;;;;;;;-1:-1:-1;;;26633:73:0;;;;;;;;;;;;;;;26718:6;26714:188;26731:7;26728:1;:10;26714:188;;;26757:29;26763:8;26773:12;;26757:5;:29::i;:::-;26813:12;;:19;;26830:1;26813:19;:16;:19;:::i;:::-;26798:12;:34;;;26886:6;;26849:44;;;;;;;-1:-1:-1;;;;;26849:44:0;;;-1:-1:-1;;;;;;;;;;;26849:44:0;;;;;;;;;26740:3;;26714:188;;;-1:-1:-1;26953:10:0;26938:26;;;;:14;:26;;;;;;:39;;26969:7;26938:39;:30;:39;:::i;:::-;26924:10;26909:26;;;;:14;:26;;;;;:68;-1:-1:-1;;26462:520:0:o;28041:556::-;24632:7;;-1:-1:-1;;;24632:7:0;;;;24624:16;;;;;;28091:23;28103:10;28091:11;:23::i;:::-;:53;;;;28118:26;28133:10;28118:14;:26::i;:::-;28083:78;;;;;-1:-1:-1;;;28083:78:0;;;;;;;;;;;;-1:-1:-1;;;28083:78:0;;;;;;;;;;;;;;;28193:9;;28177:12;;:25;;28169:58;;;;;-1:-1:-1;;;28169:58:0;;;;;;;;;;;;-1:-1:-1;;;28169:58:0;;;;;;;;;;;;;;;28258:1;28243:12;;:16;28235:25;;;;;;28268:31;28274:10;28286:12;;28268:5;:31::i;:::-;28322:12;;:19;;28339:1;28322:19;:16;:19;:::i;:::-;28307:12;:34;;;28393:6;;28354:46;;;;;;;28367:10;;-1:-1:-1;;;;;;;;;;;28354:46:0;;;;;;;;;28423:10;28411:23;;;;:11;:23;;;;;;;;28408:143;;;28460:10;28474:5;28448:23;;;:11;:23;;;;;:31;;-1:-1:-1;;28448:31:0;;;28408:143;;;28524:10;28506:29;;;;:17;:29;;;;;:36;;-1:-1:-1;;28506:36:0;28538:4;28506:36;;;28408:143;28573:12;;:19;;28590:1;28573:19;:16;:19;:::i;:::-;28558:12;:34;28041:556::o;27584:92::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27648:15:0;27666:5;27648:15;;;:10;:15;;;;;:23;;-1:-1:-1;;27648:23:0;;;27584:92::o;28812:582::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;29036:11;:25;;-1:-1:-1;;;;;29036:25:0;;;-1:-1:-1;;;;;;29036:25:0;;;;;;;29147:9;:21;;;;;;;;;;;;;;;29243:7;:17;;;;;;;;;;;;;;;29357:11;:32;;;;;;;;;;;28812:582::o;14590:168::-;14711:39;14728:4;14734:2;14738:7;14711:39;;;;;;;;;;;;:16;:39::i;23959:31::-;;;;:::o;30149:114::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;30222:20;:36;;-1:-1:-1;;;;;;30222:36:0;-1:-1:-1;;;;;30222:36:0;;;;;;;;;;30149:114::o;27487:91::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27551:15:0;;;;;:10;:15;;;;;:22;;-1:-1:-1;;27551:22:0;27569:4;27551:22;;;27487:91::o;25358:500::-;24632:7;;-1:-1:-1;;;24632:7:0;;;;24624:16;;;;;;25443:8;;:21;;25456:7;25443:21;:12;:21;:::i;:::-;25430:9;:34;;25422:63;;;;;-1:-1:-1;;;25422:63:0;;;;;;;;;;;;-1:-1:-1;;;25422:63:0;;;;;;;;;;;;;;;25517:7;25501:12;;:23;;25493:32;;;;;;25570:9;;25580:1;25570:11;25541:25;25558:7;25541:12;;:16;;:25;;;;:::i;:::-;:40;;25533:73;;;;;-1:-1:-1;;;25533:73:0;;;;;;;;;;;;-1:-1:-1;;;25533:73:0;;;;;;;;;;;;;;;25618:6;25614:192;25631:7;25628:1;:10;25614:192;;;25657:31;25663:10;25675:12;;25657:5;:31::i;:::-;25715:12;;:19;;25732:1;25715:19;:16;:19;:::i;:::-;25700:12;:34;;;25790:6;;25751:46;;;;;;;25764:10;;-1:-1:-1;;;;;;;;;;;25751:46:0;;;;;;;;;25640:3;;25614:192;;;-1:-1:-1;25828:12:0;;:25;;25845:7;25828:25;:16;:25;:::i;:::-;25813:12;:40;-1:-1:-1;25358:500:0:o;27682:82::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;27743:6;:16;27682:82::o;27770:265::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;27871:1;27862:7;:10;27854:19;;;;;;27905:7;27889:12;;:23;;27881:32;;;;;;-1:-1:-1;;;;;27948:24:0;;;;;;:14;:24;;;;;;;:34;;27921:61;;28005:12;;:25;;27975:7;28005:25;:16;:25;:::i;:::-;27990:12;:40;-1:-1:-1;;27770:265:0:o;24170:50::-;;;;;;;;;;;;;:::o;26988:493::-;24632:7;;-1:-1:-1;;;24632:7:0;;;;24624:16;;;;;;27094:10;27083:22;;;;:10;:22;;;;;;;;27075:31;;;;;;27140:7;27122:14;;:25;;27114:34;;;;;;27193:9;;27203:1;27193:11;27164:25;27181:7;27164:12;;:16;;:25;;;;:::i;:::-;:40;;27156:73;;;;;-1:-1:-1;;;27156:73:0;;;;;;;;;;;;-1:-1:-1;;;27156:73:0;;;;;;;;;;;;;;;27241:6;27237:188;27254:7;27251:1;:10;27237:188;;;27280:29;27286:8;27296:12;;27280:5;:29::i;:::-;27336:12;;:19;;27353:1;27336:19;:16;:19;:::i;:::-;27321:12;:34;;;27409:6;;27372:44;;;;;;;-1:-1:-1;;;;;27372:44:0;;;-1:-1:-1;;;;;;;;;;;27372:44:0;;;;;;;;;27263:3;;27237:188;;;-1:-1:-1;27449:14:0;;:27;;27468:7;27449:27;:18;:27;:::i;:::-;27432:14;:44;-1:-1:-1;;26988:493:0:o;31491:102::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;31548:5;;:37;;-1:-1:-1;;;;;31548:5:0;;;;31571:4;31563:21;31548:37;;;;;:5;:37;:5;:37;31563:21;31548:5;:37;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31548:37:0;31491:102::o;24434:30::-;;;-1:-1:-1;;;;;24434:30:0;;:::o;12609:223::-;12665:7;12701:16;;;:7;:16;;;;;;-1:-1:-1;;;;;12701:16:0;12736:19;12728:73;;;;-1:-1:-1;;;12728:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12819:5;12609:223;-1:-1:-1;;12609:223:0:o;12355:192::-;12411:7;-1:-1:-1;;;;;12439:19:0;;12431:74;;;;-1:-1:-1;;;12431:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12523:16:0;;;;;:9;:16;;;;;;;12355:192::o;4212:138::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;4295:5;;4274:39;;4310:1;;-1:-1:-1;;;;;4295:5:0;;4274:39;;4310:1;;4274:39;4324:5;:18;;-1:-1:-1;;;;;;4324:18:0;;;4212:138::o;30655:130::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;30740:40;30760:19;30740;:40::i;29988:155::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;30073:1;30061:9;:13;30053:22;;;;;;30083:8;:20;;;30116:22;;30094:9;;30116:22;;;;;29988:155;:::o;25864:592::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;24632:7;;-1:-1:-1;;;24632:7:0;;;;24624:16;;;;;;25993:9;;26003:1;25993:11;25964:25;25981:7;25964:12;;:16;;:25;;;;:::i;:::-;:40;;25956:73;;;;;-1:-1:-1;;;25956:73:0;;;;;;;;;;;;-1:-1:-1;;;25956:73:0;;;;;;;;;;;;;;;26061:7;26045:12;;:23;;26037:53;;;;;-1:-1:-1;;;26037:53:0;;;;;;;;;;;;-1:-1:-1;;;26037:53:0;;;;;;;;;;;;;;;26123:7;26106:13;;:24;;26098:60;;;;;-1:-1:-1;;;26098:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;26170:6;26166:188;26183:7;26180:1;:10;26166:188;;;26209:29;26215:8;26225:12;;26209:5;:29::i;:::-;26265:12;;:19;;26282:1;26265:19;:16;:19;:::i;:::-;26250:12;:34;;;26338:6;;26301:44;;;;;;;-1:-1:-1;;;;;26301:44:0;;;-1:-1:-1;;;;;;;;;;;26301:44:0;;;;;;;;;26192:3;;26166:188;;;-1:-1:-1;26376:12:0;;:25;;26393:7;26376:25;:16;:25;:::i;:::-;26361:12;:40;26425:13;;:26;;26443:7;26425:26;:17;:26;:::i;:::-;26409:13;:42;-1:-1:-1;;25864:592:0:o;3735:28::-;;;-1:-1:-1;;;;;3735:28:0;;:::o;4107:93::-;4187:5;;4147:4;;-1:-1:-1;;;;;4187:5:0;4171:12;:10;:12::i;:::-;-1:-1:-1;;;;;4171:21:0;;4164:28;;4107:93;;:::o;11090:20::-;;;;;;;;;;;;;;;-1:-1:-1;;11090:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13634:278;13732:12;:10;:12::i;:::-;-1:-1:-1;;;;;13720:24:0;:8;-1:-1:-1;;;;;13720:24:0;;;13712:62;;;;;-1:-1:-1;;;13712:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13832:8;13787:18;:32;13806:12;:10;:12::i;:::-;-1:-1:-1;;;;;13787:32:0;;;;;;;;;;;;;;;;;-1:-1:-1;13787:32:0;;;:42;;;;;;;;;;;;:53;;-1:-1:-1;;13787:53:0;;;;;;;;;;;13871:12;:10;:12::i;:::-;13856:48;;;;;;;;;;-1:-1:-1;;;;;13856:48:0;;;;;;;;;;;;;;13634:278;;:::o;24224:50::-;;;;;;;;;;;;;;;:::o;14829:311::-;14987:41;15006:12;:10;:12::i;:::-;15020:7;14987:18;:41::i;:::-;14979:103;;;;-1:-1:-1;;;14979:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15093:39;15107:4;15113:2;15117:7;15126:5;15093:13;:39::i;:::-;14829:311;;;;:::o;24567:26::-;;;-1:-1:-1;;;24567:26:0;;;;;:::o;25264:66::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;25311:7;:14;;-1:-1:-1;;;;25311:14:0;-1:-1:-1;;;25311:14:0;;;25264:66::o;30271:238::-;30328:13;30362:17;30370:8;30362:7;:17::i;:::-;30354:67;;;;-1:-1:-1;;;30354:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30457:15;30439:62;;;;;;;;-1:-1:-1;;30439:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30457:15;;30439:62;;30457:15;30439:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30474:26;30491:8;30474:16;:26::i;:::-;30439:17;:62::i;24278:44::-;;;;;;;;;;;;;;;:::o;25190:68::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;25238:7;:15;;-1:-1:-1;;;;25238:15:0;;;25190:68::o;24326:43::-;;;;;;;;;;;;;;;:::o;24500:26::-;;;-1:-1:-1;;;;;24500:26:0;;:::o;31368:117::-;31412:13;31432:48;;;;;;;;;;;;;;;;;;;31368:117;:::o;30790:314::-;30938:20;;30976:29;;;-1:-1:-1;;;30976:29:0;;-1:-1:-1;;;;;30976:29:0;;;;;;;;;30872:15;;30938:20;;;30968:51;;;30938:20;;30976:21;;:29;;;;;;;;;;;;;;;30938:20;30976:29;;;5:2:-1;;;;30:1;27;20:12;5:2;30976:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30976:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;30976:29:0;-1:-1:-1;;;;;30968:51:0;;30964:80;;;31034:4;31027:11;;;;;30964:80;31057:42;31081:6;31089:9;31057:23;:42::i;:::-;31050:49;30790:314;-1:-1:-1;;;;30790:314:0:o;4362:117::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;4443:28;4462:8;4443:18;:28::i;28603:203::-;4033:9;:7;:9::i;:::-;4025:54;;;;;-1:-1:-1;;;4025:54:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4025:54:0;;;;;;;;;;;;;;;28693:13;;28675:15;28714:88;28735:10;28731:1;:14;28714:88;;;28789:4;28764:11;:22;28776:6;28783:1;28776:9;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28764:22:0;;;;;;;;;;;-1:-1:-1;28764:22:0;:29;;-1:-1:-1;;28764:29:0;;;;;;;;;;-1:-1:-1;28747:3:0;28714:88;;16579:119;16636:4;16660:16;;;:7;:16;;;;;;-1:-1:-1;;;;;16660:16:0;:30;;;16579:119::o;3480:98::-;3560:10;3480:98;:::o;20405:166::-;20472:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;20472:29:0;-1:-1:-1;;;;;20472:29:0;;;;;;;;:24;;20526:23;20472:24;20526:14;:23::i;:::-;-1:-1:-1;;;;;20517:46:0;;;;;;;;;;;20405:166;;:::o;16865:340::-;16950:4;16975:16;16983:7;16975;:16::i;:::-;16967:73;;;;-1:-1:-1;;;16967:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17051:13;17067:23;17082:7;17067:14;:23::i;:::-;17051:39;;17120:5;-1:-1:-1;;;;;17109:16:0;:7;-1:-1:-1;;;;;17109:16:0;;:51;;;;17153:7;-1:-1:-1;;;;;17129:31:0;:20;17141:7;17129:11;:20::i;:::-;-1:-1:-1;;;;;17129:31:0;;17109:51;:87;;;;17164:32;17181:5;17188:7;17164:16;:32::i;19717:570::-;19868:4;-1:-1:-1;;;;;19841:31:0;:23;19856:7;19841:14;:23::i;:::-;-1:-1:-1;;;;;19841:31:0;;19833:85;;;;-1:-1:-1;;;19833:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19937:16:0;;19929:65;;;;-1:-1:-1;;;19929:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20007:39;20028:4;20034:2;20038:7;20007:20;:39::i;:::-;20111:29;20128:1;20132:7;20111:8;:29::i;:::-;-1:-1:-1;;;;;20153:15:0;;;;;;;:9;:15;;;;;;;;:20;;-1:-1:-1;;20153:20:0;;;20184:13;;;;;;;;;:18;;20172:1;20184:18;;;20213:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;20213:21:0;;;;;20252:27;;20221:7;;20184:13;20153:15;20252:27;;;19717:570;;;:::o;611:163::-;669:7;697:5;;;717:6;;;;709:41;;;;;-1:-1:-1;;;709:41:0;;;;;;;;;;;;-1:-1:-1;;;709:41:0;;;;;;;;;;;;;;;766:1;611:163;-1:-1:-1;;;611:163:0:o;18425:374::-;-1:-1:-1;;;;;18497:16:0;;18489:61;;;;;-1:-1:-1;;;18489:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18570:16;18578:7;18570;:16::i;:::-;18569:17;18561:58;;;;;-1:-1:-1;;;18561:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18632:45;18661:1;18665:2;18669:7;18632:20;:45::i;:::-;-1:-1:-1;;;;;18690:13:0;;;;;;:9;:13;;;;;;;;:18;;18707:1;18690:18;;;18719:16;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;18719:21:0;;;;;18758:33;18727:7;;18690:13;;18758:33;;18690:13;;18758:33;18425:374;;:::o;442:163::-;500:7;529:1;524;:6;;516:42;;;;;-1:-1:-1;;;516:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;577:5:0;;;442:163::o;29399:473::-;-1:-1:-1;;;;;29474:24:0;;29456:4;29474:24;;;:17;:24;;;;;;;;29470:62;;;-1:-1:-1;29518:5:0;29511:12;;29470:62;29542:11;;:28;;;-1:-1:-1;;;29542:28:0;;-1:-1:-1;;;;;29542:28:0;;;;;;;;;29573:1;;29542:11;;;;;:21;;:28;;;;;;;;;;;;;;;:11;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;29542:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29542:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29542:28:0;:32;29539:329;;;-1:-1:-1;29595:4:0;29588:11;;29539:329;29618:9;;:26;;;-1:-1:-1;;;29618:26:0;;-1:-1:-1;;;;;29618:26:0;;;;;;;;;29647:1;;29618:9;;;;;:19;;:26;;;;;;;;;;;;;;;:9;:26;;;5:2:-1;;;;30:1;27;20:12;5:2;29618:26:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29618:26:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29618:26:0;:30;29614:254;;;-1:-1:-1;29669:4:0;29662:11;;29614:254;29692:7;;:24;;;-1:-1:-1;;;29692:24:0;;-1:-1:-1;;;;;29692:24:0;;;;;;;;;29719:1;;29692:7;;;;;:17;;:24;;;;;;;;;;;;;;;:7;:24;;;5:2:-1;;;;30:1;27;20:12;5:2;29692:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29692:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29692:24:0;:28;29688:180;;;-1:-1:-1;29741:4:0;29734:11;;29688:180;29764:11;;:28;;;-1:-1:-1;;;29764:28:0;;-1:-1:-1;;;;;29764:28:0;;;;;;;;;29795:1;;29764:11;;;;;:21;;:28;;;;;;;;;;;;;;;:11;:28;;;5:2:-1;;;;30:1;27;20:12;5:2;29764:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29764:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;29764:28:0;:32;29760:108;;;-1:-1:-1;29817:4:0;29810:11;;29760:108;-1:-1:-1;29854:5:0;29847:12;;29878:104;-1:-1:-1;;;;;29959:18:0;29938:4;29959:18;;;:11;:18;;;;;;;;;29878:104::o;50:209::-;108:7;128:6;124:37;;-1:-1:-1;152:1:0;145:8;;124:37;179:5;;;183:1;179;:5;:1;199:5;;;;;:10;191:45;;;;;-1:-1:-1;;;191:45:0;;;;;;;;;;;;-1:-1:-1;;;191:45:0;;;;;;;;;;;;;;30521:129;30605:37;;;;:15;;:37;;;;;:::i;:::-;;30521:129;:::o;16022:244::-;16171:28;16181:4;16187:2;16191:7;16171:9;:28::i;:::-;16210:48;16233:4;16239:2;16243:7;16252:5;16210:22;:48::i;3030:384::-;3083:27;3121:7;3117:35;;-1:-1:-1;3136:10:0;;;;;;;;;;;;-1:-1:-1;;;3136:10:0;;;;;;3117:35;3168:2;3156:9;3191:45;3198:6;;3191:45;;3212:5;;3228:2;3223:7;;;;3191:45;;;3240:17;3270:3;3260:14;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;3260:14:0;87:34:-1;135:17;;-1:-1;3260:14:0;-1:-1:-1;3240:34:0;-1:-1:-1;;;3291:7:0;;3303:83;3310:7;;3303:83;;3361:2;3356;:7;3350:2;:14;3337:29;;3325:4;3330:3;;;;;;;3325:9;;;;;;;;;;;:41;-1:-1:-1;;;;;3325:41:0;;;;;;;;-1:-1:-1;3378:2:0;3372:8;;;;3303:83;;;-1:-1:-1;3404:4:0;3030:384;-1:-1:-1;;;;3030:384:0:o;2886:139::-;2964:13;2991:29;3001:2;3005;2991:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:29::i;13983:147::-;-1:-1:-1;;;;;14087:25:0;;;14063:4;14087:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;13983:147::o;4487:235::-;-1:-1:-1;;;;;4569:22:0;;4561:73;;;;-1:-1:-1;;;4561:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4671:5;;4650:37;;-1:-1:-1;;;;;4650:37:0;;;;4671:5;;4650:37;;4671:5;;4650:37;4698:5;:16;;-1:-1:-1;;;;;;4698:16:0;-1:-1:-1;;;;;4698:16:0;;;;;;;;;;4487:235::o;21209:406::-;21369:15;:2;-1:-1:-1;;;;;21369:13:0;;:15::i;:::-;21365:229;;;21401:13;21433:2;-1:-1:-1;;;;;21417:36:0;;21454:12;:10;:12::i;:::-;21468:4;21474:7;21483:5;21417:72;;;;;;;;;;;;;-1:-1:-1;;;;;21417:72:0;-1:-1:-1;;;;;21417:72:0;;;;;;-1:-1:-1;;;;;21417:72:0;-1:-1:-1;;;;;21417:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;21417:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;21417:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21417:72:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21417:72:0;;-1:-1:-1;;;;;;;21512:31:0;;-1:-1:-1;;;21512:31:0;21504:78;;;;-1:-1:-1;;;21504:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21365:229;21209:406;;;;:::o;1660:850::-;1811:13;1831:16;1856:2;1831:28;;1864:16;1889:2;1864:28;;1897:16;1922:2;1897:28;;1930:16;1955:2;1930:28;;1963:16;1988:2;1963:28;;1996:19;2081:3;:10;2068:3;:10;2055:3;:10;2042:3;:10;2029:3;:10;:23;:36;:49;:62;2018:74;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;104:10;2018:74:0;87:34:-1;135:17;;-1:-1;2018:74:0;-1:-1:-1;1996:96:0;-1:-1:-1;1996:96:0;2136:9;;2154:61;2178:3;:10;2174:1;:14;2154:61;;;2209:3;2213:1;2209:6;;;;;;;;;;;;;;;;2195;2202:3;;;;;;2195:11;;;;;;;;;;;:20;-1:-1:-1;;;;;2195:20:0;;;;;;;;-1:-1:-1;2190:3:0;;2154:61;;;-1:-1:-1;2225:9:0;2220:61;2244:3;:10;2240:1;:14;2220:61;;;2275:3;2279:1;2275:6;;;;;;;;;;;;;;;;2261;2268:3;;;;;;2261:11;;;;;;;;;;;:20;-1:-1:-1;;;;;2261:20:0;;;;;;;;-1:-1:-1;2256:3:0;;2220:61;;;-1:-1:-1;2291:9:0;2286:61;2310:3;:10;2306:1;:14;2286:61;;;2341:3;2345:1;2341:6;;;;;;;;;;;;;;;;2327;2334:3;;;;;;2327:11;;;;;;;;;;;:20;-1:-1:-1;;;;;2327:20:0;;;;;;;;-1:-1:-1;2322:3:0;;2286:61;;;-1:-1:-1;2357:9:0;2352:61;2376:3;:10;2372:1;:14;2352:61;;;2407:3;2411:1;2407:6;;;;;;;;;;;;;;;;2393;2400:3;;;;;;2393:11;;;;;;;;;;;:20;-1:-1:-1;;;;;2393:20:0;;;;;;;;-1:-1:-1;2388:3:0;;2352:61;;;-1:-1:-1;2423:9:0;2418:61;2442:3;:10;2438:1;:14;2418:61;;;2473:3;2477:1;2473:6;;;;;;;;;;;;;;;;2459;2466:3;;;;;;2459:11;;;;;;;;;;;:20;-1:-1:-1;;;;;2459:20:0;;;;;;;;-1:-1:-1;2454:3:0;;2418:61;;;-1:-1:-1;2498:6:0;;1660:850;-1:-1:-1;;;;;;;;;;;;;1660:850:0:o;958:673::-;1018:4;1546:20;;1076:66;1582:15;;;;;:42;;-1:-1:-1;1601:23:0;;;1574:51;-1:-1:-1;;958:673:0:o;31111:487::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31111:487:0;;;-1:-1:-1;31111:487:0;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://d5abfefc82eb7d08b081d785ecd7a2d6a3a8dab00f91f8f192606daf2172d149
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.