ETH Price: $3,816.83 (+5.51%)

Token

ERC-20: Cyber Gorillas (CyberGorillas)
 

Overview

Max Total Supply

2,411 CyberGorillas

Holders

502

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
0 CyberGorillas
0xd6113807cdb7d481bad7e4b9bcd15dc4d76b8cce
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
CyberGorillas

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
Yes with 9999 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 2 of 5: CyberGorillas.sol
// SPDX-License-Identifier: Unlicense
pragma solidity 0.8.10;

import "./ERC721.sol";
import "./Strings.sol";
import "./Ownable.sol";

error SoldOut();
error SaleClosed();
error InvalidMintParameters();
error MintingTooMany();
error NotWhitelisted();
error NotAuthorized();

/*
   ______      __              ______           _ ____          
  / ____/_  __/ /_  ___  _____/ ____/___  _____(_) / /___ ______
 / /   / / / / __ \/ _ \/ ___/ / __/ __ \/ ___/ / / / __ `/ ___/
/ /___/ /_/ / /_/ /  __/ /  / /_/ / /_/ / /  / / / / /_/ (__  ) 
\____/\__, /_.___/\___/_/   \____/\____/_/  /_/_/_/\__,_/____/  
     /____/                                                     

*/

/// @author distractedm1nd
contract CyberGorillas is ERC721, Ownable {
    using Strings for uint256;
    address private passwordSigner;
    address private gorillaBurner;

    bool publicSaleActive;

    uint256 constant PRESALE_MAX_TX = 2;
    uint256 constant PUBLIC_MAX_TX = 5;
    uint256 constant public MAX_SUPPLY = 3333;
    uint256 constant PRICE = 0.08 ether;

    string public baseURI;

    mapping (address => uint256) private presaleWalletLimits;
    mapping (address => uint256) private mainsaleWalletLimits;

    constructor(string memory initialBaseURI, address initialPasswordSigner) ERC721("Cyber Gorillas", "CyberGorillas"){
        baseURI = initialBaseURI;
        passwordSigner = initialPasswordSigner;
    }

    function airdrop(address[] calldata airdropAddresses) public onlyOwner {
        for(uint256 i = 0; i < airdropAddresses.length; i++) {
            _mint(airdropAddresses[i], totalSupply);
        }
    }

    function setGorilliaBurner(address newGorillaBurner) public onlyOwner {
        gorillaBurner = newGorillaBurner;
    }

    function setBaseURI(string memory newBaseURI) public onlyOwner {
        baseURI = newBaseURI;
    }

    function setPasswordSigner(address signer) public onlyOwner {
        passwordSigner = signer;
    }

    function setPublicSale(bool publicSale) public onlyOwner {
        publicSaleActive = publicSale;
    }

    function purchase(uint256 amount) public payable {
        if(!publicSaleActive) revert SaleClosed();
        if(totalSupply + amount > MAX_SUPPLY) revert SoldOut();
        if(mainsaleWalletLimits[msg.sender] + amount > PUBLIC_MAX_TX || msg.value < PRICE * amount) revert InvalidMintParameters(); 

        mainsaleWalletLimits[msg.sender] += amount;
        for(uint256 i = 0; i < amount; i++) {
            _mint(msg.sender, totalSupply);
        }
    }

    function presale(uint256 amount, bytes memory signature) public payable {
        if(publicSaleActive) revert SaleClosed();
        if(totalSupply + amount > MAX_SUPPLY) revert SoldOut();
        if(!isWhitelisted(msg.sender, signature)) revert NotWhitelisted();
        if(presaleWalletLimits[msg.sender] + amount > PRESALE_MAX_TX || msg.value < PRICE * amount) revert InvalidMintParameters(); 

        presaleWalletLimits[msg.sender] += amount;
        for(uint256 i = 0; i < amount; i++) {
            _mint(msg.sender, totalSupply);
        }
    }

    function withdraw(address payable recipient) external onlyOwner {
        recipient.transfer(address(this).balance);
    }

    function tokenURI(uint256 tokenId) public view returns (string memory) {
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString(), ".json")) : "";
    }

    function isWhitelisted(address user, bytes memory signature) public view returns (bool) {
        bytes32 messageHash = keccak256(abi.encode(user));
        bytes32 ethSignedMessageHash = getEthSignedMessageHash(messageHash);

        return recoverSigner(ethSignedMessageHash, signature) == passwordSigner;
    }

    function getEthSignedMessageHash(bytes32 _messageHash) private pure returns (bytes32) {
        /*
        Signature is produced by signing a keccak256 hash with the following format:
        "\x19Ethereum Signed Message\n" + len(msg) + msg
        */
        return
        keccak256(
            abi.encodePacked("\x19Ethereum Signed Message:\n32", _messageHash)
        );
    }

    function recoverSigner(bytes32 _ethSignedMessageHash, bytes memory _signature) private pure returns (address) {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);
        return ecrecover(_ethSignedMessageHash, v, r, s);
    }

    function recoverSignerTest(bytes32 _ethSignedMessageHash, bytes memory _signature) private pure returns (address) {
        (bytes32 r, bytes32 s, uint8 v) = splitSignature(_signature);
        return ecrecover(_ethSignedMessageHash, v, r, s);
    }

    function splitSignature(bytes memory sig) private pure returns (bytes32 r, bytes32 s, uint8 v) {
        require(sig.length == 65, "sig invalid");

        assembly {
        /*
        First 32 bytes stores the length of the signature

        add(sig, 32) = pointer of sig + 32
        effectively, skips first 32 bytes of signature

        mload(p) loads next 32 bytes starting at the memory address p into memory
        */

        // first 32 bytes, after the length prefix
            r := mload(add(sig, 32))
        // second 32 bytes
            s := mload(add(sig, 64))
        // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(sig, 96)))
        }

        // implicitly return (r, s, v)
    }

    function burn(uint tokenId) public {
        if(msg.sender != gorillaBurner) revert NotAuthorized();
        _burn(tokenId);
    }
}


File 1 of 5: Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


File 3 of 5: ERC721.sol
// SPDX-License-Identifier: AGPL-3.0-only
pragma solidity >=0.8.0;

/// @notice Modern and gas efficient ERC-721 + ERC-20/EIP-2612-like implementation,
/// including the MetaData, and partially, Enumerable extensions.
/// @author from an unmerged solmate PR from z0r0z & distractedm1nd
abstract contract ERC721 {
    /*///////////////////////////////////////////////////////////////
                            EVENTS
    //////////////////////////////////////////////////////////////*/

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    event Approval(address indexed owner, address indexed spender, uint256 indexed tokenId);

    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /*///////////////////////////////////////////////////////////////
                            METADATA STORAGE
    //////////////////////////////////////////////////////////////*/
    
    string public name;

    string public symbol;

    /*///////////////////////////////////////////////////////////////
                            ERC-721 STORAGE
    //////////////////////////////////////////////////////////////*/
    
    uint256 public totalSupply;
    
    mapping(address => uint256) public balanceOf;

    mapping(uint256 => address) public ownerOf;

    mapping(uint256 => address) public getApproved;

    mapping(address => mapping(address => bool)) public isApprovedForAll;

    /*///////////////////////////////////////////////////////////////
                            EIP-2612-LIKE STORAGE
    //////////////////////////////////////////////////////////////*/
    
    bytes32 public constant PERMIT_TYPEHASH =
        keccak256("Permit(address spender,uint256 tokenId,uint256 nonce,uint256 deadline)");

    bytes32 public constant PERMIT_ALL_TYPEHASH = 
        keccak256("Permit(address owner,address spender,uint256 nonce,uint256 deadline)");
    
    uint256 internal immutable INITIAL_CHAIN_ID;

    bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR;

    mapping(uint256 => uint256) public nonces;

    mapping(address => uint256) public noncesForAll;
    
    /*///////////////////////////////////////////////////////////////
                            CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/
    
    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
        
        INITIAL_CHAIN_ID = block.chainid;
        INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator();
    }

    /*///////////////////////////////////////////////////////////////
                            ERC-20-LIKE LOGIC
    //////////////////////////////////////////////////////////////*/

    function transfer(address to, uint256 tokenId) public virtual returns (bool success) {
        require(msg.sender == ownerOf[tokenId], "NOT_OWNER");
        
        // Cannot overflow because because ownership is checked
        // against decrement, and sum of all user
        // balances can't exceed the max uint256 value.
        unchecked {
            balanceOf[msg.sender]--; 
        
            balanceOf[to]++;
        }
        
        delete getApproved[tokenId];
        
        ownerOf[tokenId] = to;
        
        emit Transfer(msg.sender, to, tokenId); 
        
        success = true;
    }

    /*///////////////////////////////////////////////////////////////
                            ERC-721 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public pure virtual returns (bool supported) {
        supported = interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f || interfaceId == 0x01ffc9a7;
    }
    
    function approve(address spender, uint256 tokenId) public virtual {
        address owner = ownerOf[tokenId];
        
        require(msg.sender == owner || isApprovedForAll[owner][msg.sender], "NOT_APPROVED");
        
        getApproved[tokenId] = spender;
        
        emit Approval(owner, spender, tokenId); 
    }
    
    function setApprovalForAll(address operator, bool approved) public virtual {
        isApprovedForAll[msg.sender][operator] = approved;
        
        emit ApprovalForAll(msg.sender, operator, approved);
    }
    
    function transferFrom(
        address from, 
        address to, 
        uint256 tokenId
    ) public virtual {
        require(from == ownerOf[tokenId], 'NOT_OWNER');
        
        require(
            msg.sender == from 
            || msg.sender == getApproved[tokenId]
            || isApprovedForAll[from][msg.sender], 
            'NOT_APPROVED'
        );
        
        // this is safe because ownership is checked
        // against decrement, and sum of all user
        // balances can't exceed 'type(uint256).max'
        unchecked { 
            balanceOf[from]--; 
        
            balanceOf[to]++;
        }
        
        delete getApproved[tokenId];
        
        ownerOf[tokenId] = to;
        
        emit Transfer(from, to, tokenId); 
    }
    
    function safeTransferFrom(
        address from, 
        address to, 
        uint256 tokenId
    ) public virtual {
        safeTransferFrom(from, to, tokenId, "");
    }
    
    function safeTransferFrom(
        address from, 
        address to, 
        uint256 tokenId, 
        bytes memory data
    ) public virtual {
        transferFrom(from, to, tokenId); 
        
        if (to.code.length > 0) {
            // selector = "onERC721Received(address,address,uint256,bytes)".
            (, bytes memory returned) = to.staticcall(abi.encodeWithSelector(0x150b7a02,
                msg.sender, from, tokenId, data));
                
            bytes4 selector = abi.decode(returned, (bytes4));
            
            require(selector == 0x150b7a02, 'NOT_ERC721_RECEIVER');
        }
    }

    /*///////////////////////////////////////////////////////////////
                            EIP-2612-LIKE LOGIC
    //////////////////////////////////////////////////////////////*/
    
    function permit(
        address spender,
        uint256 tokenId,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(block.timestamp <= deadline, "PERMIT_DEADLINE_EXPIRED");
        
        address owner = ownerOf[tokenId];
        
        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            bytes32 digest = keccak256(
                abi.encodePacked(
                    "\x19\x01",
                    DOMAIN_SEPARATOR(),
                    keccak256(abi.encode(PERMIT_TYPEHASH, spender, tokenId, nonces[tokenId]++, deadline))
                )
            );

            address recoveredAddress = ecrecover(digest, v, r, s);

            require(recoveredAddress != address(0), "INVALID_PERMIT_SIGNATURE");

            require(recoveredAddress == owner || isApprovedForAll[owner][recoveredAddress], "INVALID_SIGNER");
        }
        
        getApproved[tokenId] = spender;

        emit Approval(owner, spender, tokenId);
    }
    
    function permitAll(
        address owner,
        address operator,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public virtual {
        require(block.timestamp <= deadline, "PERMIT_DEADLINE_EXPIRED");
        
        // Unchecked because the only math done is incrementing
        // the owner's nonce which cannot realistically overflow.
        unchecked {
            bytes32 digest = keccak256(
                abi.encodePacked(
                    "\x19\x01",
                    DOMAIN_SEPARATOR(),
                    keccak256(abi.encode(PERMIT_ALL_TYPEHASH, owner, operator, noncesForAll[owner]++, deadline))
                )
            );

            address recoveredAddress = ecrecover(digest, v, r, s);
            
            require(
                (recoveredAddress != address(0) && recoveredAddress == owner) || isApprovedForAll[owner][recoveredAddress],
                'INVALID_PERMIT_SIGNATURE'
            );
        }
        
        isApprovedForAll[owner][operator] = true;

        emit ApprovalForAll(owner, operator, true);
    }

    function DOMAIN_SEPARATOR() public view virtual returns (bytes32 domainSeparator) {
        domainSeparator = block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator();
    }

    function computeDomainSeparator() internal view virtual returns (bytes32 domainSeparator) {
        domainSeparator = keccak256(
            abi.encode(
                keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                block.chainid,
                address(this)
            )
        );
    }

    /*///////////////////////////////////////////////////////////////
                            MINT/BURN LOGIC
    //////////////////////////////////////////////////////////////*/
    
    function _mint(
        address to, 
        uint256 tokenId
    ) internal virtual { 
        require(ownerOf[tokenId] == address(0), "ALREADY_MINTED");
  
        // Cannot realistically overflow from incrementing total supply beyond
        // the max uint256 value, and because the sum of all user balances 
        // can't exceed the max uint256 value.
        unchecked {
            totalSupply++;
            
            balanceOf[to]++;
        }
        
        ownerOf[tokenId] = to;
        
        emit Transfer(address(0), to, tokenId); 
    }
    
    function _burn(uint256 tokenId) internal virtual { 
        address owner = ownerOf[tokenId];
        
        require(ownerOf[tokenId] != address(0), "NOT_MINTED");
        
        // Cannot underflow because a user's balance
        // will never be larger than the total supply.
        unchecked {
            totalSupply--;
        
            balanceOf[owner]--;
        }
        
        delete ownerOf[tokenId];
        
        emit Transfer(owner, address(0), tokenId); 
    }
}

