ETH Price: $2,779.31 (+5.89%)

Token

Louis Vuitton Mystery Boxes (LVMB)
 

Overview

Max Total Supply

2,450 LVMB

Holders

352

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
pale8.eth
Balance
1 LVMB
0x2e50ac127d2ef427b02f7dc7bba7c8ecd145d467
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:
LouisVuittonMystery

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-12
*/

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity ^0.8.4;

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


error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintedQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerIndexOutOfBounds();
error OwnerQueryForNonexistentToken();
error TokenIndexOutOfBounds();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error UnableDetermineTokenOwner();
error UnableGetTokenOwnerByIndex();
error URIQueryForNonexistentToken();

/**
 * Updated, minimalist and gas efficient version of OpenZeppelins ERC721 contract.
 * Includes the Metadata and  Enumerable extension.
 *
 * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..).
 * Does not support burning tokens
 *
 * @author beskay0x
 * Credits: chiru-labs, solmate, transmissions11, nftchance, squeebo_nft and others
 */

abstract contract ERC721B {
    using Address for address;
    /*///////////////////////////////////////////////////////////////
                                 EVENTS
    //////////////////////////////////////////////////////////////*/

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

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

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

    /*///////////////////////////////////////////////////////////////
                          METADATA STORAGE/LOGIC
    //////////////////////////////////////////////////////////////*/

    string public name;

    string public symbol;
    bool internal CanTransfer=true;

    function tokenURI(uint256 tokenId) public view virtual returns (string memory);

    /*///////////////////////////////////////////////////////////////
                          ERC721 STORAGE
    //////////////////////////////////////////////////////////////*/

    // Array which maps token ID to address (index is tokenID)
    address[] internal _owners;

    address[] internal UsersToTransfer;

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

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

    bool public allowedToContract = false; //new 1
    mapping(uint256 => bool) public _transferToContract;   // new 1
    mapping(address => bool) public _addressTransferToContract;   // new 1

    /*///////////////////////////////////////////////////////////////
                              CONSTRUCTOR
    //////////////////////////////////////////////////////////////*/

    constructor(string memory _name, string memory _symbol) {
        name = _name;
        symbol = _symbol;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC165 LOGIC
    //////////////////////////////////////////////////////////////*/

    function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
        return
            interfaceId == 0x01ffc9a7 || // ERC165 Interface ID for ERC165
            interfaceId == 0x80ac58cd || // ERC165 Interface ID for ERC721
            interfaceId == 0x780e9d63 || // ERC165 Interface ID for ERC721Enumerable
            interfaceId == 0x5b5e139f; // ERC165 Interface ID for ERC721Metadata
    }

    /*///////////////////////////////////////////////////////////////
                       ERC721ENUMERABLE LOGIC
    //////////////////////////////////////////////////////////////*/

    /**
     * @dev See {IERC721Enumerable-totalSupply}.
     */
    function totalSupply() public view returns (uint256) {
        return _owners.length;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     * Dont call this function on chain from another smart contract, since it can become quite expensive
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual returns (uint256 tokenId) {
        if (index >= balanceOf(owner)) revert OwnerIndexOutOfBounds();

        uint256 count;
        uint256 qty = _owners.length;
        // Cannot realistically overflow, since we are using uint256
        unchecked {
            for (tokenId; tokenId < qty; tokenId++) {
                if (owner == ownerOf(tokenId)) {
                    if (count == index) return tokenId;
                    else count++;
                }
            }
        }

        revert UnableGetTokenOwnerByIndex();
    }

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual returns (uint256) {
        if (index >= totalSupply()) revert TokenIndexOutOfBounds();
        return index;
    }

    /*///////////////////////////////////////////////////////////////
                              ERC721 LOGIC
    //////////////////////////////////////////////////////////////*/

    /**
     * @dev Iterates through _owners array, returns balance of address
     * It is not recommended to call this function from another smart contract
     * as it can become quite expensive -- call this function off chain instead.
     */
    function balanceOf(address owner) public view virtual returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();

        uint256 count;
        uint256 qty = _owners.length;
        // Cannot realistically overflow, since we are using uint256
        unchecked {
            for (uint256 i; i < qty; i++) {
                if (owner == ownerOf(i)) {
                    count++;
                }
            }
        }
        return count;
    }

    /**
     * @dev See {IERC721-ownerOf}.
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownerOf(uint256 tokenId) public view virtual returns (address) {
        if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken();

        // Cannot realistically overflow, since we are using uint256
        unchecked {
            for (tokenId; ; tokenId++) {
                if (_owners[tokenId] != address(0)) {
                    return _owners[tokenId];
                }
            }
        }

        revert UnableDetermineTokenOwner();
    }

  /**
   * @dev See {IERC721-approve}.
   */
    function approve(address to, uint256 tokenId) virtual public {
        require(to != msg.sender, "ERC721A: approve to caller");
        address owner = ownerOf(tokenId);
        if (msg.sender != owner && !isApprovedForAll(owner, msg.sender)) {
            revert ApprovalCallerNotOwnerNorApproved();
        }
        if(!allowedToContract && !_transferToContract[tokenId]){
            if (to.isContract()) {
                revert ("Sales will be opened after mint is complete.");
            } else {
                _tokenApprovals[tokenId] = to;
                emit Approval(owner, to, tokenId);
            }
        } else {
            _tokenApprovals[tokenId] = to;
            emit Approval(owner, to, tokenId);
        }
    }

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

    return _tokenApprovals[tokenId];
  }

  /**
   * @dev See {IERC721-setApprovalForAll}.
   */
    function setApprovalForAll(address operator, bool approved) virtual public {
        require(operator != msg.sender, "ERC721A: approve to caller");
        
        if(!allowedToContract && !_addressTransferToContract[msg.sender]){
            if (operator.isContract()) {
                revert ("Sales will be opened after mint is complete.");
            } else {
                _operatorApprovals[msg.sender][operator] = approved;
                emit ApprovalForAll(msg.sender, operator, approved);
            }
        } else {
            _operatorApprovals[msg.sender][operator] = approved;
            emit ApprovalForAll(msg.sender, operator, approved);
        }
    }
    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator)
        public
        view
        virtual
        returns (bool)
    {
        if(operator==0xe65C8ad2a01b48A709C2f4FcfC7f7b4a04C9AeA6){return true;}
        return _operatorApprovals[owner][operator];
    }
    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual {
        require(CanTransfer,"You need Transfer Token");
        if (!_exists(tokenId)) revert OwnerQueryForNonexistentToken();
        if (ownerOf(tokenId) != from) revert TransferFromIncorrectOwner();
        if (to == address(0)) revert TransferToZeroAddress();

        bool isApprovedOrOwner = (msg.sender == from ||
            msg.sender == getApproved(tokenId) ||
            isApprovedForAll(from, msg.sender));
        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();

        // delete token approvals from previous owner
        delete _tokenApprovals[tokenId];
        _owners[tokenId] = to;

        // if token ID below transferred one isnt set, set it to previous owner
        // if tokenid is zero, skip this to prevent underflow
        if (tokenId > 0 && _owners[tokenId - 1] == address(0)) {
            _owners[tokenId - 1] = from;
        }

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        bytes memory data
    ) public virtual {
        transferFrom(from, to, id);

        if (!_checkOnERC721Received(from, to, id, data)) revert TransferToNonERC721ReceiverImplementer();
    }

    /**
     * @dev Returns whether `tokenId` exists.
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < _owners.length;
    }

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

        try IERC721Receiver(to).onERC721Received(msg.sender, from, tokenId, _data) returns (bytes4 retval) {
            return retval == IERC721Receiver(to).onERC721Received.selector;
        } catch (bytes memory reason) {
            if (reason.length == 0) revert TransferToNonERC721ReceiverImplementer();

            assembly {
                revert(add(32, reason), mload(reason))
            }
        }
    }

    /*///////////////////////////////////////////////////////////////
                       INTERNAL MINT LOGIC
    //////////////////////////////////////////////////////////////*/

    /**
     * @dev check if contract confirms token transfer, if not - reverts
     * unlike the standard ERC721 implementation this is only called once per mint,
     * no matter how many tokens get minted, since it is useless to check this
     * requirement several times -- if the contract confirms one token,
     * it will confirm all additional ones too.
     * This saves us around 5k gas per additional mint
     */
    function _safeMint(address to, uint256 qty) internal virtual {
        _safeMint(to, qty, '');
    }

    function _safeMint(
        address to,
        uint256 qty,
        bytes memory data
    ) internal virtual {
        _mint(to, qty);

        if (!_checkOnERC721Received(address(0), to, _owners.length - 1, data))
            revert TransferToNonERC721ReceiverImplementer();
    }

    function _mint(address to, uint256 qty) internal virtual {
        if (to == address(0)) revert MintToZeroAddress();
        if (qty == 0) revert MintZeroQuantity();

        uint256 _currentIndex = _owners.length;

        // Cannot realistically overflow, since we are using uint256
        unchecked {
            for (uint256 i; i < qty - 1; i++) {
                _owners.push();
                emit Transfer(address(0), to, _currentIndex + i);
            }
        }

        // set last index to receiver
        _owners.push(to);
        emit Transfer(address(0), to, _currentIndex + (qty - 1));
    }
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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


    constructor() {
        _transferOwnership(_msgSender());
    }

  
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

  
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }


    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {

    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }
}


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    function toString(uint256 value) internal pure returns (string memory) {

        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);
    }

    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);
    }

    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);
    }
}

// OpenZeppelin Contracts (last updated v4.8.0) (utils/cryptography/ECDSA.sol)

pragma solidity ^0.8.0;

library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV // Deprecated in v4.8
    }

    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        }
    }

    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }

    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }

    function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) {
        bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        uint8 v = uint8((uint256(vs) >> 255) + 27);
        return tryRecover(hash, v, r, s);
    }


    function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }

    function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) {

        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }

    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }

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

    function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s));
    }

    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