File 4 of 5: Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


File 5 of 5: Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}


Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"initialBaseURI","type":"string"},{"internalType":"address","name":"initialPasswordSigner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidMintParameters","type":"error"},{"inputs":[],"name":"NotAuthorized","type":"error"},{"inputs":[],"name":"NotWhitelisted","type":"error"},{"inputs":[],"name":"SaleClosed","type":"error"},{"inputs":[],"name":"SoldOut","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","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":"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"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"domainSeparator","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_ALL_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropAddresses","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"noncesForAll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permitAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"presale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"purchase","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newGorillaBurner","type":"address"}],"name":"setGorilliaBurner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"signer","type":"address"}],"name":"setPasswordSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"publicSale","type":"bool"}],"name":"setPublicSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"supported","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"recipient","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c06040523480156200001157600080fd5b5060405162003170380380620031708339810160408190526200003491620002de565b604080518082018252600e81526d437962657220476f72696c6c617360901b60208083019182528351808501909452600d84526c4379626572476f72696c6c617360981b9084015281519192916200008f9160009162000205565b508051620000a590600190602084019062000205565b5046608052620000b462000102565b60a05250620000c5905033620001b3565b8151620000da90600c90602085019062000205565b50600a80546001600160a01b0319166001600160a01b039290921691909117905550620004b0565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60006040516200013691906200040c565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b600980546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8280546200021390620003cf565b90600052602060002090601f01602090048101928262000237576000855562000282565b82601f106200025257805160ff191683800117855562000282565b8280016001018555821562000282579182015b828111156200028257825182559160200191906001019062000265565b506200029092915062000294565b5090565b5b8082111562000290576000815560010162000295565b634e487b7160e01b600052604160045260246000fd5b80516001600160a01b0381168114620002d957600080fd5b919050565b60008060408385031215620002f257600080fd5b82516001600160401b03808211156200030a57600080fd5b818501915085601f8301126200031f57600080fd5b815181811115620003345762000334620002ab565b604051601f8201601f19908116603f011681019083821181831017156200035f576200035f620002ab565b816040528281526020935088848487010111156200037c57600080fd5b600091505b82821015620003a0578482018401518183018501529083019062000381565b82821115620003b25760008484830101525b9550620003c4915050858201620002c1565b925050509250929050565b600181811c90821680620003e457607f821691505b602082108114156200040657634e487b7160e01b600052602260045260246000fd5b50919050565b600080835481600182811c9150808316806200042957607f831692505b60208084108214156200044a57634e487b7160e01b86526022600452602486fd5b8180156200046157600181146200047357620004a2565b60ff19861689528489019650620004a2565b60008a81526020902060005b868110156200049a5781548b8201529085019083016200047f565b505084890196505b509498975050505050505050565b60805160a051612c9a620004d66000396000610c9201526000610c5d0152612c9a6000f3fe60806040526004361061026a5760003560e01c80635f56028a1161015357806395d89b41116100cb578063b88d4fde1161007f578063e985e9c511610064578063e985e9c51461071a578063efef39a114610755578063f2fde38b1461076857600080fd5b8063b88d4fde146106da578063c87b56dd146106fa57600080fd5b8063a9059cbb116100b0578063a9059cbb14610666578063aba0784714610686578063b4e13c8d146106a657600080fd5b806395d89b4114610631578063a22cb4651461064657600080fd5b8063715018a6116101225780637ac2ff7b116101075780637ac2ff7b146105c65780638da5cb5b146105e6578063904dfb8e1461060457600080fd5b8063715018a614610591578063729ad39e146105a657600080fd5b80635f56028a146105065780636352211e146105195780636c0360eb1461054f57806370a082311461056457600080fd5b806332cb6b0c116101e65780634bf9698d116101b557806355f804b31161019a57806355f804b3146104a657806359ce053b146104c65780635aca1bb6146104e657600080fd5b80634bf9698d1461046657806351cff8d91461048657600080fd5b806332cb6b0c146103fb5780633644e5151461041157806342842e0e1461042657806342966c681461044657600080fd5b8063141a468c1161023d5780631f0a8fa7116102225780631f0a8fa71461038757806323b872dd146103a757806330adf81f146103c757600080fd5b8063141a468c1461033657806318160ddd1461037157600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063081812fc146102c6578063095ea7b314610314575b600080fd5b34801561027b57600080fd5b5061028f61028a36600461244b565b610788565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b961086d565b60405161029b91906124c7565b3480156102d257600080fd5b506102fc6102e13660046124da565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b34801561032057600080fd5b5061033461032f366004612508565b6108fb565b005b34801561034257600080fd5b506103636103513660046124da565b60076020526000908152604090205481565b60405190815260200161029b565b34801561037d57600080fd5b5061036360025481565b34801561039357600080fd5b5061028f6103a23660046125f9565b610a09565b3480156103b357600080fd5b506103346103c2366004612649565b610aa2565b3480156103d357600080fd5b506103637f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b34801561040757600080fd5b50610363610d0581565b34801561041d57600080fd5b50610363610c59565b34801561043257600080fd5b50610334610441366004612649565b610cb4565b34801561045257600080fd5b506103346104613660046124da565b610cd4565b34801561047257600080fd5b5061033461048136600461268a565b610d24565b34801561049257600080fd5b506103346104a136600461268a565b610db8565b3480156104b257600080fd5b506103346104c13660046126a7565b610e4b565b3480156104d257600080fd5b506103346104e136600461268a565b610eb8565b3480156104f257600080fd5b50610334610501366004612705565b610f4c565b610334610514366004612720565b610ff0565b34801561052557600080fd5b506102fc6105343660046124da565b6004602052600090815260409020546001600160a01b031681565b34801561055b57600080fd5b506102b961118d565b34801561057057600080fd5b5061036361057f36600461268a565b60036020526000908152604090205481565b34801561059d57600080fd5b5061033461119a565b3480156105b257600080fd5b506103346105c1366004612751565b611200565b3480156105d257600080fd5b506103346105e13660046127d7565b6112a9565b3480156105f257600080fd5b506009546001600160a01b03166102fc565b34801561061057600080fd5b5061036361061f36600461268a565b60086020526000908152604090205481565b34801561063d57600080fd5b506102b96115b0565b34801561065257600080fd5b50610334610661366004612831565b6115bd565b34801561067257600080fd5b5061028f610681366004612508565b611647565b34801561069257600080fd5b506103346106a1366004612866565b611754565b3480156106b257600080fd5b506103637fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df6281565b3480156106e657600080fd5b506103346106f53660046128af565b611a1a565b34801561070657600080fd5b506102b96107153660046124da565b611ba1565b34801561072657600080fd5b5061028f61073536600461291b565b600660209081526000928352604080842090915290825290205460ff1681565b6103346107633660046124da565b611bff565b34801561077457600080fd5b5061033461078336600461268a565b611d5b565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061081b57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061086757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000805461087a90612954565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690612954565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b505050505081565b6000818152600460205260409020546001600160a01b03163381148061094457506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b6109955760405162461bcd60e51b815260206004820152600c60248201527f4e4f545f415050524f564544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b604080516001600160a01b0384811660208084019190915283518084038201815283850185528051908201207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006060850152607c80850182905285518086039091018152609c9094019094528251920191909120600a546000939216610a8f8286611e3a565b6001600160a01b03161495945050505050565b6000818152600460205260409020546001600160a01b03848116911614610b0b5760405162461bcd60e51b815260206004820152600960248201527f4e4f545f4f574e45520000000000000000000000000000000000000000000000604482015260640161098c565b336001600160a01b0384161480610b3857506000818152600560205260409020546001600160a01b031633145b80610b6657506001600160a01b038316600090815260066020908152604080832033845290915290205460ff165b610bb25760405162461bcd60e51b815260206004820152600c60248201527f4e4f545f415050524f5645440000000000000000000000000000000000000000604482015260640161098c565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526005825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556004909252848320805490921681179091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614610c8f57610c8a611eb9565b905090565b507f000000000000000000000000000000000000000000000000000000000000000090565b610ccf83838360405180602001604052806000815250611a1a565b505050565b600b546001600160a01b03163314610d18576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2181611f84565b50565b6009546001600160a01b03163314610d7e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6009546001600160a01b03163314610e125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610e47573d6000803e3d6000fd5b5050565b6009546001600160a01b03163314610ea55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b8051610e4790600c906020840190612384565b6009546001600160a01b03163314610f125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6009546001600160a01b03163314610fa65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b600b805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600b5474010000000000000000000000000000000000000000900460ff1615611045576040517f4c013bd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d058260025461105691906129d7565b111561108e576040517f52df9fe500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110983382610a09565b6110ce576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600d60205260409020546002906110ec9084906129d7565b118061110857506111058267011c37937e0800006129ef565b34105b1561113f576040517f9de707f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600d60205260408120805484929061115e9084906129d7565b90915550600090505b82811015610ccf5761117b33600254612078565b8061118581612a0e565b915050611167565b600c805461087a90612954565b6009546001600160a01b031633146111f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b6111fe600061216c565b565b6009546001600160a01b0316331461125a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b60005b81811015610ccf5761129783838381811061127a5761127a612a29565b905060200201602081019061128f919061268a565b600254612078565b806112a181612a0e565b91505061125d565b834211156112f95760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161098c565b6000858152600460205260408120546001600160a01b03169061131a610c59565b60008881526007602090815260409182902080546001810190915582517f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad818401526001600160a01b038d1681850152606081018c9052608081019190915260a08082018b90528351808303909101815260c08201909352825192909101919091207f190100000000000000000000000000000000000000000000000000000000000060e083015260e28201929092526101028101919091526101220160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611442573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114a55760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e41545552450000000000000000604482015260640161098c565b826001600160a01b0316816001600160a01b031614806114ea57506001600160a01b0380841660009081526006602090815260408083209385168352929052205460ff165b6115365760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e4552000000000000000000000000000000000000604482015260640161098c565b505060008681526005602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038b811691821790925591518993918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050505050565b6001805461087a90612954565b3360008181526006602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600460205260408120546001600160a01b031633146116ad5760405162461bcd60e51b815260206004820152600960248201527f4e4f545f4f574e45520000000000000000000000000000000000000000000000604482015260640161098c565b33600081815260036020908152604080832080546000190190556001600160a01b038716808452818420805460010190558684526005835281842080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560049093528184208054909316811790925551859391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450600192915050565b834211156117a45760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161098c565b60006117ae610c59565b6001600160a01b0388811660008181526008602090815260409182902080546001810190915582517fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df628184015280840194909452938b166060840152608083019390935260a08083018a90528151808403909101815260c0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000060e083015260e28201929092526101028101919091526101220160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156118d9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061190f5750876001600160a01b0316816001600160a01b0316145b8061193f57506001600160a01b0380891660009081526006602090815260408083209385168352929052205460ff165b61198b5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e41545552450000000000000000604482015260640161098c565b50506001600160a01b038681166000818152600660209081526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050505050565b611a25848484610aa2565b6001600160a01b0383163b15611b9b576000836001600160a01b031663150b7a0233878686604051602401611a5d9493929190612a58565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611aab9190612a94565b600060405180830381855afa9150503d8060008114611ae6576040519150601f19603f3d011682016040523d82523d6000602084013e611aeb565b606091505b50915050600081806020019051810190611b059190612ab0565b90507f150b7a02000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614611b985760405162461bcd60e51b815260206004820152601360248201527f4e4f545f4552433732315f524543454956455200000000000000000000000000604482015260640161098c565b50505b50505050565b60606000600c8054611bb290612954565b905011611bce5760405180602001604052806000815250610867565b600c611bd9836121d6565b604051602001611bea929190612b9d565b60405160208183030381529060405292915050565b600b5474010000000000000000000000000000000000000000900460ff16611c53576040517f4c013bd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0581600254611c6491906129d7565b1115611c9c576040517f52df9fe500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600e6020526040902054600590611cba9083906129d7565b1180611cd65750611cd38167011c37937e0800006129ef565b34105b15611d0d576040517f9de707f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600e602052604081208054839290611d2c9084906129d7565b90915550600090505b81811015610e4757611d4933600254612078565b80611d5381612a0e565b915050611d35565b6009546001600160a01b03163314611db55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b6001600160a01b038116611e315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161098c565b610d218161216c565b600080600080611e4985612310565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611ea4573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051611eeb9190612bea565b604080519182900382208282018252600183527f31000000000000000000000000000000000000000000000000000000000000006020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000818152600460205260409020546001600160a01b031680611fe95760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e54454400000000000000000000000000000000000000000000604482015260640161098c565b600280546000199081019091556001600160a01b038216600081815260036020908152604080832080549095019094558582526004905282812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559151849291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000818152600460205260409020546001600160a01b0316156120dd5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e544544000000000000000000000000000000000000604482015260640161098c565b6002805460019081019091556001600160a01b038316600081815260036020908152604080832080549095019094558482526004905282812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168317905591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600980546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60608161221657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612240578061222a81612a0e565b91506122399050600a83612c25565b915061221a565b60008167ffffffffffffffff81111561225b5761225b612534565b6040519080825280601f01601f191660200182016040528015612285576020820181803683370190505b5090505b84156123085761229a600183612c39565b91506122a7600a86612c50565b6122b29060306129d7565b60f81b8183815181106122c7576122c7612a29565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612301600a86612c25565b9450612289565b949350505050565b600080600083516041146123665760405162461bcd60e51b815260206004820152600b60248201527f73696720696e76616c6964000000000000000000000000000000000000000000604482015260640161098c565b50505060208101516040820151606090920151909260009190911a90565b82805461239090612954565b90600052602060002090601f0160209004810192826123b257600085556123f8565b82601f106123cb57805160ff19168380011785556123f8565b828001600101855582156123f8579182015b828111156123f85782518255916020019190600101906123dd565b50612404929150612408565b5090565b5b808211156124045760008155600101612409565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610d2157600080fd5b60006020828403121561245d57600080fd5b81356124688161241d565b9392505050565b60005b8381101561248a578181015183820152602001612472565b83811115611b9b5750506000910152565b600081518084526124b381602086016020860161246f565b601f01601f19169290920160200192915050565b602081526000612468602083018461249b565b6000602082840312156124ec57600080fd5b5035919050565b6001600160a01b0381168114610d2157600080fd5b6000806040838503121561251b57600080fd5b8235612526816124f3565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561257e5761257e612534565b604051601f8501601f19908116603f011681019082821181831017156125a6576125a6612534565b816040528093508581528686860111156125bf57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126125ea57600080fd5b61246883833560208501612563565b6000806040838503121561260c57600080fd5b8235612617816124f3565b9150602083013567ffffffffffffffff81111561263357600080fd5b61263f858286016125d9565b9150509250929050565b60008060006060848603121561265e57600080fd5b8335612669816124f3565b92506020840135612679816124f3565b929592945050506040919091013590565b60006020828403121561269c57600080fd5b8135612468816124f3565b6000602082840312156126b957600080fd5b813567ffffffffffffffff8111156126d057600080fd5b8201601f810184136126e157600080fd5b61230884823560208401612563565b8035801515811461270057600080fd5b919050565b60006020828403121561271757600080fd5b612468826126f0565b6000806040838503121561273357600080fd5b82359150602083013567ffffffffffffffff81111561263357600080fd5b6000806020838503121561276457600080fd5b823567ffffffffffffffff8082111561277c57600080fd5b818501915085601f83011261279057600080fd5b81358181111561279f57600080fd5b8660208260051b85010111156127b457600080fd5b60209290920196919550909350505050565b803560ff8116811461270057600080fd5b60008060008060008060c087890312156127f057600080fd5b86356127fb816124f3565b95506020870135945060408701359350612817606088016127c6565b92506080870135915060a087013590509295509295509295565b6000806040838503121561284457600080fd5b823561284f816124f3565b915061285d602084016126f0565b90509250929050565b60008060008060008060c0878903121561287f57600080fd5b863561288a816124f3565b9550602087013561289a816124f3565b945060408701359350612817606088016127c6565b600080600080608085870312156128c557600080fd5b84356128d0816124f3565b935060208501356128e0816124f3565b925060408501359150606085013567ffffffffffffffff81111561290357600080fd5b61290f878288016125d9565b91505092959194509250565b6000806040838503121561292e57600080fd5b8235612939816124f3565b91506020830135612949816124f3565b809150509250929050565b600181811c9082168061296857607f821691505b602082108114156129a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156129ea576129ea6129a8565b500190565b6000816000190483118215151615612a0957612a096129a8565b500290565b6000600019821415612a2257612a226129a8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152612a8a608083018461249b565b9695505050505050565b60008251612aa681846020870161246f565b9190910192915050565b600060208284031215612ac257600080fd5b81516124688161241d565b8054600090600181811c9080831680612ae757607f831692505b6020808410821415612b22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b818015612b365760018114612b6557612b91565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650612b91565b876000528160002060005b86811015612b895781548b820152908501908301612b70565b505084890196505b50505050505092915050565b6000612ba98285612acd565b8351612bb981836020880161246f565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b60006124688284612acd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612c3457612c34612bf6565b500490565b600082821015612c4b57612c4b6129a8565b500390565b600082612c5f57612c5f612bf6565b50069056fea2646970667358221220382f040b57776380420226944db8b820bd35b990eb5494237d6c07c955d788ac64736f6c634300080a00330000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a38a30eeaf0b1a353cb151e9522fb8d65e619a310000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a6d59486f715241413466576555626441707a7470616f34425952684a625a6a794b4d47574668554532634b2f00000000000000000000