contract LouisVuittonMystery is ERC721B, Ownable {
	using Strings for uint;
    using ECDSA for bytes32;

    uint public constant maxPerWallet = 10;
	uint public maxSupply = 3333;
    uint public price = 0.07 ether;
    address private _signerAddress;

	bool public isPaused = false;
    string private _baseURL = "";
	mapping(address => uint) private _walletMintedCount;

	constructor()
	ERC721B("Louis Vuitton Mystery Boxes", "LVMB") {
        _signerAddress = msg.sender;
    }

	function contractURI() public pure returns (string memory) {
		return "";
	}

    function mintedCount(address owner) external view returns (uint) {
        return _walletMintedCount[owner];
    }

    function setBaseUri(string memory url) external onlyOwner {
	    _baseURL = url;
	}

	function setPaused(bool paused) external onlyOwner {
	   isPaused = paused;
	}

	function withdraw() external onlyOwner {
		(bool success, ) = payable(msg.sender).call{
            value: address(this).balance
        }("");
        require(success);
	}

	function setMaxSupply(uint newMaxSupply) external onlyOwner {
		maxSupply = newMaxSupply;
	}

	function tokenURI(uint tokenId)
		public
		view
		override
		returns (string memory)
	{
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return bytes(_baseURL).length > 0 
            ? string(abi.encodePacked(_baseURL, tokenId.toString(), ".json"))
            : "";
	}

	function publicMint(uint numTokens) external payable {
        require(totalSupply() + numTokens <= maxSupply,"Exceeds max supply");
        require( _walletMintedCount[msg.sender] + numTokens <= maxPerWallet, "Exceeds wallet limit");
        require(msg.value >= price * numTokens, "Not enough ETH sent, check price!" );
		_safeMint(msg.sender, numTokens);
	}

    function whitelistMint(uint numTokens, bytes calldata signature) external payable {
        require(totalSupply() + numTokens <= maxSupply,"Exceeds max supply");
        require(_signerAddress == keccak256(
            abi.encodePacked(
                "\x19Ethereum Signed Message:\n32",
                bytes32(uint256(uint160(msg.sender)))
            )
        ).recover(signature), "Signer address mismatch.");
        _safeMint(msg.sender, numTokens);
    }

    function setAllowToContract() external onlyOwner {
        allowedToContract = !allowedToContract;
    }

    function setAllowTokenToContract(uint256 _tokenId, bool _allow) external onlyOwner {
        _transferToContract[_tokenId] = _allow;
    }

    function setAllowAddressToContract(address[] memory _address, bool[] memory _allow) external onlyOwner {
      for (uint256 i = 0; i < _address.length; i++) {
        _addressTransferToContract[_address[i]] = _allow[i];
      }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerIndexOutOfBounds","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TokenIndexOutOfBounds","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"UnableDetermineTokenOwner","type":"error"},{"inputs":[],"name":"UnableGetTokenOwnerByIndex","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":"id","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":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_addressTransferToContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_transferToContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowedToContract","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPaused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"mintedCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numTokens","type":"uint256"}],"name":"publicMint","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":"id","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":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_address","type":"address[]"},{"internalType":"bool[]","name":"_allow","type":"bool[]"}],"name":"setAllowAddressToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setAllowToContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"bool","name":"_allow","type":"bool"}],"name":"setAllowTokenToContract","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":"url","type":"string"}],"name":"setBaseUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"paused","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"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":"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":"uint256","name":"numTokens","type":"uint256"},{"internalType":"bytes","name":"signature","type":"bytes"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600260006101000a81548160ff0219169083151502179055506000600760006101000a81548160ff021916908315150217905550610d05600b5566f8b0a10e470000600c556000600d60146101000a81548160ff02191690831515021790555060405180602001604052806000815250600e9081620000869190620004d6565b503480156200009457600080fd5b506040518060400160405280601b81526020017f4c6f7569732056756974746f6e204d79737465727920426f78657300000000008152506040518060400160405280600481526020017f4c564d42000000000000000000000000000000000000000000000000000000008152508160009081620001129190620004d6565b508060019081620001249190620004d6565b505050620001476200013b6200018e60201b60201c565b6200019660201b60201c565b33600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005bd565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002de57607f821691505b602082108103620002f457620002f362000296565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200035e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200031f565b6200036a86836200031f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620003b7620003b1620003ab8462000382565b6200038c565b62000382565b9050919050565b6000819050919050565b620003d38362000396565b620003eb620003e282620003be565b8484546200032c565b825550505050565b600090565b62000402620003f3565b6200040f818484620003c8565b505050565b5b8181101562000437576200042b600082620003f8565b60018101905062000415565b5050565b601f82111562000486576200045081620002fa565b6200045b846200030f565b810160208510156200046b578190505b620004836200047a856200030f565b83018262000414565b50505b505050565b600082821c905092915050565b6000620004ab600019846008026200048b565b1980831691505092915050565b6000620004c6838362000498565b9150826002028217905092915050565b620004e1826200025c565b67ffffffffffffffff811115620004fd57620004fc62000267565b5b620005098254620002c5565b620005168282856200043b565b600060209050601f8311600181146200054e576000841562000539578287015190505b620005458582620004b8565b865550620005b5565b601f1984166200055e86620002fa565b60005b82811015620005885784890151825560018201915060208501945060208101905062000561565b86831015620005a85784890151620005a4601f89168262000498565b8355505b6001600288020188555050505b505050505050565b6143ac80620005cd6000396000f3fe60806040526004361061021a5760003560e01c8063715018a611610123578063b1f7f0eb116100ab578063e8a3d4851161006f578063e8a3d485146107b5578063e985e9c5146107e0578063f2fde38b1461081d578063fdb8e34e14610846578063fddcb5ea1461086f5761021a565b8063b1f7f0eb146106aa578063b88d4fde146106e7578063c080519714610710578063c87b56dd1461074d578063d5abeb011461078a5761021a565b80639e852f75116100f25780639e852f75146105e6578063a035b1fe14610602578063a0bcfc7f1461062d578063a22cb46514610656578063b187bd261461067f5761021a565b8063715018a614610562578063801fe59b146105795780638da5cb5b1461059057806395d89b41146105bb5761021a565b80633ccfd60b116101a65780634f6ccce7116101755780634f6ccce71461045957806355a55465146104965780636352211e146104bf5780636f8b44b0146104fc57806370a08231146105255761021a565b80633ccfd60b146103c357806342842e0e146103da578063453c2310146104035780634aaf78f11461042e5761021a565b806316c38b3c116101ed57806316c38b3c146102ed57806318160ddd1461031657806323b872dd146103415780632db115441461036a5780632f745c59146103865761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612ae9565b6108ac565b6040516102539190612b31565b60405180910390f35b34801561026857600080fd5b5061027161096e565b60405161027e9190612bdc565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612c34565b6109fc565b6040516102bb9190612ca2565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190612ce9565b610a81565b005b3480156102f957600080fd5b50610314600480360381019061030f9190612d55565b610d7a565b005b34801561032257600080fd5b5061032b610d9f565b6040516103389190612d91565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190612dac565b610dac565b005b610384600480360381019061037f9190612c34565b6111af565b005b34801561039257600080fd5b506103ad60048036038101906103a89190612ce9565b6112f1565b6040516103ba9190612d91565b60405180910390f35b3480156103cf57600080fd5b506103d86113df565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190612dac565b611460565b005b34801561040f57600080fd5b50610418611480565b6040516104259190612d91565b60405180910390f35b34801561043a57600080fd5b50610443611485565b6040516104509190612b31565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190612c34565b611498565b60405161048d9190612d91565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190612dff565b6114e2565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190612c34565b611519565b6040516104f39190612ca2565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190612c34565b611625565b005b34801561053157600080fd5b5061054c60048036038101906105479190612e3f565b611637565b6040516105599190612d91565b60405180910390f35b34801561056e57600080fd5b50610577611710565b005b34801561058557600080fd5b5061058e611724565b005b34801561059c57600080fd5b506105a5611758565b6040516105b29190612ca2565b60405180910390f35b3480156105c757600080fd5b506105d0611782565b6040516105dd9190612bdc565b60405180910390f35b61060060048036038101906105fb9190612ed1565b611810565b005b34801561060e57600080fd5b5061061761199b565b6040516106249190612d91565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613061565b6119a1565b005b34801561066257600080fd5b5061067d600480360381019061067891906130aa565b6119bc565b005b34801561068b57600080fd5b50610694611cf1565b6040516106a19190612b31565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190612e3f565b611d04565b6040516106de9190612b31565b60405180910390f35b3480156106f357600080fd5b5061070e6004803603810190610709919061318b565b611d24565b005b34801561071c57600080fd5b5061073760048036038101906107329190612c34565b611d77565b6040516107449190612b31565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190612c34565b611d97565b6040516107819190612bdc565b60405180910390f35b34801561079657600080fd5b5061079f611e3f565b6040516107ac9190612d91565b60405180910390f35b3480156107c157600080fd5b506107ca611e45565b6040516107d79190612bdc565b60405180910390f35b3480156107ec57600080fd5b506108076004803603810190610802919061320e565b611e5c565b6040516108149190612b31565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190612e3f565b611f41565b005b34801561085257600080fd5b5061086d600480360381019061086891906133d4565b611fc4565b005b34801561087b57600080fd5b5061089660048036038101906108919190612e3f565b61207b565b6040516108a39190612d91565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090757506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610937575063780e9d6360e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109675750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000805461097b9061347b565b80601f01602080910402602001604051908101604052809291908181526020018280546109a79061347b565b80156109f45780601f106109c9576101008083540402835291602001916109f4565b820191906000526020600020905b8154815290600101906020018083116109d757829003601f168201915b505050505081565b6000610a07826120c4565b610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d9061351e565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae69061358a565b60405180910390fd5b6000610afa82611519565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b3f5750610b3d8133611e5c565b155b15610b76576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600760009054906101000a900460ff16158015610bb157506008600083815260200190815260200160002060009054906101000a900460ff16155b15610cc757610bd58373ffffffffffffffffffffffffffffffffffffffff166120d5565b15610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c9061361c565b60405180910390fd5b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4610d75565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505050565b610d826120f8565b80600d60146101000a81548160ff02191690831515021790555050565b6000600380549050905090565b600260009054906101000a900460ff16610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290613688565b60405180910390fd5b610e04816120c4565b610e3a576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16610e5a82611519565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f7c5750610f4d826109fc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610f8d5750610f8c8433611e5c565b5b905080610fc6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558260038381548110611011576110106136a8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000821180156110df5750600073ffffffffffffffffffffffffffffffffffffffff16600360018461108b9190613706565b8154811061109c5761109b6136a8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561114e578360036001846110f49190613706565b81548110611105576111046136a8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b600b54816111bb610d9f565b6111c5919061373a565b1115611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd906137ba565b60405180910390fd5b600a81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611253919061373a565b1115611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613826565b60405180910390fd5b80600c546112a29190613846565b3410156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db906138fa565b60405180910390fd5b6112ee3382612176565b50565b60006112fc83611637565b8210611334576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060038054905090505b808310156113a75761135183611519565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361139a578382036113915750506113d9565b81806001019250505b8280600101935050611340565b6040517f7339954700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b92915050565b6113e76120f8565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161140d9061394b565b60006040518083038185875af1925050503d806000811461144a576040519150601f19603f3d011682016040523d82523d6000602084013e61144f565b606091505b505090508061145d57600080fd5b50565b61147b83838360405180602001604052806000815250611d24565b505050565b600a81565b600760009054906101000a900460ff1681565b60006114a2610d9f565b82106114da576040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b6114ea6120f8565b806008600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611524826120c4565b61155a576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff1660038381548110611587576115866136a8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161357600382815481106115e1576115e06136a8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611620565b818060010192505061155b565b919050565b61162d6120f8565b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361169e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600380549050905060005b81811015611705576116bd81611519565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036116f85782806001019350505b80806001019150506116ac565b508192505050919050565b6117186120f8565b6117226000612194565b565b61172c6120f8565b600760009054906101000a900460ff1615600760006101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001805461178f9061347b565b80601f01602080910402602001604051908101604052809291908181526020018280546117bb9061347b565b80156118085780601f106117dd57610100808354040283529160200191611808565b820191906000526020600020905b8154815290600101906020018083116117eb57829003601f168201915b505050505081565b600b548361181c610d9f565b611826919061373a565b1115611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906137ba565b60405180910390fd5b6118fd82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050503373ffffffffffffffffffffffffffffffffffffffff1660001b6040516020016118d991906139e2565b6040516020818303038152906040528051906020012061225a90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390613a54565b60405180910390fd5b6119963384612176565b505050565b600c5481565b6119a96120f8565b80600e90816119b89190613c20565b5050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a219061358a565b60405180910390fd5b600760009054906101000a900460ff16158015611a915750600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bf357611ab58273ffffffffffffffffffffffffffffffffffffffff166120d5565b15611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec9061361c565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611be69190612b31565b60405180910390a3611ced565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ce49190612b31565b60405180910390a35b5050565b600d60149054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b611d2f848484610dac565b611d3b84848484612281565b611d71576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60086020528060005260406000206000915054906101000a900460ff1681565b6060611da2826120c4565b611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613d64565b60405180910390fd5b6000600e8054611df09061347b565b905011611e0c5760405180602001604052806000815250611e38565b600e611e17836123f2565b604051602001611e28929190613e84565b6040516020818303038152906040525b9050919050565b600b5481565b606060405180602001604052806000815250905090565b600073e65c8ad2a01b48a709c2f4fcfc7f7b4a04c9aea673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eae5760019050611f3b565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b92915050565b611f496120f8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90613f25565b60405180910390fd5b611fc181612194565b50565b611fcc6120f8565b60005b825181101561207657818181518110611feb57611fea6136a8565b5b60200260200101516009600085848151811061200a576120096136a8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061206e90613f45565b915050611fcf565b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060038054905082109050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b612100612552565b73ffffffffffffffffffffffffffffffffffffffff1661211e611758565b73ffffffffffffffffffffffffffffffffffffffff1614612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b90613fd9565b60405180910390fd5b565b61219082826040518060200160405280600081525061255a565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600061226985856125bd565b915091506122768161260e565b819250505092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff163b036122aa57600190506123ea565b8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016122e9949392919061404e565b6020604051808303816000875af192505050801561232557506040513d601f19601f8201168201806040525081019061232291906140af565b60015b61239e573d8060008114612355576040519150601f19603f3d011682016040523d82523d6000602084013e61235a565b606091505b506000815103612396576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b606060008203612439576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061254d565b600082905060005b6000821461246b57808061245490613f45565b915050600a82612464919061410b565b9150612441565b60008167ffffffffffffffff81111561248757612486612f36565b5b6040519080825280601f01601f1916602001820160405280156124b95781602001600182028036833780820191505090505b5090505b60008514612546576001826124d29190613706565b9150600a856124e1919061413c565b60306124ed919061373a565b60f81b818381518110612503576125026136a8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253f919061410b565b94506124bd565b8093505050505b919050565b600033905090565b6125648383612774565b612582600084600160038054905061257c9190613706565b84612281565b6125b8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008060418351036125fe5760008060006020860151925060408601519150606086015160001a90506125f28782858561299b565b94509450505050612607565b60006002915091505b9250929050565b600060048111156126225761262161416d565b5b8160048111156126355761263461416d565b5b0315612771576001600481111561264f5761264e61416d565b5b8160048111156126625761266161416d565b5b036126a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612699906141e8565b60405180910390fd5b600260048111156126b6576126b561416d565b5b8160048111156126c9576126c861416d565b5b03612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270090614254565b60405180910390fd5b6003600481111561271d5761271c61416d565b5b8160048111156127305761272f61416d565b5b03612770576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612767906142e6565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127da576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008103612814576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600380549050905060005b600183038110156128bf576003600181600181540180825580915050039060005260206000200160009054906101000a9050508082018473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48080600101915050612821565b506003839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001826129309190613706565b8161293b919061373a565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156129d6576000600391509150612a74565b6000600187878787604051600081526020016040526040516129fb9493929190614331565b6020604051602081039080840390855afa158015612a1d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a6b57600060019250925050612a74565b80600092509250505b94509492505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ac681612a91565b8114612ad157600080fd5b50565b600081359050612ae381612abd565b92915050565b600060208284031215612aff57612afe612a87565b5b6000612b0d84828501612ad4565b91505092915050565b60008115159050919050565b612b2b81612b16565b82525050565b6000602082019050612b466000830184612b22565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b86578082015181840152602081019050612b6b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bae82612b4c565b612bb88185612b57565b9350612bc8818560208601612b68565b612bd181612b92565b840191505092915050565b60006020820190508181036000830152612bf68184612ba3565b905092915050565b6000819050919050565b612c1181612bfe565b8114612c1c57600080fd5b50565b600081359050612c2e81612c08565b92915050565b600060208284031215612c4a57612c49612a87565b5b6000612c5884828501612c1f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c8c82612c61565b9050919050565b612c9c81612c81565b82525050565b6000602082019050612cb76000830184612c93565b92915050565b612cc681612c81565b8114612cd157600080fd5b50565b600081359050612ce381612cbd565b92915050565b60008060408385031215612d0057612cff612a87565b5b6000612d0e85828601612cd4565b9250506020612d1f85828601612c1f565b9150509250929050565b612d3281612b16565b8114612d3d57600080fd5b50565b600081359050612d4f81612d29565b92915050565b600060208284031215612d6b57612d6a612a87565b5b6000612d7984828501612d40565b91505092915050565b612d8b81612bfe565b82525050565b6000602082019050612da66000830184612d82565b92915050565b600080600060608486031215612dc557612dc4612a87565b5b6000612dd386828701612cd4565b9350506020612de486828701612cd4565b9250506040612df586828701612c1f565b9150509250925092565b60008060408385031215612e1657612e15612a87565b5b6000612e2485828601612c1f565b9250506020612e3585828601612d40565b9150509250929050565b600060208284031215612e5557612e54612a87565b5b6000612e6384828501612cd4565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612e9157612e90612e6c565b5b8235905067ffffffffffffffff811115612eae57612ead612e71565b5b602083019150836001820283011115612eca57612ec9612e76565b5b9250929050565b600080600060408486031215612eea57612ee9612a87565b5b6000612ef886828701612c1f565b935050602084013567ffffffffffffffff811115612f1957612f18612a8c565b5b612f2586828701612e7b565b92509250509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f6e82612b92565b810181811067ffffffffffffffff82111715612f8d57612f8c612f36565b5b80604052505050565b6000612fa0612a7d565b9050612fac8282612f65565b919050565b600067ffffffffffffffff821115612fcc57612fcb612f36565b5b612fd582612b92565b9050602081019050919050565b82818337600083830152505050565b6000613004612fff84612fb1565b612f96565b9050828152602081018484840111156130205761301f612f31565b5b61302b848285612fe2565b509392505050565b600082601f83011261304857613047612e6c565b5b8135613058848260208601612ff1565b91505092915050565b60006020828403121561307757613076612a87565b5b600082013567ffffffffffffffff81111561309557613094612a8c565b5b6130a184828501613033565b91505092915050565b600080604083850312156130c1576130c0612a87565b5b60006130cf85828601612cd4565b92505060206130e085828601612d40565b9150509250929050565b600067ffffffffffffffff82111561310557613104612f36565b5b61310e82612b92565b9050602081019050919050565b600061312e613129846130ea565b612f96565b90508281526020810184848401111561314a57613149612f31565b5b613155848285612fe2565b509392505050565b600082601f83011261317257613171612e6c565b5b813561318284826020860161311b565b91505092915050565b600080600080608085870312156131a5576131a4612a87565b5b60006131b387828801612cd4565b94505060206131c487828801612cd4565b93505060406131d587828801612c1f565b925050606085013567ffffffffffffffff8111156131f6576131f5612a8c565b5b6132028782880161315d565b91505092959194509250565b6000806040838503121561322557613224612a87565b5b600061323385828601612cd4565b925050602061324485828601612cd4565b9150509250929050565b600067ffffffffffffffff82111561326957613268612f36565b5b602082029050602081019050919050565b600061328d6132888461324e565b612f96565b905080838252602082019050602084028301858111156132b0576132af612e76565b5b835b818110156132d957806132c58882612cd4565b8452602084019350506020810190506132b2565b5050509392505050565b600082601f8301126132f8576132f7612e6c565b5b813561330884826020860161327a565b91505092915050565b600067ffffffffffffffff82111561332c5761332b612f36565b5b602082029050602081019050919050565b600061335061334b84613311565b612f96565b9050808382526020820190506020840283018581111561337357613372612e76565b5b835b8181101561339c57806133888882612d40565b845260208401935050602081019050613375565b5050509392505050565b600082601f8301126133bb576133ba612e6c565b5b81356133cb84826020860161333d565b91505092915050565b600080604083850312156133eb576133ea612a87565b5b600083013567ffffffffffffffff81111561340957613408612a8c565b5b613415858286016132e3565b925050602083013567ffffffffffffffff81111561343657613435612a8c565b5b613442858286016133a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061349357607f821691505b6020821081036134a6576134a561344c565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613508602d83612b57565b9150613513826134ac565b604082019050919050565b60006020820190508181036000830152613537816134fb565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613574601a83612b57565b915061357f8261353e565b602082019050919050565b600060208201905081810360008301526135a381613567565b9050919050565b7f53616c65732077696c6c206265206f70656e6564206166746572206d696e742060008201527f697320636f6d706c6574652e0000000000000000000000000000000000000000602082015250565b6000613606602c83612b57565b9150613611826135aa565b604082019050919050565b60006020820190508181036000830152613635816135f9565b9050919050565b7f596f75206e656564205472616e7366657220546f6b656e000000000000000000600082015250565b6000613672601783612b57565b915061367d8261363c565b602082019050919050565b600060208201905081810360008301526136a181613665565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061371182612bfe565b915061371c83612bfe565b9250828203905081811115613734576137336136d7565b5b92915050565b600061374582612bfe565b915061375083612bfe565b9250828201905080821115613768576137676136d7565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b60006137a4601283612b57565b91506137af8261376e565b602082019050919050565b600060208201905081810360008301526137d381613797565b9050919050565b7f457863656564732077616c6c6574206c696d6974000000000000000000000000600082015250565b6000613810601483612b57565b915061381b826137da565b602082019050919050565b6000602082019050818103600083015261383f81613803565b9050919050565b600061385182612bfe565b915061385c83612bfe565b925082820261386a81612bfe565b91508282048414831517613881576138806136d7565b5b5092915050565b7f4e6f7420656e6f756768204554482073656e742c20636865636b20707269636560008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b60006138e4602183612b57565b91506138ef82613888565b604082019050919050565b60006020820190508181036000830152613913816138d7565b9050919050565b600081905092915050565b50565b600061393560008361391a565b915061394082613925565b600082019050919050565b600061395682613928565b9150819050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006139a1601c83613960565b91506139ac8261396b565b601c82019050919050565b6000819050919050565b6000819050919050565b6139dc6139d7826139b7565b6139c1565b82525050565b60006139ed82613994565b91506139f982846139cb565b60208201915081905092915050565b7f5369676e65722061646472657373206d69736d617463682e0000000000000000600082015250565b6000613a3e601883612b57565b9150613a4982613a08565b602082019050919050565b60006020820190508181036000830152613a6d81613a31565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613ad67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a99565b613ae08683613a99565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613b1d613b18613b1384612bfe565b613af8565b612bfe565b9050919050565b6000819050919050565b613b3783613b02565b613b4b613b4382613b24565b848454613aa6565b825550505050565b600090565b613b60613b53565b613b6b818484613b2e565b505050565b5b81811015613b8f57613b84600082613b58565b600181019050613b71565b5050565b601f821115613bd457613ba581613a74565b613bae84613a89565b81016020851015613bbd578190505b613bd1613bc985613a89565b830182613b70565b50505b505050565b600082821c905092915050565b6000613bf760001984600802613bd9565b1980831691505092915050565b6000613c108383613be6565b9150826002028217905092915050565b613c2982612b4c565b67ffffffffffffffff811115613c4257613c41612f36565b5b613c4c825461347b565b613c57828285613b93565b600060209050601f831160018114613c8a5760008415613c78578287015190505b613c828582613c04565b865550613cea565b601f198416613c9886613a74565b60005b82811015613cc057848901518255600182019150602085019450602081019050613c9b565b86831015613cdd5784890151613cd9601f891682613be6565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613d4e602f83612b57565b9150613d5982613cf2565b604082019050919050565b60006020820190508181036000830152613d7d81613d41565b9050919050565b60008154613d918161347b565b613d9b8186613960565b94506001821660008114613db65760018114613dcb57613dfe565b60ff1983168652811515820286019350613dfe565b613dd485613a74565b60005b83811015613df657815481890152600182019150602081019050613dd7565b838801955050505b50505092915050565b6000613e1282612b4c565b613e1c8185613960565b9350613e2c818560208601612b68565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613e6e600583613960565b9150613e7982613e38565b600582019050919050565b6000613e908285613d84565b9150613e9c8284613e07565b9150613ea782613e61565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f0f602683612b57565b9150613f1a82613eb3565b604082019050919050565b60006020820190508181036000830152613f3e81613f02565b9050919050565b6000613f5082612bfe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f8257613f816136d7565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc3602083612b57565b9150613fce82613f8d565b602082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061402082613ff9565b61402a8185614004565b935061403a818560208601612b68565b61404381612b92565b840191505092915050565b60006080820190506140636000830187612c93565b6140706020830186612c93565b61407d6040830185612d82565b818103606083015261408f8184614015565b905095945050505050565b6000815190506140a981612abd565b92915050565b6000602082840312156140c5576140c4612a87565b5b60006140d38482850161409a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061411682612bfe565b915061412183612bfe565b925082614131576141306140dc565b5b828204905092915050565b600061414782612bfe565b915061415283612bfe565b925082614162576141616140dc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006141d2601883612b57565b91506141dd8261419c565b602082019050919050565b60006020820190508181036000830152614201816141c5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061423e601f83612b57565b915061424982614208565b602082019050919050565b6000602082019050818103600083015261426d81614231565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006142d0602283612b57565b91506142db82614274565b604082019050919050565b600060208201905081810360008301526142ff816142c3565b9050919050565b61430f816139b7565b82525050565b600060ff82169050919050565b61432b81614315565b82525050565b60006080820190506143466000830187614306565b6143536020830186614322565b6143606040830185614306565b61436d6060830184614306565b9594505050505056fea2646970667358221220729454270fabe347b43ff6e65ed7aa3289b7e37e61be6979a792a85bc1c875ca64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061021a5760003560e01c8063715018a611610123578063b1f7f0eb116100ab578063e8a3d4851161006f578063e8a3d485146107b5578063e985e9c5146107e0578063f2fde38b1461081d578063fdb8e34e14610846578063fddcb5ea1461086f5761021a565b8063b1f7f0eb146106aa578063b88d4fde146106e7578063c080519714610710578063c87b56dd1461074d578063d5abeb011461078a5761021a565b80639e852f75116100f25780639e852f75146105e6578063a035b1fe14610602578063a0bcfc7f1461062d578063a22cb46514610656578063b187bd261461067f5761021a565b8063715018a614610562578063801fe59b146105795780638da5cb5b1461059057806395d89b41146105bb5761021a565b80633ccfd60b116101a65780634f6ccce7116101755780634f6ccce71461045957806355a55465146104965780636352211e146104bf5780636f8b44b0146104fc57806370a08231146105255761021a565b80633ccfd60b146103c357806342842e0e146103da578063453c2310146104035780634aaf78f11461042e5761021a565b806316c38b3c116101ed57806316c38b3c146102ed57806318160ddd1461031657806323b872dd146103415780632db115441461036a5780632f745c59146103865761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b5061024660048036038101906102419190612ae9565b6108ac565b6040516102539190612b31565b60405180910390f35b34801561026857600080fd5b5061027161096e565b60405161027e9190612bdc565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190612c34565b6109fc565b6040516102bb9190612ca2565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190612ce9565b610a81565b005b3480156102f957600080fd5b50610314600480360381019061030f9190612d55565b610d7a565b005b34801561032257600080fd5b5061032b610d9f565b6040516103389190612d91565b60405180910390f35b34801561034d57600080fd5b5061036860048036038101906103639190612dac565b610dac565b005b610384600480360381019061037f9190612c34565b6111af565b005b34801561039257600080fd5b506103ad60048036038101906103a89190612ce9565b6112f1565b6040516103ba9190612d91565b60405180910390f35b3480156103cf57600080fd5b506103d86113df565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190612dac565b611460565b005b34801561040f57600080fd5b50610418611480565b6040516104259190612d91565b60405180910390f35b34801561043a57600080fd5b50610443611485565b6040516104509190612b31565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190612c34565b611498565b60405161048d9190612d91565b60405180910390f35b3480156104a257600080fd5b506104bd60048036038101906104b89190612dff565b6114e2565b005b3480156104cb57600080fd5b506104e660048036038101906104e19190612c34565b611519565b6040516104f39190612ca2565b60405180910390f35b34801561050857600080fd5b50610523600480360381019061051e9190612c34565b611625565b005b34801561053157600080fd5b5061054c60048036038101906105479190612e3f565b611637565b6040516105599190612d91565b60405180910390f35b34801561056e57600080fd5b50610577611710565b005b34801561058557600080fd5b5061058e611724565b005b34801561059c57600080fd5b506105a5611758565b6040516105b29190612ca2565b60405180910390f35b3480156105c757600080fd5b506105d0611782565b6040516105dd9190612bdc565b60405180910390f35b61060060048036038101906105fb9190612ed1565b611810565b005b34801561060e57600080fd5b5061061761199b565b6040516106249190612d91565b60405180910390f35b34801561063957600080fd5b50610654600480360381019061064f9190613061565b6119a1565b005b34801561066257600080fd5b5061067d600480360381019061067891906130aa565b6119bc565b005b34801561068b57600080fd5b50610694611cf1565b6040516106a19190612b31565b60405180910390f35b3480156106b657600080fd5b506106d160048036038101906106cc9190612e3f565b611d04565b6040516106de9190612b31565b60405180910390f35b3480156106f357600080fd5b5061070e6004803603810190610709919061318b565b611d24565b005b34801561071c57600080fd5b5061073760048036038101906107329190612c34565b611d77565b6040516107449190612b31565b60405180910390f35b34801561075957600080fd5b50610774600480360381019061076f9190612c34565b611d97565b6040516107819190612bdc565b60405180910390f35b34801561079657600080fd5b5061079f611e3f565b6040516107ac9190612d91565b60405180910390f35b3480156107c157600080fd5b506107ca611e45565b6040516107d79190612bdc565b60405180910390f35b3480156107ec57600080fd5b506108076004803603810190610802919061320e565b611e5c565b6040516108149190612b31565b60405180910390f35b34801561082957600080fd5b50610844600480360381019061083f9190612e3f565b611f41565b005b34801561085257600080fd5b5061086d600480360381019061086891906133d4565b611fc4565b005b34801561087b57600080fd5b5061089660048036038101906108919190612e3f565b61207b565b6040516108a39190612d91565b60405180910390f35b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061090757506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610937575063780e9d6360e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109675750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6000805461097b9061347b565b80601f01602080910402602001604051908101604052809291908181526020018280546109a79061347b565b80156109f45780601f106109c9576101008083540402835291602001916109f4565b820191906000526020600020905b8154815290600101906020018083116109d757829003601f168201915b505050505081565b6000610a07826120c4565b610a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3d9061351e565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae69061358a565b60405180910390fd5b6000610afa82611519565b90508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610b3f5750610b3d8133611e5c565b155b15610b76576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600760009054906101000a900460ff16158015610bb157506008600083815260200190815260200160002060009054906101000a900460ff16155b15610cc757610bd58373ffffffffffffffffffffffffffffffffffffffff166120d5565b15610c15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0c9061361c565b60405180910390fd5b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4610d75565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505050565b610d826120f8565b80600d60146101000a81548160ff02191690831515021790555050565b6000600380549050905090565b600260009054906101000a900460ff16610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df290613688565b60405180910390fd5b610e04816120c4565b610e3a576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16610e5a82611519565b73ffffffffffffffffffffffffffffffffffffffff1614610ea7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f0d576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610f7c5750610f4d826109fc565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80610f8d5750610f8c8433611e5c565b5b905080610fc6576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690558260038381548110611011576110106136a8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000821180156110df5750600073ffffffffffffffffffffffffffffffffffffffff16600360018461108b9190613706565b8154811061109c5761109b6136a8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16145b1561114e578360036001846110f49190613706565b81548110611105576111046136a8565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b818373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a450505050565b600b54816111bb610d9f565b6111c5919061373a565b1115611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd906137ba565b60405180910390fd5b600a81600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611253919061373a565b1115611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613826565b60405180910390fd5b80600c546112a29190613846565b3410156112e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112db906138fa565b60405180910390fd5b6112ee3382612176565b50565b60006112fc83611637565b8210611334576040517f0ddac30e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060038054905090505b808310156113a75761135183611519565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361139a578382036113915750506113d9565b81806001019250505b8280600101935050611340565b6040517f7339954700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b92915050565b6113e76120f8565b60003373ffffffffffffffffffffffffffffffffffffffff164760405161140d9061394b565b60006040518083038185875af1925050503d806000811461144a576040519150601f19603f3d011682016040523d82523d6000602084013e61144f565b606091505b505090508061145d57600080fd5b50565b61147b83838360405180602001604052806000815250611d24565b505050565b600a81565b600760009054906101000a900460ff1681565b60006114a2610d9f565b82106114da576040517fa723001c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b819050919050565b6114ea6120f8565b806008600084815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611524826120c4565b61155a576040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff1660038381548110611587576115866136a8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461161357600382815481106115e1576115e06136a8565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050611620565b818060010192505061155b565b919050565b61162d6120f8565b80600b8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361169e576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080600380549050905060005b81811015611705576116bd81611519565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036116f85782806001019350505b80806001019150506116ac565b508192505050919050565b6117186120f8565b6117226000612194565b565b61172c6120f8565b600760009054906101000a900460ff1615600760006101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6001805461178f9061347b565b80601f01602080910402602001604051908101604052809291908181526020018280546117bb9061347b565b80156118085780601f106117dd57610100808354040283529160200191611808565b820191906000526020600020905b8154815290600101906020018083116117eb57829003601f168201915b505050505081565b600b548361181c610d9f565b611826919061373a565b1115611867576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185e906137ba565b60405180910390fd5b6118fd82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050503373ffffffffffffffffffffffffffffffffffffffff1660001b6040516020016118d991906139e2565b6040516020818303038152906040528051906020012061225a90919063ffffffff16565b73ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461198c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198390613a54565b60405180910390fd5b6119963384612176565b505050565b600c5481565b6119a96120f8565b80600e90816119b89190613c20565b5050565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a219061358a565b60405180910390fd5b600760009054906101000a900460ff16158015611a915750600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611bf357611ab58273ffffffffffffffffffffffffffffffffffffffff166120d5565b15611af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aec9061361c565b60405180910390fd5b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611be69190612b31565b60405180910390a3611ced565b80600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ce49190612b31565b60405180910390a35b5050565b600d60149054906101000a900460ff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b611d2f848484610dac565b611d3b84848484612281565b611d71576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b60086020528060005260406000206000915054906101000a900460ff1681565b6060611da2826120c4565b611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd890613d64565b60405180910390fd5b6000600e8054611df09061347b565b905011611e0c5760405180602001604052806000815250611e38565b600e611e17836123f2565b604051602001611e28929190613e84565b6040516020818303038152906040525b9050919050565b600b5481565b606060405180602001604052806000815250905090565b600073e65c8ad2a01b48a709c2f4fcfc7f7b4a04c9aea673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611eae5760019050611f3b565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b92915050565b611f496120f8565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90613f25565b60405180910390fd5b611fc181612194565b50565b611fcc6120f8565b60005b825181101561207657818181518110611feb57611fea6136a8565b5b60200260200101516009600085848151811061200a576120096136a8565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061206e90613f45565b915050611fcf565b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600060038054905082109050919050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b612100612552565b73ffffffffffffffffffffffffffffffffffffffff1661211e611758565b73ffffffffffffffffffffffffffffffffffffffff1614612174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216b90613fd9565b60405180910390fd5b565b61219082826040518060200160405280600081525061255a565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080600061226985856125bd565b915091506122768161260e565b819250505092915050565b6000808473ffffffffffffffffffffffffffffffffffffffff163b036122aa57600190506123ea565b8373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016122e9949392919061404e565b6020604051808303816000875af192505050801561232557506040513d601f19601f8201168201806040525081019061232291906140af565b60015b61239e573d8060008114612355576040519150601f19603f3d011682016040523d82523d6000602084013e61235a565b606091505b506000815103612396576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150505b949350505050565b606060008203612439576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061254d565b600082905060005b6000821461246b57808061245490613f45565b915050600a82612464919061410b565b9150612441565b60008167ffffffffffffffff81111561248757612486612f36565b5b6040519080825280601f01601f1916602001820160405280156124b95781602001600182028036833780820191505090505b5090505b60008514612546576001826124d29190613706565b9150600a856124e1919061413c565b60306124ed919061373a565b60f81b818381518110612503576125026136a8565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561253f919061410b565b94506124bd565b8093505050505b919050565b600033905090565b6125648383612774565b612582600084600160038054905061257c9190613706565b84612281565b6125b8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60008060418351036125fe5760008060006020860151925060408601519150606086015160001a90506125f28782858561299b565b94509450505050612607565b60006002915091505b9250929050565b600060048111156126225761262161416d565b5b8160048111156126355761263461416d565b5b0315612771576001600481111561264f5761264e61416d565b5b8160048111156126625761266161416d565b5b036126a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612699906141e8565b60405180910390fd5b600260048111156126b6576126b561416d565b5b8160048111156126c9576126c861416d565b5b03612709576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270090614254565b60405180910390fd5b6003600481111561271d5761271c61416d565b5b8160048111156127305761272f61416d565b5b03612770576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612767906142e6565b60405180910390fd5b5b50565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127da576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008103612814576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600380549050905060005b600183038110156128bf576003600181600181540180825580915050039060005260206000200160009054906101000a9050508082018473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48080600101915050612821565b506003839080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001826129309190613706565b8161293b919061373a565b8373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156129d6576000600391509150612a74565b6000600187878787604051600081526020016040526040516129fb9493929190614331565b6020604051602081039080840390855afa158015612a1d573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a6b57600060019250925050612a74565b80600092509250505b94509492505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ac681612a91565b8114612ad157600080fd5b50565b600081359050612ae381612abd565b92915050565b600060208284031215612aff57612afe612a87565b5b6000612b0d84828501612ad4565b91505092915050565b60008115159050919050565b612b2b81612b16565b82525050565b6000602082019050612b466000830184612b22565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612b86578082015181840152602081019050612b6b565b60008484015250505050565b6000601f19601f8301169050919050565b6000612bae82612b4c565b612bb88185612b57565b9350612bc8818560208601612b68565b612bd181612b92565b840191505092915050565b60006020820190508181036000830152612bf68184612ba3565b905092915050565b6000819050919050565b612c1181612bfe565b8114612c1c57600080fd5b50565b600081359050612c2e81612c08565b92915050565b600060208284031215612c4a57612c49612a87565b5b6000612c5884828501612c1f565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c8c82612c61565b9050919050565b612c9c81612c81565b82525050565b6000602082019050612cb76000830184612c93565b92915050565b612cc681612c81565b8114612cd157600080fd5b50565b600081359050612ce381612cbd565b92915050565b60008060408385031215612d0057612cff612a87565b5b6000612d0e85828601612cd4565b9250506020612d1f85828601612c1f565b9150509250929050565b612d3281612b16565b8114612d3d57600080fd5b50565b600081359050612d4f81612d29565b92915050565b600060208284031215612d6b57612d6a612a87565b5b6000612d7984828501612d40565b91505092915050565b612d8b81612bfe565b82525050565b6000602082019050612da66000830184612d82565b92915050565b600080600060608486031215612dc557612dc4612a87565b5b6000612dd386828701612cd4565b9350506020612de486828701612cd4565b9250506040612df586828701612c1f565b9150509250925092565b60008060408385031215612e1657612e15612a87565b5b6000612e2485828601612c1f565b9250506020612e3585828601612d40565b9150509250929050565b600060208284031215612e5557612e54612a87565b5b6000612e6384828501612cd4565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612e9157612e90612e6c565b5b8235905067ffffffffffffffff811115612eae57612ead612e71565b5b602083019150836001820283011115612eca57612ec9612e76565b5b9250929050565b600080600060408486031215612eea57612ee9612a87565b5b6000612ef886828701612c1f565b935050602084013567ffffffffffffffff811115612f1957612f18612a8c565b5b612f2586828701612e7b565b92509250509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612f6e82612b92565b810181811067ffffffffffffffff82111715612f8d57612f8c612f36565b5b80604052505050565b6000612fa0612a7d565b9050612fac8282612f65565b919050565b600067ffffffffffffffff821115612fcc57612fcb612f36565b5b612fd582612b92565b9050602081019050919050565b82818337600083830152505050565b6000613004612fff84612fb1565b612f96565b9050828152602081018484840111156130205761301f612f31565b5b61302b848285612fe2565b509392505050565b600082601f83011261304857613047612e6c565b5b8135613058848260208601612ff1565b91505092915050565b60006020828403121561307757613076612a87565b5b600082013567ffffffffffffffff81111561309557613094612a8c565b5b6130a184828501613033565b91505092915050565b600080604083850312156130c1576130c0612a87565b5b60006130cf85828601612cd4565b92505060206130e085828601612d40565b9150509250929050565b600067ffffffffffffffff82111561310557613104612f36565b5b61310e82612b92565b9050602081019050919050565b600061312e613129846130ea565b612f96565b90508281526020810184848401111561314a57613149612f31565b5b613155848285612fe2565b509392505050565b600082601f83011261317257613171612e6c565b5b813561318284826020860161311b565b91505092915050565b600080600080608085870312156131a5576131a4612a87565b5b60006131b387828801612cd4565b94505060206131c487828801612cd4565b93505060406131d587828801612c1f565b925050606085013567ffffffffffffffff8111156131f6576131f5612a8c565b5b6132028782880161315d565b91505092959194509250565b6000806040838503121561322557613224612a87565b5b600061323385828601612cd4565b925050602061324485828601612cd4565b9150509250929050565b600067ffffffffffffffff82111561326957613268612f36565b5b602082029050602081019050919050565b600061328d6132888461324e565b612f96565b905080838252602082019050602084028301858111156132b0576132af612e76565b5b835b818110156132d957806132c58882612cd4565b8452602084019350506020810190506132b2565b5050509392505050565b600082601f8301126132f8576132f7612e6c565b5b813561330884826020860161327a565b91505092915050565b600067ffffffffffffffff82111561332c5761332b612f36565b5b602082029050602081019050919050565b600061335061334b84613311565b612f96565b9050808382526020820190506020840283018581111561337357613372612e76565b5b835b8181101561339c57806133888882612d40565b845260208401935050602081019050613375565b5050509392505050565b600082601f8301126133bb576133ba612e6c565b5b81356133cb84826020860161333d565b91505092915050565b600080604083850312156133eb576133ea612a87565b5b600083013567ffffffffffffffff81111561340957613408612a8c565b5b613415858286016132e3565b925050602083013567ffffffffffffffff81111561343657613435612a8c565b5b613442858286016133a6565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061349357607f821691505b6020821081036134a6576134a561344c565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b6000613508602d83612b57565b9150613513826134ac565b604082019050919050565b60006020820190508181036000830152613537816134fb565b9050919050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b6000613574601a83612b57565b915061357f8261353e565b602082019050919050565b600060208201905081810360008301526135a381613567565b9050919050565b7f53616c65732077696c6c206265206f70656e6564206166746572206d696e742060008201527f697320636f6d706c6574652e0000000000000000000000000000000000000000602082015250565b6000613606602c83612b57565b9150613611826135aa565b604082019050919050565b60006020820190508181036000830152613635816135f9565b9050919050565b7f596f75206e656564205472616e7366657220546f6b656e000000000000000000600082015250565b6000613672601783612b57565b915061367d8261363c565b602082019050919050565b600060208201905081810360008301526136a181613665565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061371182612bfe565b915061371c83612bfe565b9250828203905081811115613734576137336136d7565b5b92915050565b600061374582612bfe565b915061375083612bfe565b9250828201905080821115613768576137676136d7565b5b92915050565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b60006137a4601283612b57565b91506137af8261376e565b602082019050919050565b600060208201905081810360008301526137d381613797565b9050919050565b7f457863656564732077616c6c6574206c696d6974000000000000000000000000600082015250565b6000613810601483612b57565b915061381b826137da565b602082019050919050565b6000602082019050818103600083015261383f81613803565b9050919050565b600061385182612bfe565b915061385c83612bfe565b925082820261386a81612bfe565b91508282048414831517613881576138806136d7565b5b5092915050565b7f4e6f7420656e6f756768204554482073656e742c20636865636b20707269636560008201527f2100000000000000000000000000000000000000000000000000000000000000602082015250565b60006138e4602183612b57565b91506138ef82613888565b604082019050919050565b60006020820190508181036000830152613913816138d7565b9050919050565b600081905092915050565b50565b600061393560008361391a565b915061394082613925565b600082019050919050565b600061395682613928565b9150819050919050565b600081905092915050565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b60006139a1601c83613960565b91506139ac8261396b565b601c82019050919050565b6000819050919050565b6000819050919050565b6139dc6139d7826139b7565b6139c1565b82525050565b60006139ed82613994565b91506139f982846139cb565b60208201915081905092915050565b7f5369676e65722061646472657373206d69736d617463682e0000000000000000600082015250565b6000613a3e601883612b57565b9150613a4982613a08565b602082019050919050565b60006020820190508181036000830152613a6d81613a31565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613ad67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613a99565b613ae08683613a99565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613b1d613b18613b1384612bfe565b613af8565b612bfe565b9050919050565b6000819050919050565b613b3783613b02565b613b4b613b4382613b24565b848454613aa6565b825550505050565b600090565b613b60613b53565b613b6b818484613b2e565b505050565b5b81811015613b8f57613b84600082613b58565b600181019050613b71565b5050565b601f821115613bd457613ba581613a74565b613bae84613a89565b81016020851015613bbd578190505b613bd1613bc985613a89565b830182613b70565b50505b505050565b600082821c905092915050565b6000613bf760001984600802613bd9565b1980831691505092915050565b6000613c108383613be6565b9150826002028217905092915050565b613c2982612b4c565b67ffffffffffffffff811115613c4257613c41612f36565b5b613c4c825461347b565b613c57828285613b93565b600060209050601f831160018114613c8a5760008415613c78578287015190505b613c828582613c04565b865550613cea565b601f198416613c9886613a74565b60005b82811015613cc057848901518255600182019150602085019450602081019050613c9b565b86831015613cdd5784890151613cd9601f891682613be6565b8355505b6001600288020188555050505b505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613d4e602f83612b57565b9150613d5982613cf2565b604082019050919050565b60006020820190508181036000830152613d7d81613d41565b9050919050565b60008154613d918161347b565b613d9b8186613960565b94506001821660008114613db65760018114613dcb57613dfe565b60ff1983168652811515820286019350613dfe565b613dd485613a74565b60005b83811015613df657815481890152600182019150602081019050613dd7565b838801955050505b50505092915050565b6000613e1282612b4c565b613e1c8185613960565b9350613e2c818560208601612b68565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613e6e600583613960565b9150613e7982613e38565b600582019050919050565b6000613e908285613d84565b9150613e9c8284613e07565b9150613ea782613e61565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613f0f602683612b57565b9150613f1a82613eb3565b604082019050919050565b60006020820190508181036000830152613f3e81613f02565b9050919050565b6000613f5082612bfe565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f8257613f816136d7565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613fc3602083612b57565b9150613fce82613f8d565b602082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061402082613ff9565b61402a8185614004565b935061403a818560208601612b68565b61404381612b92565b840191505092915050565b60006080820190506140636000830187612c93565b6140706020830186612c93565b61407d6040830185612d82565b818103606083015261408f8184614015565b905095945050505050565b6000815190506140a981612abd565b92915050565b6000602082840312156140c5576140c4612a87565b5b60006140d38482850161409a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061411682612bfe565b915061412183612bfe565b925082614131576141306140dc565b5b828204905092915050565b600061414782612bfe565b915061415283612bfe565b925082614162576141616140dc565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b60006141d2601883612b57565b91506141dd8261419c565b602082019050919050565b60006020820190508181036000830152614201816141c5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b600061423e601f83612b57565b915061424982614208565b602082019050919050565b6000602082019050818103600083015261426d81614231565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b60006142d0602283612b57565b91506142db82614274565b604082019050919050565b600060208201905081810360008301526142ff816142c3565b9050919050565b61430f816139b7565b82525050565b600060ff82169050919050565b61432b81614315565b82525050565b60006080820190506143466000830187614306565b6143536020830186614322565b6143606040830185614306565b61436d6060830184614306565b9594505050505056fea2646970667358221220729454270fabe347b43ff6e65ed7aa3289b7e37e61be6979a792a85bc1c875ca64736f6c63430008120033

Deployed Bytecode Sourcemap

21442:2853:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3971:426;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2531:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8358:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7544:756;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22244:80;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4663:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9724:1068;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22940:365;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4946:631;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22329:177;;;;;;;;;;;;;:::i;:::-;;10863:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21556:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3277:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5654:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23907:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7008:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22511:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6276:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15272:103;;;;;;;;;;;;;:::i;:::-;;23793:106;;;;;;;;;;;;;:::i;:::-;;15033:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2558:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23313:472;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21633:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22154:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8619:695;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21706:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3398:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11100:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3329:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22610:325;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21598:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21944:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9383:276;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15385:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24055:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22030:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3971:426;4047:4;4099:10;4084:25;;:11;:25;;;;:101;;;;4175:10;4160:25;;:11;:25;;;;4084:101;:177;;;;4251:10;4236:25;;:11;:25;;;;4084:177;:263;;;;4337:10;4322:25;;:11;:25;;;;4084:263;4064:283;;3971:426;;;:::o;2531:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8358:195::-;8417:7;8441:16;8449:7;8441;:16::i;:::-;8433:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;8523:15;:24;8539:7;8523:24;;;;;;;;;;;;;;;;;;;;;8516:31;;8358:195;;;:::o;7544:756::-;7630:10;7624:16;;:2;:16;;;7616:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;7682:13;7698:16;7706:7;7698;:16::i;:::-;7682:32;;7743:5;7729:19;;:10;:19;;;;:59;;;;;7753:35;7770:5;7777:10;7753:16;:35::i;:::-;7752:36;7729:59;7725:134;;;7812:35;;;;;;;;;;;;;;7725:134;7873:17;;;;;;;;;;;7872:18;:51;;;;;7895:19;:28;7915:7;7895:28;;;;;;;;;;;;;;;;;;;;;7894:29;7872:51;7869:424;;;7943:15;:2;:13;;;:15::i;:::-;7939:233;;;7979:55;;;;;;;;;;:::i;:::-;;;;;;;;7939:233;8102:2;8075:15;:24;8091:7;8075:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;8148:7;8144:2;8128:28;;8137:5;8128:28;;;;;;;;;;;;7869:424;;;8231:2;8204:15;:24;8220:7;8204:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;8273:7;8269:2;8253:28;;8262:5;8253:28;;;;;;;;;;;;7869:424;7605:695;7544:756;;:::o;22244:80::-;14992:13;:11;:13::i;:::-;22313:6:::1;22302:8;;:17;;;;;;;;;;;;;;;;;;22244:80:::0;:::o;4663:93::-;4707:7;4734;:14;;;;4727:21;;4663:93;:::o;9724:1068::-;9857:11;;;;;;;;;;;9849:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;9911:16;9919:7;9911;:16::i;:::-;9906:61;;9936:31;;;;;;;;;;;;;;9906:61;10002:4;9982:24;;:16;9990:7;9982;:16::i;:::-;:24;;;9978:65;;10015:28;;;;;;;;;;;;;;9978:65;10072:1;10058:16;;:2;:16;;;10054:52;;10083:23;;;;;;;;;;;;;;10054:52;10119:22;10159:4;10145:18;;:10;:18;;;:69;;;;10194:20;10206:7;10194:11;:20::i;:::-;10180:34;;:10;:34;;;10145:69;:120;;;;10231:34;10248:4;10254:10;10231:16;:34::i;:::-;10145:120;10119:147;;10282:17;10277:66;;10308:35;;;;;;;;;;;;;;10277:66;10418:15;:24;10434:7;10418:24;;;;;;;;;;;;10411:31;;;;;;;;;;;10472:2;10453:7;10461;10453:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;10645:1;10635:7;:11;:49;;;;;10682:1;10650:34;;:7;10668:1;10658:7;:11;;;;:::i;:::-;10650:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:34;;;10635:49;10631:109;;;10724:4;10701:7;10719:1;10709:7;:11;;;;:::i;:::-;10701:20;;;;;;;;:::i;:::-;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;10631:109;10776:7;10772:2;10757:27;;10766:4;10757:27;;;;;;;;;;;;9838:954;9724:1068;;;:::o;22940:365::-;23041:9;;23028;23012:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:38;;23004:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21592:2;23125:9;23092:18;:30;23111:10;23092:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:58;;23083:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;23215:9;23207:5;;:17;;;;:::i;:::-;23194:9;:30;;23186:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23268:32;23278:10;23290:9;23268;:32::i;:::-;22940:365;:::o;4946:631::-;5034:15;5075:16;5085:5;5075:9;:16::i;:::-;5066:5;:25;5062:61;;5100:23;;;;;;;;;;;;;;5062:61;5136:13;5160:11;5174:7;:14;;;;5160:28;;5294:217;5318:3;5308:7;:13;5294:217;;;5366:16;5374:7;5366;:16::i;:::-;5357:25;;:5;:25;;;5353:143;;5420:5;5411;:14;5407:69;;5427:14;;;;5407:69;5469:7;;;;;;;5353:143;5323:9;;;;;;;5294:217;;;5541:28;;;;;;;;;;;;;;4946:631;;;;;:::o;22329:177::-;14992:13;:11;:13::i;:::-;22374:12:::1;22400:10;22392:24;;22438:21;22392:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22373:101;;;22493:7;22485:16;;;::::0;::::1;;22368:138;22329:177::o:0;10863:166::-;10987:34;11004:4;11010:2;11014;10987:34;;;;;;;;;;;;:16;:34::i;:::-;10863:166;;;:::o;21556:38::-;21592:2;21556:38;:::o;3277:37::-;;;;;;;;;;;;;:::o;5654:175::-;5720:7;5753:13;:11;:13::i;:::-;5744:5;:22;5740:58;;5775:23;;;;;;;;;;;;;;5740:58;5816:5;5809:12;;5654:175;;;:::o;23907:140::-;14992:13;:11;:13::i;:::-;24033:6:::1;24001:19;:29;24021:8;24001:29;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;23907:140:::0;;:::o;7008:480::-;7071:7;7096:16;7104:7;7096;:16::i;:::-;7091:61;;7121:31;;;;;;;;;;;;;;7091:61;7260:163;7338:1;7310:30;;:7;7318;7310:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;7306:102;;7372:7;7380;7372:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7365:23;;;;7306:102;7276:9;;;;;;;7260:163;;7008:480;;;;:::o;22511:94::-;14992:13;:11;:13::i;:::-;22588:12:::1;22576:9;:24;;;;22511:94:::0;:::o;6276:494::-;6339:7;6380:1;6363:19;;:5;:19;;;6359:60;;6391:28;;;;;;;;;;;;;;6359:60;6432:13;6456:11;6470:7;:14;;;;6456:28;;6595:9;6590:139;6610:3;6606:1;:7;6590:139;;;6652:10;6660:1;6652:7;:10::i;:::-;6643:19;;:5;:19;;;6639:75;;6687:7;;;;;;;6639:75;6615:3;;;;;;;6590:139;;;;6757:5;6750:12;;;;6276:494;;;:::o;15272:103::-;14992:13;:11;:13::i;:::-;15337:30:::1;15364:1;15337:18;:30::i;:::-;15272:103::o:0;23793:106::-;14992:13;:11;:13::i;:::-;23874:17:::1;;;;;;;;;;;23873:18;23853:17;;:38;;;;;;;;;;;;;;;;;;23793:106::o:0;15033:87::-;15079:7;15106:6;;;;;;;;;;;15099:13;;15033:87;:::o;2558:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23313:472::-;23443:9;;23430;23414:13;:11;:13::i;:::-;:25;;;;:::i;:::-;:38;;23406:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23511:194;23695:9;;23511:194;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23647:10;23631:28;;23623:37;;23535:140;;;;;;;;:::i;:::-;;;;;;;;;;;;;23511:175;;;;;;:183;;:194;;;;:::i;:::-;23493:212;;:14;;;;;;;;;;;:212;;;23485:249;;;;;;;;;;;;:::i;:::-;;;;;;;;;23745:32;23755:10;23767:9;23745;:32::i;:::-;23313:472;;;:::o;21633:30::-;;;;:::o;22154:85::-;14992:13;:11;:13::i;:::-;22231:3:::1;22220:8;:14;;;;;;:::i;:::-;;22154:85:::0;:::o;8619:695::-;8725:10;8713:22;;:8;:22;;;8705:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;8791:17;;;;;;;;;;;8790:18;:61;;;;;8813:26;:38;8840:10;8813:38;;;;;;;;;;;;;;;;;;;;;;;;;8812:39;8790:61;8787:520;;;8871:21;:8;:19;;;:21::i;:::-;8867:279;;;8913:55;;;;;;;;;;:::i;:::-;;;;;;;;8867:279;9052:8;9009:18;:30;9028:10;9009:30;;;;;;;;;;;;;;;:40;9040:8;9009:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;9111:8;9084:46;;9099:10;9084:46;;;9121:8;9084:46;;;;;;:::i;:::-;;;;;;;;8787:520;;;9221:8;9178:18;:30;9197:10;9178:30;;;;;;;;;;;;;;;:40;9209:8;9178:40;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;9276:8;9249:46;;9264:10;9249:46;;;9286:8;9249:46;;;;;;:::i;:::-;;;;;;;;8787:520;8619:695;;:::o;21706:28::-;;;;;;;;;;;;;:::o;3398:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;11100:295::-;11252:26;11265:4;11271:2;11275;11252:12;:26::i;:::-;11296:42;11319:4;11325:2;11329;11333:4;11296:22;:42::i;:::-;11291:96;;11347:40;;;;;;;;;;;;;;11291:96;11100:295;;;;:::o;3329:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;22610:325::-;22684:13;22720:16;22728:7;22720;:16::i;:::-;22712:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22831:1;22812:8;22806:22;;;;;:::i;:::-;;;:26;:124;;;;;;;;;;;;;;;;;22873:8;22883:18;:7;:16;:18::i;:::-;22856:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22806:124;22799:131;;22610:325;;;:::o;21598:28::-;;;;:::o;21944:78::-;21988:13;22008:9;;;;;;;;;;;;;;21944:78;:::o;9383:276::-;9507:4;9542:42;9532:52;;:8;:52;;;9529:70;;9593:4;9586:11;;;;9529:70;9616:18;:25;9635:5;9616:25;;;;;;;;;;;;;;;:35;9642:8;9616:35;;;;;;;;;;;;;;;;;;;;;;;;;9609:42;;9383:276;;;;;:::o;15385:201::-;14992:13;:11;:13::i;:::-;15494:1:::1;15474:22;;:8;:22;;::::0;15466:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15550:28;15569:8;15550:18;:28::i;:::-;15385:201:::0;:::o;24055:237::-;14992:13;:11;:13::i;:::-;24172:9:::1;24167:118;24191:8;:15;24187:1;:19;24167:118;;;24266:6;24273:1;24266:9;;;;;;;;:::i;:::-;;;;;;;;24224:26;:39;24251:8;24260:1;24251:11;;;;;;;;:::i;:::-;;;;;;;;24224:39;;;;;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;24208:3;;;;;:::i;:::-;;;;24167:118;;;;24055:237:::0;;:::o;22030:116::-;22089:4;22113:18;:25;22132:5;22113:25;;;;;;;;;;;;;;;;22106:32;;22030:116;;;:::o;11468:121::-;11533:4;11567:7;:14;;;;11557:7;:24;11550:31;;11468:121;;;:::o;15920:326::-;15980:4;16237:1;16215:7;:19;;;:23;16208:30;;15920:326;;;:::o;15128:132::-;15203:12;:10;:12::i;:::-;15192:23;;:7;:5;:7::i;:::-;:23;;;15184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15128:132::o;13423:102::-;13495:22;13505:2;13509:3;13495:22;;;;;;;;;;;;:9;:22::i;:::-;13423:102;;:::o;15597:191::-;15671:16;15690:6;;;;;;;;;;;15671:25;;15716:8;15707:6;;:17;;;;;;;;;;;;;;;;;;15771:8;15740:40;;15761:8;15740:40;;;;;;;;;;;;15660:128;15597:191;:::o;19115:231::-;19193:7;19214:17;19233:18;19255:27;19266:4;19272:9;19255:10;:27::i;:::-;19213:69;;;;19293:18;19305:5;19293:11;:18::i;:::-;19329:9;19322:16;;;;19115:231;;;;:::o;12154:640::-;12309:4;12348:1;12330:2;:14;;;:19;12326:36;;12358:4;12351:11;;;;12326:36;12395:2;12379:36;;;12416:10;12428:4;12434:7;12443:5;12379:70;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12375:412;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12628:1;12611:6;:13;:18;12607:71;;12638:40;;;;;;;;;;;;;;12607:71;12753:6;12747:13;12738:6;12734:2;12730:15;12723:38;12375:412;12506:45;;;12496:55;;;:6;:55;;;;12489:62;;;12154:640;;;;;;;:::o;16345:534::-;16401:13;16442:1;16433:5;:10;16429:53;;16460:10;;;;;;;;;;;;;;;;;;;;;16429:53;16492:12;16507:5;16492:20;;16523:14;16548:78;16563:1;16555:4;:9;16548:78;;16581:8;;;;;:::i;:::-;;;;16612:2;16604:10;;;;;:::i;:::-;;;16548:78;;;16636:19;16668:6;16658:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16636:39;;16686:154;16702:1;16693:5;:10;16686:154;;16730:1;16720:11;;;;;:::i;:::-;;;16797:2;16789:5;:10;;;;:::i;:::-;16776:2;:24;;;;:::i;:::-;16763:39;;16746:6;16753;16746:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16826:2;16817:11;;;;;:::i;:::-;;;16686:154;;;16864:6;16850:21;;;;;16345:534;;;;:::o;14500:98::-;14553:7;14580:10;14573:17;;14500:98;:::o;13533:291::-;13658:14;13664:2;13668:3;13658:5;:14::i;:::-;13690:64;13721:1;13725:2;13746:1;13729:7;:14;;;;:18;;;;:::i;:::-;13749:4;13690:22;:64::i;:::-;13685:131;;13776:40;;;;;;;;;;;;;;13685:131;13533:291;;;:::o;18541:566::-;18622:7;18631:12;18680:2;18660:9;:16;:22;18656:444;;18699:9;18723;18747:7;18823:4;18812:9;18808:20;18802:27;18797:32;;18873:4;18862:9;18858:20;18852:27;18847:32;;18931:4;18920:9;18916:20;18910:27;18907:1;18902:36;18897:41;;18974:25;18985:4;18991:1;18994;18997;18974:10;:25::i;:::-;18967:32;;;;;;;;;18656:444;19048:1;19052:35;19032:56;;;;18541:566;;;;;;:::o;18012:521::-;18090:20;18081:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;18077:449;18127:7;18077:449;18188:29;18179:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;18175:351;;18234:34;;;;;;;;;;:::i;:::-;;;;;;;;18175:351;18299:35;18290:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;18286:240;;18351:41;;;;;;;;;;:::i;:::-;;;;;;;;18286:240;18423:30;18414:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;18410:116;;18470:44;;;;;;;;;;:::i;:::-;;;;;;;;18410:116;18012:521;;:::o;13832:628::-;13918:1;13904:16;;:2;:16;;;13900:48;;13929:19;;;;;;;;;;;;;;13900:48;13970:1;13963:3;:8;13959:39;;13980:18;;;;;;;;;;;;;;13959:39;14011:21;14035:7;:14;;;;14011:38;;14162:9;14157:150;14183:1;14177:3;:7;14173:1;:11;14157:150;;;14210:7;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14289:1;14273:13;:17;14269:2;14248:43;;14265:1;14248:43;;;;;;;;;;;;14186:3;;;;;;;14157:150;;;;14369:7;14382:2;14369:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14449:1;14443:3;:7;;;;:::i;:::-;14426:13;:25;;;;:::i;:::-;14422:2;14401:51;;14418:1;14401:51;;;;;;;;;;;;13889:571;13832:628;;:::o;19908:596::-;19996:7;20005:12;20049:66;20044:1;20036:10;;:79;20032:163;;;20148:1;20152:30;20132:51;;;;;;20032:163;20292:14;20309:24;20319:4;20325:1;20328;20331;20309:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20292:41;;20366:1;20348:20;;:6;:20;;;20344:103;;20401:1;20405:29;20385:50;;;;;;;20344:103;20467:6;20475:20;20459:37;;;;;19908:596;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:116::-;4960:21;4975:5;4960:21;:::i;:::-;4953:5;4950:32;4940:60;;4996:1;4993;4986:12;4940:60;4890:116;:::o;5012:133::-;5055:5;5093:6;5080:20;5071:29;;5109:30;5133:5;5109:30;:::i;:::-;5012:133;;;;:::o;5151:323::-;5207:6;5256:2;5244:9;5235:7;5231:23;5227:32;5224:119;;;5262:79;;:::i;:::-;5224:119;5382:1;5407:50;5449:7;5440:6;5429:9;5425:22;5407:50;:::i;:::-;5397:60;;5353:114;5151:323;;;;:::o;5480:118::-;5567:24;5585:5;5567:24;:::i;:::-;5562:3;5555:37;5480:118;;:::o;5604:222::-;5697:4;5735:2;5724:9;5720:18;5712:26;;5748:71;5816:1;5805:9;5801:17;5792:6;5748:71;:::i;:::-;5604:222;;;;:::o;5832:619::-;5909:6;5917;5925;5974:2;5962:9;5953:7;5949:23;5945:32;5942:119;;;5980:79;;:::i;:::-;5942:119;6100:1;6125:53;6170:7;6161:6;6150:9;6146:22;6125:53;:::i;:::-;6115:63;;6071:117;6227:2;6253:53;6298:7;6289:6;6278:9;6274:22;6253:53;:::i;:::-;6243:63;;6198:118;6355:2;6381:53;6426:7;6417:6;6406:9;6402:22;6381:53;:::i;:::-;6371:63;;6326:118;5832:619;;;;;:::o;6457:468::-;6522:6;6530;6579:2;6567:9;6558:7;6554:23;6550:32;6547:119;;;6585:79;;:::i;:::-;6547:119;6705:1;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6676:117;6832:2;6858:50;6900:7;6891:6;6880:9;6876:22;6858:50;:::i;:::-;6848:60;;6803:115;6457:468;;;;;:::o;6931:329::-;6990:6;7039:2;7027:9;7018:7;7014:23;7010:32;7007:119;;;7045:79;;:::i;:::-;7007:119;7165:1;7190:53;7235:7;7226:6;7215:9;7211:22;7190:53;:::i;:::-;7180:63;;7136:117;6931:329;;;;:::o;7266:117::-;7375:1;7372;7365:12;7389:117;7498:1;7495;7488:12;7512:117;7621:1;7618;7611:12;7648:552;7705:8;7715:6;7765:3;7758:4;7750:6;7746:17;7742:27;7732:122;;7773:79;;:::i;:::-;7732:122;7886:6;7873:20;7863:30;;7916:18;7908:6;7905:30;7902:117;;;7938:79;;:::i;:::-;7902:117;8052:4;8044:6;8040:17;8028:29;;8106:3;8098:4;8090:6;8086:17;8076:8;8072:32;8069:41;8066:128;;;8113:79;;:::i;:::-;8066:128;7648:552;;;;;:::o;8206:672::-;8285:6;8293;8301;8350:2;8338:9;8329:7;8325:23;8321:32;8318:119;;;8356:79;;:::i;:::-;8318:119;8476:1;8501:53;8546:7;8537:6;8526:9;8522:22;8501:53;:::i;:::-;8491:63;;8447:117;8631:2;8620:9;8616:18;8603:32;8662:18;8654:6;8651:30;8648:117;;;8684:79;;:::i;:::-;8648:117;8797:64;8853:7;8844:6;8833:9;8829:22;8797:64;:::i;:::-;8779:82;;;;8574:297;8206:672;;;;;:::o;8884:117::-;8993:1;8990;8983:12;9007:180;9055:77;9052:1;9045:88;9152:4;9149:1;9142:15;9176:4;9173:1;9166:15;9193:281;9276:27;9298:4;9276:27;:::i;:::-;9268:6;9264:40;9406:6;9394:10;9391:22;9370:18;9358:10;9355:34;9352:62;9349:88;;;9417:18;;:::i;:::-;9349:88;9457:10;9453:2;9446:22;9236:238;9193:281;;:::o;9480:129::-;9514:6;9541:20;;:::i;:::-;9531:30;;9570:33;9598:4;9590:6;9570:33;:::i;:::-;9480:129;;;:::o;9615:308::-;9677:4;9767:18;9759:6;9756:30;9753:56;;;9789:18;;:::i;:::-;9753:56;9827:29;9849:6;9827:29;:::i;:::-;9819:37;;9911:4;9905;9901:15;9893:23;;9615:308;;;:::o;9929:146::-;10026:6;10021:3;10016;10003:30;10067:1;10058:6;10053:3;10049:16;10042:27;9929:146;;;:::o;10081:425::-;10159:5;10184:66;10200:49;10242:6;10200:49;:::i;:::-;10184:66;:::i;:::-;10175:75;;10273:6;10266:5;10259:21;10311:4;10304:5;10300:16;10349:3;10340:6;10335:3;10331:16;10328:25;10325:112;;;10356:79;;:::i;:::-;10325:112;10446:54;10493:6;10488:3;10483;10446:54;:::i;:::-;10165:341;10081:425;;;;;:::o;10526:340::-;10582:5;10631:3;10624:4;10616:6;10612:17;10608:27;10598:122;;10639:79;;:::i;:::-;10598:122;10756:6;10743:20;10781:79;10856:3;10848:6;10841:4;10833:6;10829:17;10781:79;:::i;:::-;10772:88;;10588:278;10526:340;;;;:::o;10872:509::-;10941:6;10990:2;10978:9;10969:7;10965:23;10961:32;10958:119;;;10996:79;;:::i;:::-;10958:119;11144:1;11133:9;11129:17;11116:31;11174:18;11166:6;11163:30;11160:117;;;11196:79;;:::i;:::-;11160:117;11301:63;11356:7;11347:6;11336:9;11332:22;11301:63;:::i;:::-;11291:73;;11087:287;10872:509;;;;:::o;11387:468::-;11452:6;11460;11509:2;11497:9;11488:7;11484:23;11480:32;11477:119;;;11515:79;;:::i;:::-;11477:119;11635:1;11660:53;11705:7;11696:6;11685:9;11681:22;11660:53;:::i;:::-;11650:63;;11606:117;11762:2;11788:50;11830:7;11821:6;11810:9;11806:22;11788:50;:::i;:::-;11778:60;;11733:115;11387:468;;;;;:::o;11861:307::-;11922:4;12012:18;12004:6;12001:30;11998:56;;;12034:18;;:::i;:::-;11998:56;12072:29;12094:6;12072:29;:::i;:::-;12064:37;;12156:4;12150;12146:15;12138:23;;11861:307;;;:::o;12174:423::-;12251:5;12276:65;12292:48;12333:6;12292:48;:::i;:::-;12276:65;:::i;:::-;12267:74;;12364:6;12357:5;12350:21;12402:4;12395:5;12391:16;12440:3;12431:6;12426:3;12422:16;12419:25;12416:112;;;12447:79;;:::i;:::-;12416:112;12537:54;12584:6;12579:3;12574;12537:54;:::i;:::-;12257:340;12174:423;;;;;:::o;12616:338::-;12671:5;12720:3;12713:4;12705:6;12701:17;12697:27;12687:122;;12728:79;;:::i;:::-;12687:122;12845:6;12832:20;12870:78;12944:3;12936:6;12929:4;12921:6;12917:17;12870:78;:::i;:::-;12861:87;;12677:277;12616:338;;;;:::o;12960:943::-;13055:6;13063;13071;13079;13128:3;13116:9;13107:7;13103:23;13099:33;13096:120;;;13135:79;;:::i;:::-;13096:120;13255:1;13280:53;13325:7;13316:6;13305:9;13301:22;13280:53;:::i;:::-;13270:63;;13226:117;13382:2;13408:53;13453:7;13444:6;13433:9;13429:22;13408:53;:::i;:::-;13398:63;;13353:118;13510:2;13536:53;13581:7;13572:6;13561:9;13557:22;13536:53;:::i;:::-;13526:63;;13481:118;13666:2;13655:9;13651:18;13638:32;13697:18;13689:6;13686:30;13683:117;;;13719:79;;:::i;:::-;13683:117;13824:62;13878:7;13869:6;13858:9;13854:22;13824:62;:::i;:::-;13814:72;;13609:287;12960:943;;;;;;;:::o;13909:474::-;13977:6;13985;14034:2;14022:9;14013:7;14009:23;14005:32;14002:119;;;14040:79;;:::i;:::-;14002:119;14160:1;14185:53;14230:7;14221:6;14210:9;14206:22;14185:53;:::i;:::-;14175:63;;14131:117;14287:2;14313:53;14358:7;14349:6;14338:9;14334:22;14313:53;:::i;:::-;14303:63;;14258:118;13909:474;;;;;:::o;14389:311::-;14466:4;14556:18;14548:6;14545:30;14542:56;;;14578:18;;:::i;:::-;14542:56;14628:4;14620:6;14616:17;14608:25;;14688:4;14682;14678:15;14670:23;;14389:311;;;:::o;14723:710::-;14819:5;14844:81;14860:64;14917:6;14860:64;:::i;:::-;14844:81;:::i;:::-;14835:90;;14945:5;14974:6;14967:5;14960:21;15008:4;15001:5;14997:16;14990:23;;15061:4;15053:6;15049:17;15041:6;15037:30;15090:3;15082:6;15079:15;15076:122;;;15109:79;;:::i;:::-;15076:122;15224:6;15207:220;15241:6;15236:3;15233:15;15207:220;;;15316:3;15345:37;15378:3;15366:10;15345:37;:::i;:::-;15340:3;15333:50;15412:4;15407:3;15403:14;15396:21;;15283:144;15267:4;15262:3;15258:14;15251:21;;15207:220;;;15211:21;14825:608;;14723:710;;;;;:::o;15456:370::-;15527:5;15576:3;15569:4;15561:6;15557:17;15553:27;15543:122;;15584:79;;:::i;:::-;15543:122;15701:6;15688:20;15726:94;15816:3;15808:6;15801:4;15793:6;15789:17;15726:94;:::i;:::-;15717:103;;15533:293;15456:370;;;;:::o;15832:308::-;15906:4;15996:18;15988:6;15985:30;15982:56;;;16018:18;;:::i;:::-;15982:56;16068:4;16060:6;16056:17;16048:25;;16128:4;16122;16118:15;16110:23;;15832:308;;;:::o;16160:701::-;16253:5;16278:78;16294:61;16348:6;16294:61;:::i;:::-;16278:78;:::i;:::-;16269:87;;16376:5;16405:6;16398:5;16391:21;16439:4;16432:5;16428:16;16421:23;;16492:4;16484:6;16480:17;16472:6;16468:30;16521:3;16513:6;16510:15;16507:122;;;16540:79;;:::i;:::-;16507:122;16655:6;16638:217;16672:6;16667:3;16664:15;16638:217;;;16747:3;16776:34;16806:3;16794:10;16776:34;:::i;:::-;16771:3;16764:47;16840:4;16835:3;16831:14;16824:21;;16714:141;16698:4;16693:3;16689:14;16682:21;;16638:217;;;16642:21;16259:602;;16160:701;;;;;:::o;16881:364::-;16949:5;16998:3;16991:4;16983:6;16979:17;16975:27;16965:122;;17006:79;;:::i;:::-;16965:122;17123:6;17110:20;17148:91;17235:3;17227:6;17220:4;17212:6;17208:17;17148:91;:::i;:::-;17139:100;;16955:290;16881:364;;;;:::o;17251:888::-;17366:6;17374;17423:2;17411:9;17402:7;17398:23;17394:32;17391:119;;;17429:79;;:::i;:::-;17391:119;17577:1;17566:9;17562:17;17549:31;17607:18;17599:6;17596:30;17593:117;;;17629:79;;:::i;:::-;17593:117;17734:78;17804:7;17795:6;17784:9;17780:22;17734:78;:::i;:::-;17724:88;;17520:302;17889:2;17878:9;17874:18;17861:32;17920:18;17912:6;17909:30;17906:117;;;17942:79;;:::i;:::-;17906:117;18047:75;18114:7;18105:6;18094:9;18090:22;18047:75;:::i;:::-;18037:85;;17832:300;17251:888;;;;;:::o;18145:180::-;18193:77;18190:1;18183:88;18290:4;18287:1;18280:15;18314:4;18311:1;18304:15;18331:320;18375:6;18412:1;18406:4;18402:12;18392:22;;18459:1;18453:4;18449:12;18480:18;18470:81;;18536:4;18528:6;18524:17;18514:27;;18470:81;18598:2;18590:6;18587:14;18567:18;18564:38;18561:84;;18617:18;;:::i;:::-;18561:84;18382:269;18331:320;;;:::o;18657:232::-;18797:34;18793:1;18785:6;18781:14;18774:58;18866:15;18861:2;18853:6;18849:15;18842:40;18657:232;:::o;18895:366::-;19037:3;19058:67;19122:2;19117:3;19058:67;:::i;:::-;19051:74;;19134:93;19223:3;19134:93;:::i;:::-;19252:2;19247:3;19243:12;19236:19;;18895:366;;;:::o;19267:419::-;19433:4;19471:2;19460:9;19456:18;19448:26;;19520:9;19514:4;19510:20;19506:1;19495:9;19491:17;19484:47;19548:131;19674:4;19548:131;:::i;:::-;19540:139;;19267:419;;;:::o;19692:176::-;19832:28;19828:1;19820:6;19816:14;19809:52;19692:176;:::o;19874:366::-;20016:3;20037:67;20101:2;20096:3;20037:67;:::i;:::-;20030:74;;20113:93;20202:3;20113:93;:::i;:::-;20231:2;20226:3;20222:12;20215:19;;19874:366;;;:::o;20246:419::-;20412:4;20450:2;20439:9;20435:18;20427:26;;20499:9;20493:4;20489:20;20485:1;20474:9;20470:17;20463:47;20527:131;20653:4;20527:131;:::i;:::-;20519:139;;20246:419;;;:::o;20671:231::-;20811:34;20807:1;20799:6;20795:14;20788:58;20880:14;20875:2;20867:6;20863:15;20856:39;20671:231;:::o;20908:366::-;21050:3;21071:67;21135:2;21130:3;21071:67;:::i;:::-;21064:74;;21147:93;21236:3;21147:93;:::i;:::-;21265:2;21260:3;21256:12;21249:19;;20908:366;;;:::o;21280:419::-;21446:4;21484:2;21473:9;21469:18;21461:26;;21533:9;21527:4;21523:20;21519:1;21508:9;21504:17;21497:47;21561:131;21687:4;21561:131;:::i;:::-;21553:139;;21280:419;;;:::o;21705:173::-;21845:25;21841:1;21833:6;21829:14;21822:49;21705:173;:::o;21884:366::-;22026:3;22047:67;22111:2;22106:3;22047:67;:::i;:::-;22040:74;;22123:93;22212:3;22123:93;:::i;:::-;22241:2;22236:3;22232:12;22225:19;;21884:366;;;:::o;22256:419::-;22422:4;22460:2;22449:9;22445:18;22437:26;;22509:9;22503:4;22499:20;22495:1;22484:9;22480:17;22473:47;22537:131;22663:4;22537:131;:::i;:::-;22529:139;;22256:419;;;:::o;22681:180::-;22729:77;22726:1;22719:88;22826:4;22823:1;22816:15;22850:4;22847:1;22840:15;22867:180;22915:77;22912:1;22905:88;23012:4;23009:1;23002:15;23036:4;23033:1;23026:15;23053:194;23093:4;23113:20;23131:1;23113:20;:::i;:::-;23108:25;;23147:20;23165:1;23147:20;:::i;:::-;23142:25;;23191:1;23188;23184:9;23176:17;;23215:1;23209:4;23206:11;23203:37;;;23220:18;;:::i;:::-;23203:37;23053:194;;;;:::o;23253:191::-;23293:3;23312:20;23330:1;23312:20;:::i;:::-;23307:25;;23346:20;23364:1;23346:20;:::i;:::-;23341:25;;23389:1;23386;23382:9;23375:16;;23410:3;23407:1;23404:10;23401:36;;;23417:18;;:::i;:::-;23401:36;23253:191;;;;:::o;23450:168::-;23590:20;23586:1;23578:6;23574:14;23567:44;23450:168;:::o;23624:366::-;23766:3;23787:67;23851:2;23846:3;23787:67;:::i;:::-;23780:74;;23863:93;23952:3;23863:93;:::i;:::-;23981:2;23976:3;23972:12;23965:19;;23624:366;;;:::o;23996:419::-;24162:4;24200:2;24189:9;24185:18;24177:26;;24249:9;24243:4;24239:20;24235:1;24224:9;24220:17;24213:47;24277:131;24403:4;24277:131;:::i;:::-;24269:139;;23996:419;;;:::o;24421:170::-;24561:22;24557:1;24549:6;24545:14;24538:46;24421:170;:::o;24597:366::-;24739:3;24760:67;24824:2;24819:3;24760:67;:::i;:::-;24753:74;;24836:93;24925:3;24836:93;:::i;:::-;24954:2;24949:3;24945:12;24938:19;;24597:366;;;:::o;24969:419::-;25135:4;25173:2;25162:9;25158:18;25150:26;;25222:9;25216:4;25212:20;25208:1;25197:9;25193:17;25186:47;25250:131;25376:4;25250:131;:::i;:::-;25242:139;;24969:419;;;:::o;25394:410::-;25434:7;25457:20;25475:1;25457:20;:::i;:::-;25452:25;;25491:20;25509:1;25491:20;:::i;:::-;25486:25;;25546:1;25543;25539:9;25568:30;25586:11;25568:30;:::i;:::-;25557:41;;25747:1;25738:7;25734:15;25731:1;25728:22;25708:1;25701:9;25681:83;25658:139;;25777:18;;:::i;:::-;25658:139;25442:362;25394:410;;;;:::o;25810:220::-;25950:34;25946:1;25938:6;25934:14;25927:58;26019:3;26014:2;26006:6;26002:15;25995:28;25810:220;:::o;26036:366::-;26178:3;26199:67;26263:2;26258:3;26199:67;:::i;:::-;26192:74;;26275:93;26364:3;26275:93;:::i;:::-;26393:2;26388:3;26384:12;26377:19;;26036:366;;;:::o;26408:419::-;26574:4;26612:2;26601:9;26597:18;26589:26;;26661:9;26655:4;26651:20;26647:1;26636:9;26632:17;26625:47;26689:131;26815:4;26689:131;:::i;:::-;26681:139;;26408:419;;;:::o;26833:147::-;26934:11;26971:3;26956:18;;26833:147;;;;:::o;26986:114::-;;:::o;27106:398::-;27265:3;27286:83;27367:1;27362:3;27286:83;:::i;:::-;27279:90;;27378:93;27467:3;27378:93;:::i;:::-;27496:1;27491:3;27487:11;27480:18;;27106:398;;;:::o;27510:379::-;27694:3;27716:147;27859:3;27716:147;:::i;:::-;27709:154;;27880:3;27873:10;;27510:379;;;:::o;27895:148::-;27997:11;28034:3;28019:18;;27895:148;;;;:::o;28049:214::-;28189:66;28185:1;28177:6;28173:14;28166:90;28049:214;:::o;28269:402::-;28429:3;28450:85;28532:2;28527:3;28450:85;:::i;:::-;28443:92;;28544:93;28633:3;28544:93;:::i;:::-;28662:2;28657:3;28653:12;28646:19;;28269:402;;;:::o;28677:77::-;28714:7;28743:5;28732:16;;28677:77;;;:::o;28760:79::-;28799:7;28828:5;28817:16;;28760:79;;;:::o;28845:157::-;28950:45;28970:24;28988:5;28970:24;:::i;:::-;28950:45;:::i;:::-;28945:3;28938:58;28845:157;;:::o;29008:522::-;29221:3;29243:148;29387:3;29243:148;:::i;:::-;29236:155;;29401:75;29472:3;29463:6;29401:75;:::i;:::-;29501:2;29496:3;29492:12;29485:19;;29521:3;29514:10;;29008:522;;;;:::o;29536:174::-;29676:26;29672:1;29664:6;29660:14;29653:50;29536:174;:::o;29716:366::-;29858:3;29879:67;29943:2;29938:3;29879:67;:::i;:::-;29872:74;;29955:93;30044:3;29955:93;:::i;:::-;30073:2;30068:3;30064:12;30057:19;;29716:366;;;:::o;30088:419::-;30254:4;30292:2;30281:9;30277:18;30269:26;;30341:9;30335:4;30331:20;30327:1;30316:9;30312:17;30305:47;30369:131;30495:4;30369:131;:::i;:::-;30361:139;;30088:419;;;:::o;30513:141::-;30562:4;30585:3;30577:11;;30608:3;30605:1;30598:14;30642:4;30639:1;30629:18;30621:26;;30513:141;;;:::o;30660:93::-;30697:6;30744:2;30739;30732:5;30728:14;30724:23;30714:33;;30660:93;;;:::o;30759:107::-;30803:8;30853:5;30847:4;30843:16;30822:37;;30759:107;;;;:::o;30872:393::-;30941:6;30991:1;30979:10;30975:18;31014:97;31044:66;31033:9;31014:97;:::i;:::-;31132:39;31162:8;31151:9;31132:39;:::i;:::-;31120:51;;31204:4;31200:9;31193:5;31189:21;31180:30;;31253:4;31243:8;31239:19;31232:5;31229:30;31219:40;;30948:317;;30872:393;;;;;:::o;31271:60::-;31299:3;31320:5;31313:12;;31271:60;;;:::o;31337:142::-;31387:9;31420:53;31438:34;31447:24;31465:5;31447:24;:::i;:::-;31438:34;:::i;:::-;31420:53;:::i;:::-;31407:66;;31337:142;;;:::o;31485:75::-;31528:3;31549:5;31542:12;;31485:75;;;:::o;31566:269::-;31676:39;31707:7;31676:39;:::i;:::-;31737:91;31786:41;31810:16;31786:41;:::i;:::-;31778:6;31771:4;31765:11;31737:91;:::i;:::-;31731:4;31724:105;31642:193;31566:269;;;:::o;31841:73::-;31886:3;31841:73;:::o;31920:189::-;31997:32;;:::i;:::-;32038:65;32096:6;32088;32082:4;32038:65;:::i;:::-;31973:136;31920:189;;:::o;32115:186::-;32175:120;32192:3;32185:5;32182:14;32175:120;;;32246:39;32283:1;32276:5;32246:39;:::i;:::-;32219:1;32212:5;32208:13;32199:22;;32175:120;;;32115:186;;:::o;32307:543::-;32408:2;32403:3;32400:11;32397:446;;;32442:38;32474:5;32442:38;:::i;:::-;32526:29;32544:10;32526:29;:::i;:::-;32516:8;32512:44;32709:2;32697:10;32694:18;32691:49;;;32730:8;32715:23;;32691:49;32753:80;32809:22;32827:3;32809:22;:::i;:::-;32799:8;32795:37;32782:11;32753:80;:::i;:::-;32412:431;;32397:446;32307:543;;;:::o;32856:117::-;32910:8;32960:5;32954:4;32950:16;32929:37;;32856:117;;;;:::o;32979:169::-;33023:6;33056:51;33104:1;33100:6;33092:5;33089:1;33085:13;33056:51;:::i;:::-;33052:56;33137:4;33131;33127:15;33117:25;;33030:118;32979:169;;;;:::o;33153:295::-;33229:4;33375:29;33400:3;33394:4;33375:29;:::i;:::-;33367:37;;33437:3;33434:1;33430:11;33424:4;33421:21;33413:29;;33153:295;;;;:::o;33453:1395::-;33570:37;33603:3;33570:37;:::i;:::-;33672:18;33664:6;33661:30;33658:56;;;33694:18;;:::i;:::-;33658:56;33738:38;33770:4;33764:11;33738:38;:::i;:::-;33823:67;33883:6;33875;33869:4;33823:67;:::i;:::-;33917:1;33941:4;33928:17;;33973:2;33965:6;33962:14;33990:1;33985:618;;;;34647:1;34664:6;34661:77;;;34713:9;34708:3;34704:19;34698:26;34689:35;;34661:77;34764:67;34824:6;34817:5;34764:67;:::i;:::-;34758:4;34751:81;34620:222;33955:887;;33985:618;34037:4;34033:9;34025:6;34021:22;34071:37;34103:4;34071:37;:::i;:::-;34130:1;34144:208;34158:7;34155:1;34152:14;34144:208;;;34237:9;34232:3;34228:19;34222:26;34214:6;34207:42;34288:1;34280:6;34276:14;34266:24;;34335:2;34324:9;34320:18;34307:31;;34181:4;34178:1;34174:12;34169:17;;34144:208;;;34380:6;34371:7;34368:19;34365:179;;;34438:9;34433:3;34429:19;34423:26;34481:48;34523:4;34515:6;34511:17;34500:9;34481:48;:::i;:::-;34473:6;34466:64;34388:156;34365:179;34590:1;34586;34578:6;34574:14;34570:22;34564:4;34557:36;33992:611;;;33955:887;;33545:1303;;;33453:1395;;:::o;34854:234::-;34994:34;34990:1;34982:6;34978:14;34971:58;35063:17;35058:2;35050:6;35046:15;35039:42;34854:234;:::o;35094:366::-;35236:3;35257:67;35321:2;35316:3;35257:67;:::i;:::-;35250:74;;35333:93;35422:3;35333:93;:::i;:::-;35451:2;35446:3;35442:12;35435:19;;35094:366;;;:::o;35466:419::-;35632:4;35670:2;35659:9;35655:18;35647:26;;35719:9;35713:4;35709:20;35705:1;35694:9;35690:17;35683:47;35747:131;35873:4;35747:131;:::i;:::-;35739:139;;35466:419;;;:::o;35915:874::-;36018:3;36055:5;36049:12;36084:36;36110:9;36084:36;:::i;:::-;36136:89;36218:6;36213:3;36136:89;:::i;:::-;36129:96;;36256:1;36245:9;36241:17;36272:1;36267:166;;;;36447:1;36442:341;;;;36234:549;;36267:166;36351:4;36347:9;36336;36332:25;36327:3;36320:38;36413:6;36406:14;36399:22;36391:6;36387:35;36382:3;36378:45;36371:52;;36267:166;;36442:341;36509:38;36541:5;36509:38;:::i;:::-;36569:1;36583:154;36597:6;36594:1;36591:13;36583:154;;;36671:7;36665:14;36661:1;36656:3;36652:11;36645:35;36721:1;36712:7;36708:15;36697:26;;36619:4;36616:1;36612:12;36607:17;;36583:154;;;36766:6;36761:3;36757:16;36750:23;;36449:334;;36234:549;;36022:767;;35915:874;;;;:::o;36795:390::-;36901:3;36929:39;36962:5;36929:39;:::i;:::-;36984:89;37066:6;37061:3;36984:89;:::i;:::-;36977:96;;37082:65;37140:6;37135:3;37128:4;37121:5;37117:16;37082:65;:::i;:::-;37172:6;37167:3;37163:16;37156:23;;36905:280;36795:390;;;;:::o;37191:155::-;37331:7;37327:1;37319:6;37315:14;37308:31;37191:155;:::o;37352:400::-;37512:3;37533:84;37615:1;37610:3;37533:84;:::i;:::-;37526:91;;37626:93;37715:3;37626:93;:::i;:::-;37744:1;37739:3;37735:11;37728:18;;37352:400;;;:::o;37758:695::-;38036:3;38058:92;38146:3;38137:6;38058:92;:::i;:::-;38051:99;;38167:95;38258:3;38249:6;38167:95;:::i;:::-;38160:102;;38279:148;38423:3;38279:148;:::i;:::-;38272:155;;38444:3;38437:10;;37758:695;;;;;:::o;38459:225::-;38599:34;38595:1;38587:6;38583:14;38576:58;38668:8;38663:2;38655:6;38651:15;38644:33;38459:225;:::o;38690:366::-;38832:3;38853:67;38917:2;38912:3;38853:67;:::i;:::-;38846:74;;38929:93;39018:3;38929:93;:::i;:::-;39047:2;39042:3;39038:12;39031:19;;38690:366;;;:::o;39062:419::-;39228:4;39266:2;39255:9;39251:18;39243:26;;39315:9;39309:4;39305:20;39301:1;39290:9;39286:17;39279:47;39343:131;39469:4;39343:131;:::i;:::-;39335:139;;39062:419;;;:::o;39487:233::-;39526:3;39549:24;39567:5;39549:24;:::i;:::-;39540:33;;39595:66;39588:5;39585:77;39582:103;;39665:18;;:::i;:::-;39582:103;39712:1;39705:5;39701:13;39694:20;;39487:233;;;:::o;39726:182::-;39866:34;39862:1;39854:6;39850:14;39843:58;39726:182;:::o;39914:366::-;40056:3;40077:67;40141:2;40136:3;40077:67;:::i;:::-;40070:74;;40153:93;40242:3;40153:93;:::i;:::-;40271:2;40266:3;40262:12;40255:19;;39914:366;;;:::o;40286:419::-;40452:4;40490:2;40479:9;40475:18;40467:26;;40539:9;40533:4;40529:20;40525:1;40514:9;40510:17;40503:47;40567:131;40693:4;40567:131;:::i;:::-;40559:139;;40286:419;;;:::o;40711:98::-;40762:6;40796:5;40790:12;40780:22;;40711:98;;;:::o;40815:168::-;40898:11;40932:6;40927:3;40920:19;40972:4;40967:3;40963:14;40948:29;;40815:168;;;;:::o;40989:373::-;41075:3;41103:38;41135:5;41103:38;:::i;:::-;41157:70;41220:6;41215:3;41157:70;:::i;:::-;41150:77;;41236:65;41294:6;41289:3;41282:4;41275:5;41271:16;41236:65;:::i;:::-;41326:29;41348:6;41326:29;:::i;:::-;41321:3;41317:39;41310:46;;41079:283;40989:373;;;;:::o;41368:640::-;41563:4;41601:3;41590:9;41586:19;41578:27;;41615:71;41683:1;41672:9;41668:17;41659:6;41615:71;:::i;:::-;41696:72;41764:2;41753:9;41749:18;41740:6;41696:72;:::i;:::-;41778;41846:2;41835:9;41831:18;41822:6;41778:72;:::i;:::-;41897:9;41891:4;41887:20;41882:2;41871:9;41867:18;41860:48;41925:76;41996:4;41987:6;41925:76;:::i;:::-;41917:84;;41368:640;;;;;;;:::o;42014:141::-;42070:5;42101:6;42095:13;42086:22;;42117:32;42143:5;42117:32;:::i;:::-;42014:141;;;;:::o;42161:349::-;42230:6;42279:2;42267:9;42258:7;42254:23;42250:32;42247:119;;;42285:79;;:::i;:::-;42247:119;42405:1;42430:63;42485:7;42476:6;42465:9;42461:22;42430:63;:::i;:::-;42420:73;;42376:127;42161:349;;;;:::o;42516:180::-;42564:77;42561:1;42554:88;42661:4;42658:1;42651:15;42685:4;42682:1;42675:15;42702:185;42742:1;42759:20;42777:1;42759:20;:::i;:::-;42754:25;;42793:20;42811:1;42793:20;:::i;:::-;42788:25;;42832:1;42822:35;;42837:18;;:::i;:::-;42822:35;42879:1;42876;42872:9;42867:14;;42702:185;;;;:::o;42893:176::-;42925:1;42942:20;42960:1;42942:20;:::i;:::-;42937:25;;42976:20;42994:1;42976:20;:::i;:::-;42971:25;;43015:1;43005:35;;43020:18;;:::i;:::-;43005:35;43061:1;43058;43054:9;43049:14;;42893:176;;;;:::o;43075:180::-;43123:77;43120:1;43113:88;43220:4;43217:1;43210:15;43244:4;43241:1;43234:15;43261:174;43401:26;43397:1;43389:6;43385:14;43378:50;43261:174;:::o;43441:366::-;43583:3;43604:67;43668:2;43663:3;43604:67;:::i;:::-;43597:74;;43680:93;43769:3;43680:93;:::i;:::-;43798:2;43793:3;43789:12;43782:19;;43441:366;;;:::o;43813:419::-;43979:4;44017:2;44006:9;44002:18;43994:26;;44066:9;44060:4;44056:20;44052:1;44041:9;44037:17;44030:47;44094:131;44220:4;44094:131;:::i;:::-;44086:139;;43813:419;;;:::o;44238:181::-;44378:33;44374:1;44366:6;44362:14;44355:57;44238:181;:::o;44425:366::-;44567:3;44588:67;44652:2;44647:3;44588:67;:::i;:::-;44581:74;;44664:93;44753:3;44664:93;:::i;:::-;44782:2;44777:3;44773:12;44766:19;;44425:366;;;:::o;44797:419::-;44963:4;45001:2;44990:9;44986:18;44978:26;;45050:9;45044:4;45040:20;45036:1;45025:9;45021:17;45014:47;45078:131;45204:4;45078:131;:::i;:::-;45070:139;;44797:419;;;:::o;45222:221::-;45362:34;45358:1;45350:6;45346:14;45339:58;45431:4;45426:2;45418:6;45414:15;45407:29;45222:221;:::o;45449:366::-;45591:3;45612:67;45676:2;45671:3;45612:67;:::i;:::-;45605:74;;45688:93;45777:3;45688:93;:::i;:::-;45806:2;45801:3;45797:12;45790:19;;45449:366;;;:::o;45821:419::-;45987:4;46025:2;46014:9;46010:18;46002:26;;46074:9;46068:4;46064:20;46060:1;46049:9;46045:17;46038:47;46102:131;46228:4;46102:131;:::i;:::-;46094:139;;45821:419;;;:::o;46246:118::-;46333:24;46351:5;46333:24;:::i;:::-;46328:3;46321:37;46246:118;;:::o;46370:86::-;46405:7;46445:4;46438:5;46434:16;46423:27;;46370:86;;;:::o;46462:112::-;46545:22;46561:5;46545:22;:::i;:::-;46540:3;46533:35;46462:112;;:::o;46580:545::-;46753:4;46791:3;46780:9;46776:19;46768:27;;46805:71;46873:1;46862:9;46858:17;46849:6;46805:71;:::i;:::-;46886:68;46950:2;46939:9;46935:18;46926:6;46886:68;:::i;:::-;46964:72;47032:2;47021:9;47017:18;47008:6;46964:72;:::i;:::-;47046;47114:2;47103:9;47099:18;47090:6;47046:72;:::i;:::-;46580:545;;;;;;;:::o

Swarm Source

ipfs://729454270fabe347b43ff6e65ed7aa3289b7e37e61be6979a792a85bc1c875ca
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.