Deployed Bytecode

0x60806040526004361061026a5760003560e01c80635f56028a1161015357806395d89b41116100cb578063b88d4fde1161007f578063e985e9c511610064578063e985e9c51461071a578063efef39a114610755578063f2fde38b1461076857600080fd5b8063b88d4fde146106da578063c87b56dd146106fa57600080fd5b8063a9059cbb116100b0578063a9059cbb14610666578063aba0784714610686578063b4e13c8d146106a657600080fd5b806395d89b4114610631578063a22cb4651461064657600080fd5b8063715018a6116101225780637ac2ff7b116101075780637ac2ff7b146105c65780638da5cb5b146105e6578063904dfb8e1461060457600080fd5b8063715018a614610591578063729ad39e146105a657600080fd5b80635f56028a146105065780636352211e146105195780636c0360eb1461054f57806370a082311461056457600080fd5b806332cb6b0c116101e65780634bf9698d116101b557806355f804b31161019a57806355f804b3146104a657806359ce053b146104c65780635aca1bb6146104e657600080fd5b80634bf9698d1461046657806351cff8d91461048657600080fd5b806332cb6b0c146103fb5780633644e5151461041157806342842e0e1461042657806342966c681461044657600080fd5b8063141a468c1161023d5780631f0a8fa7116102225780631f0a8fa71461038757806323b872dd146103a757806330adf81f146103c757600080fd5b8063141a468c1461033657806318160ddd1461037157600080fd5b806301ffc9a71461026f57806306fdde03146102a4578063081812fc146102c6578063095ea7b314610314575b600080fd5b34801561027b57600080fd5b5061028f61028a36600461244b565b610788565b60405190151581526020015b60405180910390f35b3480156102b057600080fd5b506102b961086d565b60405161029b91906124c7565b3480156102d257600080fd5b506102fc6102e13660046124da565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161029b565b34801561032057600080fd5b5061033461032f366004612508565b6108fb565b005b34801561034257600080fd5b506103636103513660046124da565b60076020526000908152604090205481565b60405190815260200161029b565b34801561037d57600080fd5b5061036360025481565b34801561039357600080fd5b5061028f6103a23660046125f9565b610a09565b3480156103b357600080fd5b506103346103c2366004612649565b610aa2565b3480156103d357600080fd5b506103637f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad81565b34801561040757600080fd5b50610363610d0581565b34801561041d57600080fd5b50610363610c59565b34801561043257600080fd5b50610334610441366004612649565b610cb4565b34801561045257600080fd5b506103346104613660046124da565b610cd4565b34801561047257600080fd5b5061033461048136600461268a565b610d24565b34801561049257600080fd5b506103346104a136600461268a565b610db8565b3480156104b257600080fd5b506103346104c13660046126a7565b610e4b565b3480156104d257600080fd5b506103346104e136600461268a565b610eb8565b3480156104f257600080fd5b50610334610501366004612705565b610f4c565b610334610514366004612720565b610ff0565b34801561052557600080fd5b506102fc6105343660046124da565b6004602052600090815260409020546001600160a01b031681565b34801561055b57600080fd5b506102b961118d565b34801561057057600080fd5b5061036361057f36600461268a565b60036020526000908152604090205481565b34801561059d57600080fd5b5061033461119a565b3480156105b257600080fd5b506103346105c1366004612751565b611200565b3480156105d257600080fd5b506103346105e13660046127d7565b6112a9565b3480156105f257600080fd5b506009546001600160a01b03166102fc565b34801561061057600080fd5b5061036361061f36600461268a565b60086020526000908152604090205481565b34801561063d57600080fd5b506102b96115b0565b34801561065257600080fd5b50610334610661366004612831565b6115bd565b34801561067257600080fd5b5061028f610681366004612508565b611647565b34801561069257600080fd5b506103346106a1366004612866565b611754565b3480156106b257600080fd5b506103637fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df6281565b3480156106e657600080fd5b506103346106f53660046128af565b611a1a565b34801561070657600080fd5b506102b96107153660046124da565b611ba1565b34801561072657600080fd5b5061028f61073536600461291b565b600660209081526000928352604080842090915290825290205460ff1681565b6103346107633660046124da565b611bff565b34801561077457600080fd5b5061033461078336600461268a565b611d5b565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316148061081b57507f5b5e139f000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b8061086757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000805461087a90612954565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690612954565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b505050505081565b6000818152600460205260409020546001600160a01b03163381148061094457506001600160a01b038116600090815260066020908152604080832033845290915290205460ff165b6109955760405162461bcd60e51b815260206004820152600c60248201527f4e4f545f415050524f564544000000000000000000000000000000000000000060448201526064015b60405180910390fd5b60008281526005602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b604080516001600160a01b0384811660208084019190915283518084038201815283850185528051908201207f19457468657265756d205369676e6564204d6573736167653a0a3332000000006060850152607c80850182905285518086039091018152609c9094019094528251920191909120600a546000939216610a8f8286611e3a565b6001600160a01b03161495945050505050565b6000818152600460205260409020546001600160a01b03848116911614610b0b5760405162461bcd60e51b815260206004820152600960248201527f4e4f545f4f574e45520000000000000000000000000000000000000000000000604482015260640161098c565b336001600160a01b0384161480610b3857506000818152600560205260409020546001600160a01b031633145b80610b6657506001600160a01b038316600090815260066020908152604080832033845290915290205460ff165b610bb25760405162461bcd60e51b815260206004820152600c60248201527f4e4f545f415050524f5645440000000000000000000000000000000000000000604482015260640161098c565b6001600160a01b0380841660008181526003602090815260408083208054600019019055938616808352848320805460010190558583526005825284832080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081169091556004909252848320805490921681179091559251849392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614610c8f57610c8a611eb9565b905090565b507f0d5b3a149d4092b8a5daaeac6b020c822a01d755dfc4f374519bba4be44da80690565b610ccf83838360405180602001604052806000815250611a1a565b505050565b600b546001600160a01b03163314610d18576040517fea8e4eb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d2181611f84565b50565b6009546001600160a01b03163314610d7e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6009546001600160a01b03163314610e125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b6040516001600160a01b038216904780156108fc02916000818181858888f19350505050158015610e47573d6000803e3d6000fd5b5050565b6009546001600160a01b03163314610ea55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b8051610e4790600c906020840190612384565b6009546001600160a01b03163314610f125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6009546001600160a01b03163314610fa65760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b600b805491151574010000000000000000000000000000000000000000027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff909216919091179055565b600b5474010000000000000000000000000000000000000000900460ff1615611045576040517f4c013bd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d058260025461105691906129d7565b111561108e576040517f52df9fe500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110983382610a09565b6110ce576040517f584a793800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600d60205260409020546002906110ec9084906129d7565b118061110857506111058267011c37937e0800006129ef565b34105b1561113f576040517f9de707f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600d60205260408120805484929061115e9084906129d7565b90915550600090505b82811015610ccf5761117b33600254612078565b8061118581612a0e565b915050611167565b600c805461087a90612954565b6009546001600160a01b031633146111f45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b6111fe600061216c565b565b6009546001600160a01b0316331461125a5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b60005b81811015610ccf5761129783838381811061127a5761127a612a29565b905060200201602081019061128f919061268a565b600254612078565b806112a181612a0e565b91505061125d565b834211156112f95760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161098c565b6000858152600460205260408120546001600160a01b03169061131a610c59565b60008881526007602090815260409182902080546001810190915582517f49ecf333e5b8c95c40fdafc95c1ad136e8914a8fb55e9dc8bb01eaa83a2df9ad818401526001600160a01b038d1681850152606081018c9052608081019190915260a08082018b90528351808303909101815260c08201909352825192909101919091207f190100000000000000000000000000000000000000000000000000000000000060e083015260e28201929092526101028101919091526101220160408051601f198184030181528282528051602091820120600080855291840180845281905260ff89169284019290925260608301879052608083018690529092509060019060a0016020604051602081039080840390855afa158015611442573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166114a55760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e41545552450000000000000000604482015260640161098c565b826001600160a01b0316816001600160a01b031614806114ea57506001600160a01b0380841660009081526006602090815260408083209385168352929052205460ff165b6115365760405162461bcd60e51b815260206004820152600e60248201527f494e56414c49445f5349474e4552000000000000000000000000000000000000604482015260640161098c565b505060008681526005602052604080822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b038b811691821790925591518993918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a450505050505050565b6001805461087a90612954565b3360008181526006602090815260408083206001600160a01b0387168085529083529281902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6000818152600460205260408120546001600160a01b031633146116ad5760405162461bcd60e51b815260206004820152600960248201527f4e4f545f4f574e45520000000000000000000000000000000000000000000000604482015260640161098c565b33600081815260036020908152604080832080546000190190556001600160a01b038716808452818420805460010190558684526005835281842080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915560049093528184208054909316811790925551859391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a450600192915050565b834211156117a45760405162461bcd60e51b815260206004820152601760248201527f5045524d49545f444541444c494e455f45585049524544000000000000000000604482015260640161098c565b60006117ae610c59565b6001600160a01b0388811660008181526008602090815260409182902080546001810190915582517fdaab21af31ece73a508939fedd476a5ee5129a5ed4bb091f3236ffb45394df628184015280840194909452938b166060840152608083019390935260a08083018a90528151808403909101815260c0830190915280519201919091207f190100000000000000000000000000000000000000000000000000000000000060e083015260e28201929092526101028101919091526101220160408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156118d9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061190f5750876001600160a01b0316816001600160a01b0316145b8061193f57506001600160a01b0380891660009081526006602090815260408083209385168352929052205460ff165b61198b5760405162461bcd60e51b815260206004820152601860248201527f494e56414c49445f5045524d49545f5349474e41545552450000000000000000604482015260640161098c565b50506001600160a01b038681166000818152600660209081526040808320948a168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600190811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050505050565b611a25848484610aa2565b6001600160a01b0383163b15611b9b576000836001600160a01b031663150b7a0233878686604051602401611a5d9493929190612a58565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051611aab9190612a94565b600060405180830381855afa9150503d8060008114611ae6576040519150601f19603f3d011682016040523d82523d6000602084013e611aeb565b606091505b50915050600081806020019051810190611b059190612ab0565b90507f150b7a02000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000821614611b985760405162461bcd60e51b815260206004820152601360248201527f4e4f545f4552433732315f524543454956455200000000000000000000000000604482015260640161098c565b50505b50505050565b60606000600c8054611bb290612954565b905011611bce5760405180602001604052806000815250610867565b600c611bd9836121d6565b604051602001611bea929190612b9d565b60405160208183030381529060405292915050565b600b5474010000000000000000000000000000000000000000900460ff16611c53576040517f4c013bd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0581600254611c6491906129d7565b1115611c9c576040517f52df9fe500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600e6020526040902054600590611cba9083906129d7565b1180611cd65750611cd38167011c37937e0800006129ef565b34105b15611d0d576040517f9de707f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600e602052604081208054839290611d2c9084906129d7565b90915550600090505b81811015610e4757611d4933600254612078565b80611d5381612a0e565b915050611d35565b6009546001600160a01b03163314611db55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161098c565b6001600160a01b038116611e315760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161098c565b610d218161216c565b600080600080611e4985612310565b6040805160008152602081018083528b905260ff8316918101919091526060810184905260808101839052929550909350915060019060a0016020604051602081039080840390855afa158015611ea4573d6000803e3d6000fd5b5050604051601f190151979650505050505050565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6000604051611eeb9190612bea565b604080519182900382208282018252600183527f31000000000000000000000000000000000000000000000000000000000000006020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b6000818152600460205260409020546001600160a01b031680611fe95760405162461bcd60e51b815260206004820152600a60248201527f4e4f545f4d494e54454400000000000000000000000000000000000000000000604482015260640161098c565b600280546000199081019091556001600160a01b038216600081815260036020908152604080832080549095019094558582526004905282812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690559151849291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6000818152600460205260409020546001600160a01b0316156120dd5760405162461bcd60e51b815260206004820152600e60248201527f414c52454144595f4d494e544544000000000000000000000000000000000000604482015260640161098c565b6002805460019081019091556001600160a01b038316600081815260036020908152604080832080549095019094558482526004905282812080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168317905591518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600980546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60608161221657505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115612240578061222a81612a0e565b91506122399050600a83612c25565b915061221a565b60008167ffffffffffffffff81111561225b5761225b612534565b6040519080825280601f01601f191660200182016040528015612285576020820181803683370190505b5090505b84156123085761229a600183612c39565b91506122a7600a86612c50565b6122b29060306129d7565b60f81b8183815181106122c7576122c7612a29565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612301600a86612c25565b9450612289565b949350505050565b600080600083516041146123665760405162461bcd60e51b815260206004820152600b60248201527f73696720696e76616c6964000000000000000000000000000000000000000000604482015260640161098c565b50505060208101516040820151606090920151909260009190911a90565b82805461239090612954565b90600052602060002090601f0160209004810192826123b257600085556123f8565b82601f106123cb57805160ff19168380011785556123f8565b828001600101855582156123f8579182015b828111156123f85782518255916020019190600101906123dd565b50612404929150612408565b5090565b5b808211156124045760008155600101612409565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114610d2157600080fd5b60006020828403121561245d57600080fd5b81356124688161241d565b9392505050565b60005b8381101561248a578181015183820152602001612472565b83811115611b9b5750506000910152565b600081518084526124b381602086016020860161246f565b601f01601f19169290920160200192915050565b602081526000612468602083018461249b565b6000602082840312156124ec57600080fd5b5035919050565b6001600160a01b0381168114610d2157600080fd5b6000806040838503121561251b57600080fd5b8235612526816124f3565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600067ffffffffffffffff8084111561257e5761257e612534565b604051601f8501601f19908116603f011681019082821181831017156125a6576125a6612534565b816040528093508581528686860111156125bf57600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126125ea57600080fd5b61246883833560208501612563565b6000806040838503121561260c57600080fd5b8235612617816124f3565b9150602083013567ffffffffffffffff81111561263357600080fd5b61263f858286016125d9565b9150509250929050565b60008060006060848603121561265e57600080fd5b8335612669816124f3565b92506020840135612679816124f3565b929592945050506040919091013590565b60006020828403121561269c57600080fd5b8135612468816124f3565b6000602082840312156126b957600080fd5b813567ffffffffffffffff8111156126d057600080fd5b8201601f810184136126e157600080fd5b61230884823560208401612563565b8035801515811461270057600080fd5b919050565b60006020828403121561271757600080fd5b612468826126f0565b6000806040838503121561273357600080fd5b82359150602083013567ffffffffffffffff81111561263357600080fd5b6000806020838503121561276457600080fd5b823567ffffffffffffffff8082111561277c57600080fd5b818501915085601f83011261279057600080fd5b81358181111561279f57600080fd5b8660208260051b85010111156127b457600080fd5b60209290920196919550909350505050565b803560ff8116811461270057600080fd5b60008060008060008060c087890312156127f057600080fd5b86356127fb816124f3565b95506020870135945060408701359350612817606088016127c6565b92506080870135915060a087013590509295509295509295565b6000806040838503121561284457600080fd5b823561284f816124f3565b915061285d602084016126f0565b90509250929050565b60008060008060008060c0878903121561287f57600080fd5b863561288a816124f3565b9550602087013561289a816124f3565b945060408701359350612817606088016127c6565b600080600080608085870312156128c557600080fd5b84356128d0816124f3565b935060208501356128e0816124f3565b925060408501359150606085013567ffffffffffffffff81111561290357600080fd5b61290f878288016125d9565b91505092959194509250565b6000806040838503121561292e57600080fd5b8235612939816124f3565b91506020830135612949816124f3565b809150509250929050565b600181811c9082168061296857607f821691505b602082108114156129a2577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082198211156129ea576129ea6129a8565b500190565b6000816000190483118215151615612a0957612a096129a8565b500290565b6000600019821415612a2257612a226129a8565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152612a8a608083018461249b565b9695505050505050565b60008251612aa681846020870161246f565b9190910192915050565b600060208284031215612ac257600080fd5b81516124688161241d565b8054600090600181811c9080831680612ae757607f831692505b6020808410821415612b22577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b818015612b365760018114612b6557612b91565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00861689528489019650612b91565b876000528160002060005b86811015612b895781548b820152908501908301612b70565b505084890196505b50505050505092915050565b6000612ba98285612acd565b8351612bb981836020880161246f565b7f2e6a736f6e0000000000000000000000000000000000000000000000000000009101908152600501949350505050565b60006124688284612acd565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082612c3457612c34612bf6565b500490565b600082821015612c4b57612c4b6129a8565b500390565b600082612c5f57612c5f612bf6565b50069056fea2646970667358221220382f040b57776380420226944db8b820bd35b990eb5494237d6c07c955d788ac64736f6c634300080a0033

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

0000000000000000000000000000000000000000000000000000000000000040000000000000000000000000a38a30eeaf0b1a353cb151e9522fb8d65e619a310000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d5a6d59486f715241413466576555626441707a7470616f34425952684a625a6a794b4d47574668554532634b2f00000000000000000000

-----Decoded View---------------
Arg [0] : initialBaseURI (string): ipfs://QmZmYHoqRAA4fWeUbdApztpao4BYRhJbZjyKMGWFhUE2cK/
Arg [1] : initialPasswordSigner (address): 0xA38a30eeAf0B1a353Cb151E9522fB8d65E619A31

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 000000000000000000000000a38a30eeaf0b1a353cb151e9522fb8d65e619a31
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d5a6d59486f715241413466576555626441707a7470616f
Arg [4] : 34425952684a625a6a794b4d47574668554532634b2f00000000000000000000


Deployed Bytecode Sourcemap

700:4803:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3557:204:2;;;;;;;;;;-1:-1:-1;3557:204:2;;;;;:::i;:::-;;:::i;:::-;;;611:14:5;;604:22;586:41;;574:2;559:18;3557:204:2;;;;;;;;954:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1331:46::-;;;;;;;;;;-1:-1:-1;1331:46:2;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1331:46:2;;;;;;-1:-1:-1;;;;;1797:55:5;;;1779:74;;1767:2;1752:18;1331:46:2;1633:226:5;3771:324:2;;;;;;;;;;-1:-1:-1;3771:324:2;;;;;:::i;:::-;;:::i;:::-;;2048:41;;;;;;;;;;-1:-1:-1;2048:41:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;;2489:25:5;;;2477:2;2462:18;2048:41:2;2343:177:5;1194:26:2;;;;;;;;;;;;;;;;3414:313:1;;;;;;;;;;-1:-1:-1;3414:313:1;;;;;:::i;:::-;;:::i;4326:777:2:-;;;;;;;;;;-1:-1:-1;4326:777:2;;;;;:::i;:::-;;:::i;1653:133::-;;;;;;;;;;;;1703:83;1653:133;;960:41:1;;;;;;;;;;;;997:4;960:41;;8352:204:2;;;;;;;;;;;;;:::i;5113:172::-;;;;;;;;;;-1:-1:-1;5113:172:2;;;;;:::i;:::-;;:::i;5371:130:1:-;;;;;;;;;;-1:-1:-1;5371:130:1;;;;;:::i;:::-;;:::i;1853:100::-;;;;;;;;;;-1:-1:-1;1853:100:1;;;;;:::i;:::-;;:::i;3090:122::-;;;;;;;;;;-1:-1:-1;3090:122:1;;;;;:::i;:::-;;:::i;1747:100::-;;;;;;;;;;-1:-1:-1;1747:100:1;;;;;:::i;:::-;;:::i;1622:119::-;;;;;;;;;;-1:-1:-1;1622:119:1;;;;;:::i;:::-;;:::i;1959:103::-;;;;;;;;;;-1:-1:-1;1959:103:1;;;;;:::i;:::-;;:::i;2531:553::-;;;;;;:::i;:::-;;:::i;1282:42:2:-;;;;;;;;;;-1:-1:-1;1282:42:2;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1282:42:2;;;1049:21:1;;;;;;;;;;;;;:::i;1231:44:2:-;;;;;;;;;;-1:-1:-1;1231:44:2;;;;;:::i;:::-;;;;;;;;;;;;;;1661:101:3;;;;;;;;;;;;;:::i;1412:204:1:-;;;;;;;;;;-1:-1:-1;1412:204:1;;;;;:::i;:::-;;:::i;6116:1113:2:-;;;;;;;;;;-1:-1:-1;6116:1113:2;;;;;:::i;:::-;;:::i;1029:85:3:-;;;;;;;;;;-1:-1:-1;1101:6:3;;-1:-1:-1;;;;;1101:6:3;1029:85;;2096:47:2;;;;;;;;;;-1:-1:-1;2096:47:2;;;;;:::i;:::-;;;;;;;;;;;;;;979:20;;;;;;;;;;;;;:::i;4105:211::-;;;;;;;;;;-1:-1:-1;4105:211:2;;;;;:::i;:::-;;:::i;2753:616::-;;;;;;;;;;-1:-1:-1;2753:616:2;;;;;:::i;:::-;;:::i;7239:1107::-;;;;;;;;;;-1:-1:-1;7239:1107:2;;;;;:::i;:::-;;:::i;1793:136::-;;;;;;;;;;;;1848:81;1793:136;;5295:623;;;;;;;;;;-1:-1:-1;5295:623:2;;;;;:::i;:::-;;:::i;3218:190:1:-;;;;;;;;;;-1:-1:-1;3218:190:1;;;;;:::i;:::-;;:::i;1384:68:2:-;;;;;;;;;;-1:-1:-1;1384:68:2;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;2068:457:1;;;;;;:::i;:::-;;:::i;1911:198:3:-;;;;;;;;;;-1:-1:-1;1911:198:3;;;;;:::i;:::-;;:::i;3557:204:2:-;3633:14;3671:25;;;;;;:54;;-1:-1:-1;3700:25:2;;;;;3671:54;:83;;;-1:-1:-1;3729:25:2;;;;;3671:83;3659:95;3557:204;-1:-1:-1;;3557:204:2:o;954:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3771:324::-;3847:13;3863:16;;;:7;:16;;;;;;-1:-1:-1;;;;;3863:16:2;3906:10;:19;;;:58;;-1:-1:-1;;;;;;3929:23:2;;;;;;:16;:23;;;;;;;;3953:10;3929:35;;;;;;;;;;3906:58;3898:83;;;;-1:-1:-1;;;3898:83:2;;10522:2:5;3898:83:2;;;10504:21:5;10561:2;10541:18;;;10534:30;10600:14;10580:18;;;10573:42;10632:18;;3898:83:2;;;;;;;;;4000:20;;;;:11;:20;;;;;;:30;;;;-1:-1:-1;;;;;4000:30:2;;;;;;;;;4054:33;;4000:20;;4054:33;;;;;;;3837:258;3771:324;;:::o;3414:313:1:-;3544:16;;;-1:-1:-1;;;;;1797:55:5;;;3544:16:1;;;;1779:74:5;;;;3544:16:1;;;;;;;;;1752:18:5;;;3544:16:1;;3534:27;;;;;;18964:66:5;4031::1;;;18952:79:5;19047:12;;;;19040:28;;;4031:66:1;;;;;;;;;;19084:12:5;;;;4031:66:1;;;4008:99;;;;;;;;3706:14;;-1:-1:-1;;3534:27:1;3706:14;3656:46;4008:99;3692:9;3656:13;:46::i;:::-;-1:-1:-1;;;;;3656:64:1;;;3414:313;-1:-1:-1;;;;;3414:313:1:o;4326:777:2:-;4464:16;;;;:7;:16;;;;;;-1:-1:-1;;;;;4456:24:2;;;4464:16;;4456:24;4448:46;;;;-1:-1:-1;;;4448:46:2;;10863:2:5;4448:46:2;;;10845:21:5;10902:1;10882:18;;;10875:29;10940:11;10920:18;;;10913:39;10969:18;;4448:46:2;10661:332:5;4448:46:2;4534:10;-1:-1:-1;;;;;4534:18:2;;;;:69;;-1:-1:-1;4583:20:2;;;;:11;:20;;;;;;-1:-1:-1;;;;;4583:20:2;4569:10;:34;4534:69;:119;;;-1:-1:-1;;;;;;4619:22:2;;;;;;:16;:22;;;;;;;;4642:10;4619:34;;;;;;;;;;4534:119;4513:179;;;;-1:-1:-1;;;4513:179:2;;10522:2:5;4513:179:2;;;10504:21:5;10561:2;10541:18;;;10534:30;10600:14;10580:18;;;10573:42;10632:18;;4513:179:2;10320:336:5;4513:179:2;-1:-1:-1;;;;;4892:15:2;;;;;;;:9;:15;;;;;;;;:17;;-1:-1:-1;;4892:17:2;;;4933:13;;;;;;;;;:15;;4892:17;4933:15;;;4984:20;;;:11;:20;;;;;4977:27;;;;;;;;;5023:7;:16;;;;;;:21;;;;;;;;;;5068:27;;4996:7;;4933:13;4892:15;5068:27;;;4326:777;;;:::o;8352:204::-;8409:23;8479:16;8462:13;:33;:87;;8525:24;:22;:24::i;:::-;8444:105;;8352:204;:::o;8462:87::-;-1:-1:-1;8498:24:2;;8352:204::o;5113:172::-;5239:39;5256:4;5262:2;5266:7;5239:39;;;;;;;;;;;;:16;:39::i;:::-;5113:172;;;:::o;5371:130:1:-;5433:13;;-1:-1:-1;;;;;5433:13:1;5419:10;:27;5416:54;;5455:15;;;;;;;;;;;;;;5416:54;5480:14;5486:7;5480:5;:14::i;:::-;5371:130;:::o;1853:100::-;1101:6:3;;-1:-1:-1;;;;;1101:6:3;719:10:0;1241:23:3;1233:68;;;;-1:-1:-1;;;1233:68:3;;11200:2:5;1233:68:3;;;11182:21:5;;;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;11330:18;;1233:68:3;10998:356:5;1233:68:3;1923:14:1::1;:23:::0;;;::::1;-1:-1:-1::0;;;;;1923:23:1;;;::::1;::::0;;;::::1;::::0;;1853:100::o;3090:122::-;1101:6:3;;-1:-1:-1;;;;;1101:6:3;719:10:0;1241:23:3;1233:68;;;;-1:-1:-1;;;1233:68:3;;11200:2:5;1233:68:3;;;11182:21:5;;;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;11330:18;;1233:68:3;10998:356:5;1233:68:3;3164:41:1::1;::::0;-1:-1:-1;;;;;3164:18:1;::::1;::::0;3183:21:::1;3164:41:::0;::::1;;;::::0;::::1;::::0;;;3183:21;3164:18;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;3090:122:::0;:::o;1747:100::-;1101:6:3;;-1:-1:-1;;;;;1101:6:3;719:10:0;1241:23:3;1233:68;;;;-1:-1:-1;;;1233:68:3;;11200:2:5;1233:68:3;;;11182:21:5;;;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;11330:18;;1233:68:3;10998:356:5;1233:68:3;1820:20:1;;::::1;::::0;:7:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;1622:119::-:0;1101:6:3;;-1:-1:-1;;;;;1101:6:3;719:10:0;1241:23:3;1233:68;;;;-1:-1:-1;;;1233:68:3;;11200:2:5;1233:68:3;;;11182:21:5;;;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;11330:18;;1233:68:3;10998:356:5;1233:68:3;1702:13:1::1;:32:::0;;;::::1;-1:-1:-1::0;;;;;1702:32:1;;;::::1;::::0;;;::::1;::::0;;1622:119::o;1959:103::-;1101:6:3;;-1:-1:-1;;;;;1101:6:3;719:10:0;1241:23:3;1233:68;;;;-1:-1:-1;;;1233:68:3;;11200:2:5;1233:68:3;;;11182:21:5;;;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;11330:18;;1233:68:3;10998:356:5;1233:68:3;2026:16:1::1;:29:::0;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;1959:103::o;2531:553::-;2616:16;;;;;;;2613:40;;;2641:12;;;;;;;;;;;;;;2613:40;997:4;2680:6;2666:11;;:20;;;;:::i;:::-;:33;2663:54;;;2708:9;;;;;;;;;;;;;;2663:54;2731:36;2745:10;2757:9;2731:13;:36::i;:::-;2727:65;;2776:16;;;;;;;;;;;;;;2727:65;2825:10;2805:31;;;;:19;:31;;;;;;913:1;;2805:40;;2839:6;;2805:40;:::i;:::-;:57;:87;;;-1:-1:-1;2878:14:1;2886:6;1032:10;2878:14;:::i;:::-;2866:9;:26;2805:87;2802:122;;;2901:23;;;;;;;;;;;;;;2802:122;2956:10;2936:31;;;;:19;:31;;;;;:41;;2971:6;;2936:31;:41;;2971:6;;2936:41;:::i;:::-;;;;-1:-1:-1;2991:9:1;;-1:-1:-1;2987:91:1;3010:6;3006:1;:10;2987:91;;;3037:30;3043:10;3055:11;;3037:5;:30::i;:::-;3018:3;;;;:::i;:::-;;;;2987:91;;1049:21;;;;;;;:::i;1661:101:3:-;1101:6;;-1:-1:-1;;;;;1101:6:3;719:10:0;1241:23:3;1233:68;;;;-1:-1:-1;;;1233:68:3;;11200:2:5;1233:68:3;;;11182:21:5;;;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;11330:18;;1233:68:3;10998:356:5;1233:68:3;1725:30:::1;1752:1;1725:18;:30::i;:::-;1661:101::o:0;1412:204:1:-;1101:6:3;;-1:-1:-1;;;;;1101:6:3;719:10:0;1241:23:3;1233:68;;;;-1:-1:-1;;;1233:68:3;;11200:2:5;1233:68:3;;;11182:21:5;;;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;11330:18;;1233:68:3;10998:356:5;1233:68:3;1497:9:1::1;1493:117;1512:27:::0;;::::1;1493:117;;;1560:39;1566:16;;1583:1;1566:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;1587:11;;1560:5;:39::i;:::-;1541:3:::0;::::1;::::0;::::1;:::i;:::-;;;;1493:117;;6116:1113:2::0;6321:8;6302:15;:27;;6294:63;;;;-1:-1:-1;;;6294:63:2;;12505:2:5;6294:63:2;;;12487:21:5;12544:2;12524:18;;;12517:30;12583:25;12563:18;;;12556:53;12626:18;;6294:63:2;12303:347:5;6294:63:2;6376:13;6392:16;;;:7;:16;;;;;;-1:-1:-1;;;;;6392:16:2;;6695:18;:16;:18::i;:::-;6791:15;;;;:6;:15;;;;;;;;;:17;;;;;;;;6745:74;;1703:83;6745:74;;;12914:25:5;-1:-1:-1;;;;;12975:55:5;;12955:18;;;12948:83;13047:18;;;13040:34;;;13090:18;;;13083:34;;;;13133:19;;;;13126:35;;;6745:74:2;;;;;;;;;;12886:19:5;;;6745:74:2;;;6735:85;;;;;;;;;;13442:66:5;6625:213:2;;;13430:79:5;13525:11;;;13518:27;;;;13561:12;;;13554:28;;;;13598:12;;6625:213:2;;;-1:-1:-1;;6625:213:2;;;;;;;;;6598:254;;6625:213;6598:254;;;;6867:24;6894:26;;;;;;;;;13848:25:5;;;13921:4;13909:17;;13889:18;;;13882:45;;;;13943:18;;;13936:34;;;13986:18;;;13979:34;;;6598:254:2;;-1:-1:-1;6867:24:2;6894:26;;13820:19:5;;6894:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6894:26:2;;-1:-1:-1;;6894:26:2;;;-1:-1:-1;;;;;;;6943:30:2;;6935:67;;;;-1:-1:-1;;;6935:67:2;;14226:2:5;6935:67:2;;;14208:21:5;14265:2;14245:18;;;14238:30;14304:26;14284:18;;;14277:54;14348:18;;6935:67:2;14024:348:5;6935:67:2;7045:5;-1:-1:-1;;;;;7025:25:2;:16;-1:-1:-1;;;;;7025:25:2;;:70;;;-1:-1:-1;;;;;;7054:23:2;;;;;;;:16;:23;;;;;;;;:41;;;;;;;;;;;;7025:70;7017:97;;;;-1:-1:-1;;;7017:97:2;;14579:2:5;7017:97:2;;;14561:21:5;14618:2;14598:18;;;14591:30;14657:16;14637:18;;;14630:44;14691:18;;7017:97:2;14377:338:5;7017:97:2;-1:-1:-1;;7143:20:2;;;;:11;:20;;;;;;:30;;;;-1:-1:-1;;;;;7143:30:2;;;;;;;;;7189:33;;7143:20;;7189:33;;;;;;;6284:945;6116:1113;;;;;;:::o;979:20::-;;;;;;;:::i;4105:211::-;4207:10;4190:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;4190:38:2;;;;;;;;;;;;:49;;;;;;;;;;;;;4263:46;;586:41:5;;;4190:38:2;;4207:10;4263:46;;559:18:5;4263:46:2;;;;;;;4105:211;;:::o;2753:616::-;2824:12;2870:16;;;:7;:16;;;;;;-1:-1:-1;;;;;2870:16:2;2856:10;:30;2848:52;;;;-1:-1:-1;;;2848:52:2;;10863:2:5;2848:52:2;;;10845:21:5;10902:1;10882:18;;;10875:29;10940:11;10920:18;;;10913:39;10969:18;;2848:52:2;10661:332:5;2848:52:2;3123:10;3113:21;;;;:9;:21;;;;;;;;:23;;-1:-1:-1;;3113:23:2;;;-1:-1:-1;;;;;3160:13:2;;;;;;;;:15;;3113:23;3160:15;;;3211:20;;;:11;:20;;;;;3204:27;;;;;;;;;3250:7;:16;;;;;;:21;;;;;;;;;;3295:33;3223:7;;3160:13;;3295:33;;;-1:-1:-1;3358:4:2;;2753:616;-1:-1:-1;;2753:616:2:o;7239:1107::-;7446:8;7427:15;:27;;7419:63;;;;-1:-1:-1;;;7419:63:2;;12505:2:5;7419:63:2;;;12487:21:5;12544:2;12524:18;;;12517:30;12583:25;12563:18;;;12556:53;12626:18;;7419:63:2;12303:347:5;7419:63:2;7655:14;7769:18;:16;:18::i;:::-;-1:-1:-1;;;;;7868:19:2;;;;;;;:12;:19;;;;;;;;;:21;;;;;;;;7819:81;;1848;7819;;;14979:25:5;15081:18;;;15074:43;;;;15153:15;;;15133:18;;;15126:43;15185:18;;;15178:34;;;;15228:19;;;;15221:35;;;7819:81:2;;;;;;;;;;14951:19:5;;;7819:81:2;;;7809:92;;;;;;;;13442:66:5;7699:220:2;;;13430:79:5;13525:11;;;13518:27;;;;13561:12;;;13554:28;;;;13598:12;;7699:220:2;;;-1:-1:-1;;7699:220:2;;;;;;;;;7672:261;;7699:220;7672:261;;;;7948:24;7975:26;;;;;;;;;13848:25:5;;;13921:4;13909:17;;13889:18;;;13882:45;;;;13943:18;;;13936:34;;;13986:18;;;13979:34;;;7672:261:2;;-1:-1:-1;7948:24:2;7975:26;;13820:19:5;;7975:26:2;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7975:26:2;;-1:-1:-1;;7975:26:2;;;-1:-1:-1;;;;;;;8054:30:2;;;;;;:59;;;8108:5;-1:-1:-1;;;;;8088:25:2;:16;-1:-1:-1;;;;;8088:25:2;;8054:59;8053:106;;;-1:-1:-1;;;;;;8118:23:2;;;;;;;:16;:23;;;;;;;;:41;;;;;;;;;;;;8053:106;8028:189;;;;-1:-1:-1;;;8028:189:2;;14226:2:5;8028:189:2;;;14208:21:5;14265:2;14245:18;;;14238:30;14304:26;14284:18;;;14277:54;14348:18;;8028:189:2;14024:348:5;8028:189:2;-1:-1:-1;;;;;;;8246:23:2;;;;;;;:16;:23;;;;;;;;:33;;;;;;;;;;;;;:40;;;;8282:4;8246:40;;;;;;8302:37;;586:41:5;;;8302:37:2;;559:18:5;8302:37:2;;;;;;;7239:1107;;;;;;:::o;5295:623::-;5449:31;5462:4;5468:2;5472:7;5449:12;:31::i;:::-;-1:-1:-1;;;;;5504:14:2;;;:18;5500:412;;5618:21;5643:2;-1:-1:-1;;;;;5643:13:2;5680:10;5708;5720:4;5726:7;5735:4;5657:83;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5643:98;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5615:126;;;5772:15;5801:8;5790:30;;;;;;;;;;;;:::i;:::-;5772:48;-1:-1:-1;5855:22:2;;;;;5847:54;;;;-1:-1:-1;;;5847:54:2;;16519:2:5;5847:54:2;;;16501:21:5;16558:2;16538:18;;;16531:30;16597:21;16577:18;;;16570:49;16636:18;;5847:54:2;16317:343:5;5847:54:2;5524:388;;5500:412;5295:623;;;;:::o;3218:190:1:-;3274:13;3330:1;3312:7;3306:21;;;;;:::i;:::-;;;:25;:95;;;;;;;;;;;;;;;;;3358:7;3367:18;:7;:16;:18::i;:::-;3341:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3299:102;3218:190;-1:-1:-1;;3218:190:1:o;2068:457::-;2131:16;;;;;;;2127:41;;2156:12;;;;;;;;;;;;;;2127:41;997:4;2195:6;2181:11;;:20;;;;:::i;:::-;:33;2178:54;;;2223:9;;;;;;;;;;;;;;2178:54;2266:10;2245:32;;;;:20;:32;;;;;;953:1;;2245:41;;2280:6;;2245:41;:::i;:::-;:57;:87;;;-1:-1:-1;2318:14:1;2326:6;1032:10;2318:14;:::i;:::-;2306:9;:26;2245:87;2242:122;;;2341:23;;;;;;;;;;;;;;2242:122;2397:10;2376:32;;;;:20;:32;;;;;:42;;2412:6;;2376:32;:42;;2412:6;;2376:42;:::i;:::-;;;;-1:-1:-1;2432:9:1;;-1:-1:-1;2428:91:1;2451:6;2447:1;:10;2428:91;;;2478:30;2484:10;2496:11;;2478:5;:30::i;:::-;2459:3;;;;:::i;:::-;;;;2428:91;;1911:198:3;1101:6;;-1:-1:-1;;;;;1101:6:3;719:10:0;1241:23:3;1233:68;;;;-1:-1:-1;;;1233:68:3;;11200:2:5;1233:68:3;;;11182:21:5;;;11219:18;;;11212:30;11278:34;11258:18;;;11251:62;11330:18;;1233:68:3;10998:356:5;1233:68:3;-1:-1:-1;;;;;1999:22:3;::::1;1991:73;;;::::0;-1:-1:-1;;;1991:73:3;;18517:2:5;1991:73:3::1;::::0;::::1;18499:21:5::0;18556:2;18536:18;;;18529:30;18595:34;18575:18;;;18568:62;18666:8;18646:18;;;18639:36;18692:19;;1991:73:3::1;18315:402:5::0;1991:73:3::1;2074:28;2093:8;2074:18;:28::i;4120:245:1:-:0;4221:7;4241:9;4252;4263:7;4274:26;4289:10;4274:14;:26::i;:::-;4317:41;;;;;;;;;;;;13848:25:5;;;13921:4;13909:17;;13889:18;;;13882:45;;;;13943:18;;;13936:34;;;13986:18;;;13979:34;;;4240:60:1;;-1:-1:-1;4240:60:1;;-1:-1:-1;4240:60:1;-1:-1:-1;4317:41:1;;13820:19:5;;4317:41:1;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4317:41:1;;-1:-1:-1;;4317:41:1;;;4120:245;-1:-1:-1;;;;;;;4120:245:1:o;8562:436:2:-;8627:23;8731:95;8860:4;8844:22;;;;;;:::i;:::-;;;;;;;;;;8894:10;;;;;;;;;;;;;;8703:278;;;;;19570:25:5;;;;19611:18;;19604:34;;;;8884:21:2;19654:18:5;;;19647:34;8923:13:2;19697:18:5;;;19690:34;8962:4:2;19740:19:5;;;19733:84;19542:19;;8703:278:2;;;;;;;;;;;;8680:311;;;;;;8662:329;;8562:436;:::o;9763:489::-;9823:13;9839:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9839:16:2;9882:30;9874:53;;;;-1:-1:-1;;;9874:53:2;;20030:2:5;9874:53:2;;;20012:21:5;20069:2;20049:18;;;20042:30;20108:12;20088:18;;;20081:40;20138:18;;9874:53:2;19828:334:5;9874:53:2;10078:11;:13;;-1:-1:-1;;10078:13:2;;;;;;-1:-1:-1;;;;;10114:16:2;;10078:11;10114:16;;;:9;:16;;;;;;;;:18;;;;;;;;10168:16;;;:7;:16;;;;;10161:23;;;;;;10208:36;;10176:7;;10078:11;10114:16;10208:36;;10078:11;;10208:36;9812:440;9763:489;:::o;9192:561::-;9323:1;9295:16;;;:7;:16;;;;;;-1:-1:-1;;;;;9295:16:2;:30;9287:57;;;;-1:-1:-1;;;9287:57:2;;20369:2:5;9287:57:2;;;20351:21:5;20408:2;20388:18;;;20381:30;20447:16;20427:18;;;20420:44;20481:18;;9287:57:2;20167:338:5;9287:57:2;9583:11;:13;;;;;;;;;-1:-1:-1;;;;;9623:13:2;;9583:11;9623:13;;;:9;:13;;;;;;;;:15;;;;;;;;9667:16;;;:7;:16;;;;;:21;;;;;;;;9712:33;;9675:7;;9583:11;9712:33;;9583:11;;9712:33;9192:561;;:::o;2263:187:3:-;2355:6;;;-1:-1:-1;;;;;2371:17:3;;;;;;;;;;;2403:40;;2355:6;;;2371:17;2355:6;;2403:40;;2336:16;;2403:40;2326:124;2263:187;:::o;328:703:4:-;384:13;601:10;597:51;;-1:-1:-1;;627:10:4;;;;;;;;;;;;;;;;;;328:703::o;597:51::-;672:5;657:12;711:75;718:9;;711:75;;743:8;;;;:::i;:::-;;-1:-1:-1;765:10:4;;-1:-1:-1;773:2:4;765:10;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;817:17:4;;795:39;;844:150;851:10;;844:150;;877:11;887:1;877:11;;:::i;:::-;;-1:-1:-1;945:10:4;953:2;945:5;:10;:::i;:::-;932:24;;:2;:24;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;:56;;;;;;;;;;-1:-1:-1;972:11:4;981:2;972:11;;:::i;:::-;;;844:150;;;1017:6;328:703;-1:-1:-1;;;;328:703:4:o;4626:739:1:-;4690:9;4701;4712:7;4739:3;:10;4753:2;4739:16;4731:40;;;;-1:-1:-1;;;4731:40:1;;21273:2:5;4731:40:1;;;21255:21:5;21312:2;21292:18;;;21285:30;21351:13;21331:18;;;21324:41;21382:18;;4731:40:1;21071:335:5;4731:40:1;-1:-1:-1;;;5139:2:1;5130:12;;5124:19;5203:2;5194:12;;5188:19;5304:2;5295:12;;;5289:19;5124;;5286:1;5281:28;;;;;4626:739::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:177:5;99:66;92:5;88:78;81:5;78:89;68:117;;181:1;178;171:12;196:245;254:6;307:2;295:9;286:7;282:23;278:32;275:52;;;323:1;320;313:12;275:52;362:9;349:23;381:30;405:5;381:30;:::i;:::-;430:5;196:245;-1:-1:-1;;;196:245:5:o;638:258::-;710:1;720:113;734:6;731:1;728:13;720:113;;;810:11;;;804:18;791:11;;;784:39;756:2;749:10;720:113;;;851:6;848:1;845:13;842:48;;;-1:-1:-1;;886:1:5;868:16;;861:27;638:258::o;901:317::-;943:3;981:5;975:12;1008:6;1003:3;996:19;1024:63;1080:6;1073:4;1068:3;1064:14;1057:4;1050:5;1046:16;1024:63;:::i;:::-;1132:2;1120:15;-1:-1:-1;;1116:88:5;1107:98;;;;1207:4;1103:109;;901:317;-1:-1:-1;;901:317:5:o;1223:220::-;1372:2;1361:9;1354:21;1335:4;1392:45;1433:2;1422:9;1418:18;1410:6;1392:45;:::i;1448:180::-;1507:6;1560:2;1548:9;1539:7;1535:23;1531:32;1528:52;;;1576:1;1573;1566:12;1528:52;-1:-1:-1;1599:23:5;;1448:180;-1:-1:-1;1448:180:5:o;1864:154::-;-1:-1:-1;;;;;1943:5:5;1939:54;1932:5;1929:65;1919:93;;2008:1;2005;1998:12;2023:315;2091:6;2099;2152:2;2140:9;2131:7;2127:23;2123:32;2120:52;;;2168:1;2165;2158:12;2120:52;2207:9;2194:23;2226:31;2251:5;2226:31;:::i;:::-;2276:5;2328:2;2313:18;;;;2300:32;;-1:-1:-1;;;2023:315:5:o;2525:184::-;2577:77;2574:1;2567:88;2674:4;2671:1;2664:15;2698:4;2695:1;2688:15;2714:690;2778:5;2808:18;2849:2;2841:6;2838:14;2835:40;;;2855:18;;:::i;:::-;2989:2;2983:9;3055:2;3043:15;;-1:-1:-1;;3039:24:5;;;3065:2;3035:33;3031:42;3019:55;;;3089:18;;;3109:22;;;3086:46;3083:72;;;3135:18;;:::i;:::-;3175:10;3171:2;3164:22;3204:6;3195:15;;3234:6;3226;3219:22;3274:3;3265:6;3260:3;3256:16;3253:25;3250:45;;;3291:1;3288;3281:12;3250:45;3341:6;3336:3;3329:4;3321:6;3317:17;3304:44;3396:1;3389:4;3380:6;3372;3368:19;3364:30;3357:41;;;;2714:690;;;;;:::o;3409:220::-;3451:5;3504:3;3497:4;3489:6;3485:17;3481:27;3471:55;;3522:1;3519;3512:12;3471:55;3544:79;3619:3;3610:6;3597:20;3590:4;3582:6;3578:17;3544:79;:::i;3634:455::-;3711:6;3719;3772:2;3760:9;3751:7;3747:23;3743:32;3740:52;;;3788:1;3785;3778:12;3740:52;3827:9;3814:23;3846:31;3871:5;3846:31;:::i;:::-;3896:5;-1:-1:-1;3952:2:5;3937:18;;3924:32;3979:18;3968:30;;3965:50;;;4011:1;4008;4001:12;3965:50;4034:49;4075:7;4066:6;4055:9;4051:22;4034:49;:::i;:::-;4024:59;;;3634:455;;;;;:::o;4094:456::-;4171:6;4179;4187;4240:2;4228:9;4219:7;4215:23;4211:32;4208:52;;;4256:1;4253;4246:12;4208:52;4295:9;4282:23;4314:31;4339:5;4314:31;:::i;:::-;4364:5;-1:-1:-1;4421:2:5;4406:18;;4393:32;4434:33;4393:32;4434:33;:::i;:::-;4094:456;;4486:7;;-1:-1:-1;;;4540:2:5;4525:18;;;;4512:32;;4094:456::o;4737:247::-;4796:6;4849:2;4837:9;4828:7;4824:23;4820:32;4817:52;;;4865:1;4862;4855:12;4817:52;4904:9;4891:23;4923:31;4948:5;4923:31;:::i;5249:450::-;5318:6;5371:2;5359:9;5350:7;5346:23;5342:32;5339:52;;;5387:1;5384;5377:12;5339:52;5427:9;5414:23;5460:18;5452:6;5449:30;5446:50;;;5492:1;5489;5482:12;5446:50;5515:22;;5568:4;5560:13;;5556:27;-1:-1:-1;5546:55:5;;5597:1;5594;5587:12;5546:55;5620:73;5685:7;5680:2;5667:16;5662:2;5658;5654:11;5620:73;:::i;5704:160::-;5769:20;;5825:13;;5818:21;5808:32;;5798:60;;5854:1;5851;5844:12;5798:60;5704:160;;;:::o;5869:180::-;5925:6;5978:2;5966:9;5957:7;5953:23;5949:32;5946:52;;;5994:1;5991;5984:12;5946:52;6017:26;6033:9;6017:26;:::i;6054:388::-;6131:6;6139;6192:2;6180:9;6171:7;6167:23;6163:32;6160:52;;;6208:1;6205;6198:12;6160:52;6244:9;6231:23;6221:33;;6305:2;6294:9;6290:18;6277:32;6332:18;6324:6;6321:30;6318:50;;;6364:1;6361;6354:12;6447:615;6533:6;6541;6594:2;6582:9;6573:7;6569:23;6565:32;6562:52;;;6610:1;6607;6600:12;6562:52;6650:9;6637:23;6679:18;6720:2;6712:6;6709:14;6706:34;;;6736:1;6733;6726:12;6706:34;6774:6;6763:9;6759:22;6749:32;;6819:7;6812:4;6808:2;6804:13;6800:27;6790:55;;6841:1;6838;6831:12;6790:55;6881:2;6868:16;6907:2;6899:6;6896:14;6893:34;;;6923:1;6920;6913:12;6893:34;6976:7;6971:2;6961:6;6958:1;6954:14;6950:2;6946:23;6942:32;6939:45;6936:65;;;6997:1;6994;6987:12;6936:65;7028:2;7020:11;;;;;7050:6;;-1:-1:-1;6447:615:5;;-1:-1:-1;;;;6447:615:5:o;7067:156::-;7133:20;;7193:4;7182:16;;7172:27;;7162:55;;7213:1;7210;7203:12;7228:592;7330:6;7338;7346;7354;7362;7370;7423:3;7411:9;7402:7;7398:23;7394:33;7391:53;;;7440:1;7437;7430:12;7391:53;7479:9;7466:23;7498:31;7523:5;7498:31;:::i;:::-;7548:5;-1:-1:-1;7600:2:5;7585:18;;7572:32;;-1:-1:-1;7651:2:5;7636:18;;7623:32;;-1:-1:-1;7674:36:5;7706:2;7691:18;;7674:36;:::i;:::-;7664:46;;7757:3;7746:9;7742:19;7729:33;7719:43;;7809:3;7798:9;7794:19;7781:33;7771:43;;7228:592;;;;;;;;:::o;7825:315::-;7890:6;7898;7951:2;7939:9;7930:7;7926:23;7922:32;7919:52;;;7967:1;7964;7957:12;7919:52;8006:9;7993:23;8025:31;8050:5;8025:31;:::i;:::-;8075:5;-1:-1:-1;8099:35:5;8130:2;8115:18;;8099:35;:::i;:::-;8089:45;;7825:315;;;;;:::o;8145:665::-;8247:6;8255;8263;8271;8279;8287;8340:3;8328:9;8319:7;8315:23;8311:33;8308:53;;;8357:1;8354;8347:12;8308:53;8396:9;8383:23;8415:31;8440:5;8415:31;:::i;:::-;8465:5;-1:-1:-1;8522:2:5;8507:18;;8494:32;8535:33;8494:32;8535:33;:::i;:::-;8587:7;-1:-1:-1;8641:2:5;8626:18;;8613:32;;-1:-1:-1;8664:36:5;8696:2;8681:18;;8664:36;:::i;8815:665::-;8910:6;8918;8926;8934;8987:3;8975:9;8966:7;8962:23;8958:33;8955:53;;;9004:1;9001;8994:12;8955:53;9043:9;9030:23;9062:31;9087:5;9062:31;:::i;:::-;9112:5;-1:-1:-1;9169:2:5;9154:18;;9141:32;9182:33;9141:32;9182:33;:::i;:::-;9234:7;-1:-1:-1;9288:2:5;9273:18;;9260:32;;-1:-1:-1;9343:2:5;9328:18;;9315:32;9370:18;9359:30;;9356:50;;;9402:1;9399;9392:12;9356:50;9425:49;9466:7;9457:6;9446:9;9442:22;9425:49;:::i;:::-;9415:59;;;8815:665;;;;;;;:::o;9485:388::-;9553:6;9561;9614:2;9602:9;9593:7;9589:23;9585:32;9582:52;;;9630:1;9627;9620:12;9582:52;9669:9;9656:23;9688:31;9713:5;9688:31;:::i;:::-;9738:5;-1:-1:-1;9795:2:5;9780:18;;9767:32;9808:33;9767:32;9808:33;:::i;:::-;9860:7;9850:17;;;9485:388;;;;;:::o;9878:437::-;9957:1;9953:12;;;;10000;;;10021:61;;10075:4;10067:6;10063:17;10053:27;;10021:61;10128:2;10120:6;10117:14;10097:18;10094:38;10091:218;;;10165:77;10162:1;10155:88;10266:4;10263:1;10256:15;10294:4;10291:1;10284:15;10091:218;;9878:437;;;:::o;11359:184::-;11411:77;11408:1;11401:88;11508:4;11505:1;11498:15;11532:4;11529:1;11522:15;11548:128;11588:3;11619:1;11615:6;11612:1;11609:13;11606:39;;;11625:18;;:::i;:::-;-1:-1:-1;11661:9:5;;11548:128::o;11681:228::-;11721:7;11847:1;-1:-1:-1;;11775:74:5;11772:1;11769:81;11764:1;11757:9;11750:17;11746:105;11743:131;;;11854:18;;:::i;:::-;-1:-1:-1;11894:9:5;;11681:228::o;11914:195::-;11953:3;-1:-1:-1;;11977:5:5;11974:77;11971:103;;;12054:18;;:::i;:::-;-1:-1:-1;12101:1:5;12090:13;;11914:195::o;12114:184::-;12166:77;12163:1;12156:88;12263:4;12260:1;12253:15;12287:4;12284:1;12277:15;15267:512;15461:4;-1:-1:-1;;;;;15571:2:5;15563:6;15559:15;15548:9;15541:34;15623:2;15615:6;15611:15;15606:2;15595:9;15591:18;15584:43;;15663:6;15658:2;15647:9;15643:18;15636:34;15706:3;15701:2;15690:9;15686:18;15679:31;15727:46;15768:3;15757:9;15753:19;15745:6;15727:46;:::i;:::-;15719:54;15267:512;-1:-1:-1;;;;;;15267:512:5:o;15784:274::-;15913:3;15951:6;15945:13;15967:53;16013:6;16008:3;16001:4;15993:6;15989:17;15967:53;:::i;:::-;16036:16;;;;;15784:274;-1:-1:-1;;15784:274:5:o;16063:249::-;16132:6;16185:2;16173:9;16164:7;16160:23;16156:32;16153:52;;;16201:1;16198;16191:12;16153:52;16233:9;16227:16;16252:30;16276:5;16252:30;:::i;16665:1097::-;16750:12;;16715:3;;16805:1;16825:18;;;;16878;;;;16905:61;;16959:4;16951:6;16947:17;16937:27;;16905:61;16985:2;17033;17025:6;17022:14;17002:18;16999:38;16996:218;;;17070:77;17067:1;17060:88;17171:4;17168:1;17161:15;17199:4;17196:1;17189:15;16996:218;17230:18;17257:162;;;;17433:1;17428:328;;;;17223:533;;17257:162;17305:66;17294:9;17290:82;17285:3;17278:95;17402:6;17397:3;17393:16;17386:23;;17257:162;;17428:328;17459:5;17456:1;17449:16;17506:2;17503:1;17493:16;17531:1;17545:165;17559:6;17556:1;17553:13;17545:165;;;17637:14;;17624:11;;;17617:35;17680:16;;;;17574:10;;17545:165;;;17549:3;;17739:6;17734:3;17730:16;17723:23;;17223:533;;;;;;;16665:1097;;;;:::o;17767:543::-;18044:3;18072:38;18106:3;18098:6;18072:38;:::i;:::-;18139:6;18133:13;18155:52;18200:6;18196:2;18189:4;18181:6;18177:17;18155:52;:::i;:::-;18267:7;18229:15;;18253:22;;;18302:1;18291:13;;17767:543;-1:-1:-1;;;;17767:543:5:o;19107:199::-;19237:3;19262:38;19296:3;19288:6;19262:38;:::i;20510:184::-;20562:77;20559:1;20552:88;20659:4;20656:1;20649:15;20683:4;20680:1;20673:15;20699:120;20739:1;20765;20755:35;;20770:18;;:::i;:::-;-1:-1:-1;20804:9:5;;20699:120::o;20824:125::-;20864:4;20892:1;20889;20886:8;20883:34;;;20897:18;;:::i;:::-;-1:-1:-1;20934:9:5;;20824:125::o;20954:112::-;20986:1;21012;21002:35;;21017:18;;:::i;:::-;-1:-1:-1;21051:9:5;;20954:112::o

Swarm Source

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