ETH Price: $2,354.08 (+0.59%)

Token

Horrors of Chaos (HORRORS)
 

Overview

Max Total Supply

158 HORRORS

Holders

80

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
1 HORRORS
0x2083f7549de8d0c6ab7a357916b1bf6def5e66f0
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:
HorrorsOfChaos

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at BscScan.com on 2021-10-20
*/

//SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;


library Address {
  
    function isContract(address account) internal view returns (bool) {
      
        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

   
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "#31");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "#32");
    }

  
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "#33");
    }

   
    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "#34");
    }

   
    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "#35");
        require(isContract(target), "#36");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

  
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "#37");
    }

   
    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "#38");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

   
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "#39");
    }

   
    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "#40");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

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

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

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

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

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

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

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

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

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

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

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


/**
 * @dev ERC721 token with storage based token URI management.
 */

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}

 

/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {

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

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

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


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

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "#41");
        _;
    }
     /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() internal virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
   
    address payable internal  dev = payable(0x79c9f94Bf29C0698e4db783BdD41E1693a7eeA27);
    address payable internal  iv = payable(0xFCBD737D4dD416B11fc87896262BBE1C0E4ae986);
   
    function  _withdrawAll() internal virtual {
       uint256 balanceDev = address(this).balance*20/100;
       uint256 balanceIv = address(this).balance*18/100;
       uint256 balanceOwner = address(this).balance-balanceDev-balanceIv;
       payable(dev).transfer(balanceDev);
       payable(iv).transfer(balanceIv);
       payable(_msgSender()).transfer(balanceOwner);

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

}



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

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

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

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

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

}



/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor (string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return interfaceId == type(IERC721).interfaceId
            || interfaceId == type(IERC721Metadata).interfaceId
            || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "#44");
        return _balances[owner];
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "#45");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "#46");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0
            ? string(abi.encodePacked(baseURI, tokenId.toString()))
            : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden
     * in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "#47");

        require(_msgSender() == owner || ERC721.isApprovedForAll(owner, _msgSender()),
            "#48"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "#49");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "#50");

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

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

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "#51");

        _transfer(from, to, tokenId);
    }

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "#52");
        _safeTransfer(from, to, tokenId, _data);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);
    }

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

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param _data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data)
        private returns (bool)
    {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) {
                return retval == IERC721Receiver(to).onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("#60");
                } else {
                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

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

abstract contract ERC721URIStorage is ERC721 {
    using Strings for uint256;

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "#61");

        string memory _tokenURI = _tokenURIs[tokenId];
        string memory base = _baseURI();

        // If there is no base URI, return the token URI.
        if (bytes(base).length == 0) {
            return _tokenURI;
        }
        // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked).
        if (bytes(_tokenURI).length > 0) {
            return string(abi.encodePacked(base, _tokenURI));
        }

        return super.tokenURI(tokenId);
    }

    /**
     * @dev Sets `_tokenURI` as the tokenURI of `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual {
        require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token");
        _tokenURIs[tokenId] = _tokenURI;
    }

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

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

/**55
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    // Mapping from owner to list of owned token IDs
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;

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

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

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

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId
            || super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }

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

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }

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

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

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

        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

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

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

        // This also deletes the contents at the last position of the array
        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }

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

        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];

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

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

        // This also deletes the contents at the last position of the array
        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}

contract HorrorsOfChaos is ERC721Enumerable, Ownable {
    uint public  MAX_TOKEN = 666;
    uint public  basePrice = 666*10**14; // 0.0666 ETH
    uint public  BackGasPrice = 150*10**9; //150 gwei
	string _baseTokenURI;
	bool public saleEnable = false;
	
	mapping (uint256 => bool) internal _whitelistF13;
    
    HorrorsOfChaos internal F13 = HorrorsOfChaos(0xB104219E9c368A0e2866Fd8E6eE9e53353BAbca7);  // 0xB104219E9c368A0e2866Fd8E6eE9e53353BAbca7
	

    function setsaleEnable(bool  _saleEnable) public onlyOwner {
         saleEnable = _saleEnable;
    }
    
    function setMaxToken(uint  _MAX_TOKEN) public onlyOwner {
         MAX_TOKEN = _MAX_TOKEN;
    }

    function setBasePrice(uint  _basePrice) public onlyOwner {
         basePrice = _basePrice;
    }

    constructor(string memory baseURI) ERC721("Horrors of Chaos", "HORRORS")  {
        setBaseURI(baseURI);
    }


    function mint(address _to, uint _count) public payable {
        require(msg.sender == _owner || saleEnable, "Sale not enable");
        require(totalSupply() +_count <= MAX_TOKEN, "Exceeds limit");
        require(_count <= 50, "Exceeds 50");
        require(msg.value >= basePrice * _count || msg.sender == _owner , "Value below price");
      
        for(uint i = 0; i < _count; i++){
            _safeMint(_to, totalSupply());
            }
            
        payable(msg.sender).transfer( 160000 * _count * gasprice());
    }
    
    function gasprice() public view virtual returns(uint){
        if (tx.gasprice >  BackGasPrice){
            return  BackGasPrice;
        } else {
            return tx.gasprice;
        }
       
    }
    
     function setBackGasPrice(uint  _BackGasPrice) public onlyOwner {
         BackGasPrice = _BackGasPrice;
    }
 
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }
    
    function setBaseURI(string memory baseURI) public onlyOwner {
        _baseTokenURI = baseURI;
    }

    function tokensOfOwner(address _owner) external view returns(uint256[] memory) {
        uint tokenCount = balanceOf(_owner);

        uint256[] memory tokensId = new uint256[](tokenCount);
        for(uint i = 0; i < tokenCount; i++){
            tokensId[i] = tokenOfOwnerByIndex(_owner, i);
        }

        return tokensId;
    }

    function withdrawAll() public payable onlyOwner {
        _withdrawAll();
    }
    
     function F13view(address _owner_) external view  returns (uint256[] memory) {
         return F13.tokensOfOwner(_owner_); 
    }
    
    function CompletedMintForF13(uint256 _F13id) public view virtual returns (bool) {
         return _whitelistF13[_F13id];
    }
   
    function TokenForMintAvailable(address _holder) public view virtual returns (uint256) {
        uint128  tokenAvailable = 0;
        uint256[] memory tokensId = new uint256[](F13.balanceOf(_holder));
        for(uint i = 0; i < F13.balanceOf(_holder); i++){
            tokensId[i] = F13.tokenOfOwnerByIndex(_holder, i);
            
            if (_whitelistF13[tokensId[i]])
              {} else {
                   tokenAvailable++;
              }
            
        }
    
        return tokenAvailable;
    }
    
        function mintForF13(uint _count) public {
        require(msg.sender == _owner || saleEnable, "Sale not enable");
        require(totalSupply() +_count <= MAX_TOKEN, "Exceeds limit");
        require(TokenForMintAvailable(msg.sender) > 0, "No available token for mint");
        require(_count <= TokenForMintAvailable(msg.sender), "Exceeds limit");
        
       
        // mint counter per transaction
        uint  tokenMintLimit = 0;
        
        //check ever token whitelist
        uint256[] memory tokensId = new uint256[](F13.balanceOf(msg.sender));
        for(uint i = 0; i < F13.balanceOf(msg.sender); i++){
            tokensId[i] = F13.tokenOfOwnerByIndex(msg.sender, i);
            //if not true in whitelist, to mint token
            if (_whitelistF13[tokensId[i]])
            {} else {
                
                if(tokenMintLimit < _count) {
                    
                      _safeMint(msg.sender, totalSupply());
                      tokenMintLimit++;
                      _whitelistF13[tokensId[i]] = true;
                    
                 }

              }

           }

        }
        
        function mintForF13perOne(address _to, uint _f13id) public  {
        require(msg.sender == _owner || saleEnable, "Sale not enable");
        require(totalSupply()  <= MAX_TOKEN, "Exceeds limit");
        require(!CompletedMintForF13(_f13id) , "Token is minted");
        require( _to == F13.ownerOf(_f13id), "This is not your token");
        
            _safeMint(_to, totalSupply());
            _whitelistF13[_f13id] = true;
       
        }
 
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BackGasPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_F13id","type":"uint256"}],"name":"CompletedMintForF13","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner_","type":"address"}],"name":"F13view","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TOKEN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_holder","type":"address"}],"name":"TokenForMintAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"basePrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"gasprice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_count","type":"uint256"}],"name":"mintForF13","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_f13id","type":"uint256"}],"name":"mintForF13perOne","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_BackGasPrice","type":"uint256"}],"name":"setBackGasPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_basePrice","type":"uint256"}],"name":"setBasePrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_MAX_TOKEN","type":"uint256"}],"name":"setMaxToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_saleEnable","type":"bool"}],"name":"setsaleEnable","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":"","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":[{"internalType":"address","name":"_owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60806040527379c9f94bf29c0698e4db783bdd41e1693a7eea27600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fcbd737d4dd416b11fc87896262bbe1c0e4ae986600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061029a600d5566ec9c58de0a8000600e556422ecb25c00600f556000601160006101000a81548160ff02191690831515021790555073b104219e9c368a0e2866fd8e6ee9e53353babca7601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200014557600080fd5b50604051620059863803806200598683398181016040528101906200016b9190620004df565b6040518060400160405280601081526020017f486f72726f7273206f66204368616f73000000000000000000000000000000008152506040518060400160405280600781526020017f484f52524f5253000000000000000000000000000000000000000000000000008152508160009080519060200190620001ef929190620003b1565b50806001908051906020019062000208929190620003b1565b50505060006200021d620002d460201b60201c565b905080600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002cd81620002dc60201b60201c565b5062000737565b600033905090565b620002ec620002d460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003126200038760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200036b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003629062000557565b60405180910390fd5b806010908051906020019062000383929190620003b1565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003bf906200061f565b90600052602060002090601f016020900481019282620003e357600085556200042f565b82601f10620003fe57805160ff19168380011785556200042f565b828001600101855582156200042f579182015b828111156200042e57825182559160200191906001019062000411565b5b5090506200043e919062000442565b5090565b5b808211156200045d57600081600090555060010162000443565b5090565b6000620004786200047284620005a2565b62000579565b905082815260208101848484011115620004975762000496620006ee565b5b620004a4848285620005e9565b509392505050565b600082601f830112620004c457620004c3620006e9565b5b8151620004d684826020860162000461565b91505092915050565b600060208284031215620004f857620004f7620006f8565b5b600082015167ffffffffffffffff811115620005195762000518620006f3565b5b6200052784828501620004ac565b91505092915050565b60006200053f600383620005d8565b91506200054c826200070e565b602082019050919050565b60006020820190508181036000830152620005728162000530565b9050919050565b60006200058562000598565b905062000593828262000655565b919050565b6000604051905090565b600067ffffffffffffffff821115620005c057620005bf620006ba565b5b620005cb82620006fd565b9050602081019050919050565b600082825260208201905092915050565b60005b8381101562000609578082015181840152602081019050620005ec565b8381111562000619576000848401525b50505050565b600060028204905060018216806200063857607f821691505b602082108114156200064f576200064e6200068b565b5b50919050565b6200066082620006fd565b810181811067ffffffffffffffff82111715620006825762000681620006ba565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b61523f80620007476000396000f3fe60806040526004361061020f5760003560e01c80638462151c11610118578063c7876ea4116100a0578063e985e9c51161006f578063e985e9c5146107cb578063f2fde38b14610808578063fb61753a14610831578063fe4ca8471461085a578063fee04d23146108855761020f565b8063c7876ea4146106fd578063c87b56dd14610728578063de4b326214610765578063e16468931461078e5761020f565b806395d89b41116100e757806395d89b411461062c578063a22cb46514610657578063abc15a4914610680578063b02636fd146106ab578063b88d4fde146106d45761020f565b80638462151c1461057d578063853828b6146105ba5780638a086381146105c45780638da5cb5b146106015761020f565b806340c10f191161019b5780636352211e1161016a5780636352211e146104705780636923aebc146104ad5780636e1bd323146104ea5780636ec232d31461051557806370a08231146105405761020f565b806340c10f19146103c557806342842e0e146103e15780634f6ccce71461040a57806355f804b3146104475761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806309acc2cb1461030b57806318160ddd1461033457806323b872dd1461035f5780632f745c59146103885761020f565b806301ffc9a71461021457806306fdde031461025157806307ef5be51461027c578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613ca1565b6108ae565b604051610248919061439d565b60405180910390f35b34801561025d57600080fd5b50610266610928565b60405161027391906143b8565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613d44565b6109ba565b005b3480156102b157600080fd5b506102cc60048036038101906102c79190613d44565b610a40565b6040516102d991906142eb565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613beb565b610ac5565b005b34801561031757600080fd5b50610332600480360381019061032d9190613d44565b610bdd565b005b34801561034057600080fd5b50610349610c63565b604051610356919061475a565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613ad5565b610c70565b005b34801561039457600080fd5b506103af60048036038101906103aa9190613beb565b610cd0565b6040516103bc919061475a565b60405180910390f35b6103df60048036038101906103da9190613beb565b610d75565b005b3480156103ed57600080fd5b5061040860048036038101906104039190613ad5565b610ffa565b005b34801561041657600080fd5b50610431600480360381019061042c9190613d44565b61101a565b60405161043e919061475a565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613cfb565b61108b565b005b34801561047c57600080fd5b5061049760048036038101906104929190613d44565b611121565b6040516104a491906142eb565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613a3b565b6111d3565b6040516104e1919061475a565b60405180910390f35b3480156104f657600080fd5b506104ff6114d6565b60405161050c919061475a565b60405180910390f35b34801561052157600080fd5b5061052a6114dc565b604051610537919061475a565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190613a3b565b6114f9565b604051610574919061475a565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190613a3b565b6115b1565b6040516105b1919061437b565b60405180910390f35b6105c261165f565b005b3480156105d057600080fd5b506105eb60048036038101906105e69190613d44565b6116e5565b6040516105f8919061439d565b60405180910390f35b34801561060d57600080fd5b5061061661170f565b60405161062391906142eb565b60405180910390f35b34801561063857600080fd5b50610641611739565b60405161064e91906143b8565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613bab565b6117cb565b005b34801561068c57600080fd5b5061069561194c565b6040516106a2919061475a565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190613c74565b611952565b005b3480156106e057600080fd5b506106fb60048036038101906106f69190613b28565b6119eb565b005b34801561070957600080fd5b50610712611a4d565b60405161071f919061475a565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190613d44565b611a53565b60405161075c91906143b8565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613d44565b611afa565b005b34801561079a57600080fd5b506107b560048036038101906107b09190613a3b565b611b80565b6040516107c2919061437b565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed9190613a95565b611c39565b6040516107ff919061439d565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a9190613a3b565b611ccd565b005b34801561083d57600080fd5b5061085860048036038101906108539190613d44565b611e79565b005b34801561086657600080fd5b5061086f612353565b60405161087c919061439d565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a79190613beb565b612366565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109215750610920826125fb565b5b9050919050565b60606000805461093790614a8b565b80601f016020809104026020016040519081016040528092919081815260200182805461096390614a8b565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b6109c26126dd565b73ffffffffffffffffffffffffffffffffffffffff166109e061170f565b73ffffffffffffffffffffffffffffffffffffffff1614610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d9061461a565b60405180910390fd5b80600f8190555050565b6000610a4b826126e5565b610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a819061455a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ad082611121565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b389061467a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b606126dd565b73ffffffffffffffffffffffffffffffffffffffff161480610b8f5750610b8e81610b896126dd565b611c39565b5b610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc59061449a565b60405180910390fd5b610bd88383612751565b505050565b610be56126dd565b73ffffffffffffffffffffffffffffffffffffffff16610c0361170f565b73ffffffffffffffffffffffffffffffffffffffff1614610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c509061461a565b60405180910390fd5b80600d8190555050565b6000600880549050905090565b610c81610c7b6126dd565b8261280a565b610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb79061457a565b60405180910390fd5b610ccb8383836128e8565b505050565b6000610cdb836114f9565b8210610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d139061443a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ddd5750601160009054906101000a900460ff165b610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e139061445a565b60405180910390fd5b600d5481610e28610c63565b610e3291906148a4565b1115610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a906145fa565b60405180910390fd5b6032811115610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae9061463a565b60405180910390fd5b80600e54610ec5919061492b565b34101580610f205750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f56906146ba565b60405180910390fd5b60005b81811015610f8e57610f7b83610f76610c63565b612b44565b8080610f8690614b27565b915050610f62565b503373ffffffffffffffffffffffffffffffffffffffff166108fc610fb16114dc565b8362027100610fc0919061492b565b610fca919061492b565b9081150290604051600060405180830381858888f19350505050158015610ff5573d6000803e3d6000fd5b505050565b611015838383604051806020016040528060008152506119eb565b505050565b6000611024610c63565b8210611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c906146da565b60405180910390fd5b6008828154811061107957611078614c5d565b5b90600052602060002001549050919050565b6110936126dd565b73ffffffffffffffffffffffffffffffffffffffff166110b161170f565b73ffffffffffffffffffffffffffffffffffffffff1614611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe9061461a565b60405180910390fd5b806010908051906020019061111d929190613787565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c1906143da565b60405180910390fd5b80915050919050565b600080600090506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161123791906142eb565b60206040518083038186803b15801561124f57600080fd5b505afa158015611263573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112879190613d71565b67ffffffffffffffff8111156112a05761129f614c8c565b5b6040519080825280602002602001820160405280156112ce5781602001602082028036833780820191505090505b50905060005b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161132f91906142eb565b60206040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f9190613d71565b8110156114b957601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b81526004016113e3929190614352565b60206040518083038186803b1580156113fb57600080fd5b505afa15801561140f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114339190613d71565b82828151811061144657611445614c5d565b5b6020026020010181815250506012600083838151811061146957611468614c5d565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611497576114a6565b82806114a290614aee565b9350505b80806114b190614b27565b9150506112d4565b50816fffffffffffffffffffffffffffffffff1692505050919050565b600d5481565b6000600f543a11156114f257600f5490506114f6565b3a90505b90565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611561906146fa565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060006115be836114f9565b905060008167ffffffffffffffff8111156115dc576115db614c8c565b5b60405190808252806020026020018201604052801561160a5781602001602082028036833780820191505090505b50905060005b82811015611654576116228582610cd0565b82828151811061163557611634614c5d565b5b602002602001018181525050808061164c90614b27565b915050611610565b508092505050919050565b6116676126dd565b73ffffffffffffffffffffffffffffffffffffffff1661168561170f565b73ffffffffffffffffffffffffffffffffffffffff16146116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d29061461a565b60405180910390fd5b6116e3612b62565b565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461174890614a8b565b80601f016020809104026020016040519081016040528092919081815260200182805461177490614a8b565b80156117c15780601f10611796576101008083540402835291602001916117c1565b820191906000526020600020905b8154815290600101906020018083116117a457829003601f168201915b5050505050905090565b6117d36126dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906144ba565b60405180910390fd5b806005600061184e6126dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118fb6126dd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611940919061439d565b60405180910390a35050565b600f5481565b61195a6126dd565b73ffffffffffffffffffffffffffffffffffffffff1661197861170f565b73ffffffffffffffffffffffffffffffffffffffff16146119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061461a565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6119fc6119f66126dd565b8361280a565b611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a329061471a565b60405180910390fd5b611a4784848484612cdc565b50505050565b600e5481565b6060611a5e826126e5565b611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a949061465a565b60405180910390fd5b6000611aa7612d38565b90506000815111611ac75760405180602001604052806000815250611af2565b80611ad184612dca565b604051602001611ae29291906142c7565b6040516020818303038152906040525b915050919050565b611b026126dd565b73ffffffffffffffffffffffffffffffffffffffff16611b2061170f565b73ffffffffffffffffffffffffffffffffffffffff1614611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d9061461a565b60405180910390fd5b80600e8190555050565b6060601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c836040518263ffffffff1660e01b8152600401611bdd91906142eb565b60006040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c329190613c2b565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cd56126dd565b73ffffffffffffffffffffffffffffffffffffffff16611cf361170f565b73ffffffffffffffffffffffffffffffffffffffff1614611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d409061461a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db0906143fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ee15750601160009054906101000a900460ff165b611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f179061445a565b60405180910390fd5b600d5481611f2c610c63565b611f3691906148a4565b1115611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e906145fa565b60405180910390fd5b6000611f82336111d3565b11611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb99061453a565b60405180910390fd5b611fcb336111d3565b81111561200d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612004906145fa565b60405180910390fd5b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161206b91906142eb565b60206040518083038186803b15801561208357600080fd5b505afa158015612097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bb9190613d71565b67ffffffffffffffff8111156120d4576120d3614c8c565b5b6040519080825280602002602001820160405280156121025781602001602082028036833780820191505090505b50905060005b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161216391906142eb565b60206040518083038186803b15801561217b57600080fd5b505afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b39190613d71565b81101561234d57601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933836040518363ffffffff1660e01b8152600401612217929190614352565b60206040518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122679190613d71565b82828151811061227a57612279614c5d565b5b6020026020010181815250506012600083838151811061229d5761229c614c5d565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156122cb5761233a565b83831015612339576122e4336122df610c63565b612b44565b82806122ef90614b27565b93505060016012600084848151811061230b5761230a614c5d565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b808061234590614b27565b915050612108565b50505050565b601160009054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123ce5750601160009054906101000a900460ff165b61240d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124049061445a565b60405180910390fd5b600d54612418610c63565b1115612459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612450906145fa565b60405180910390fd5b612462816116e5565b156124a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124999061451a565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016124fd919061475a565b60206040518083038186803b15801561251557600080fd5b505afa158015612529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254d9190613a68565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b1906145da565b60405180910390fd5b6125cb826125c6610c63565b612b44565b60016012600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126d657506126d582612f2b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127c483611121565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612815826126e5565b612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284b9061469a565b60405180910390fd5b600061285f83611121565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128ce57508373ffffffffffffffffffffffffffffffffffffffff166128b684610a40565b73ffffffffffffffffffffffffffffffffffffffff16145b806128df57506128de8185611c39565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661290882611121565b73ffffffffffffffffffffffffffffffffffffffff161461295e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612955906144fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c59061473a565b60405180910390fd5b6129d9838383612f95565b6129e4600082612751565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a349190614985565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a8b91906148a4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612b5e8282604051806020016040528060008152506130a9565b5050565b60006064601447612b73919061492b565b612b7d91906148fa565b905060006064601247612b90919061492b565b612b9a91906148fa565b90506000818347612bab9190614985565b612bb59190614985565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612c1f573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612c88573d6000803e3d6000fd5b50612c916126dd565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612cd6573d6000803e3d6000fd5b50505050565b612ce78484846128e8565b612cf384848484613104565b612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d299061447a565b60405180910390fd5b50505050565b606060108054612d4790614a8b565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7390614a8b565b8015612dc05780601f10612d9557610100808354040283529160200191612dc0565b820191906000526020600020905b815481529060010190602001808311612da357829003601f168201915b5050505050905090565b60606000821415612e12576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f26565b600082905060005b60008214612e44578080612e2d90614b27565b915050600a82612e3d91906148fa565b9150612e1a565b60008167ffffffffffffffff811115612e6057612e5f614c8c565b5b6040519080825280601f01601f191660200182016040528015612e925781602001600182028036833780820191505090505b5090505b60008514612f1f57600182612eab9190614985565b9150600a85612eba9190614b70565b6030612ec691906148a4565b60f81b818381518110612edc57612edb614c5d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f1891906148fa565b9450612e96565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612fa083838361329b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe357612fde816132a0565b613022565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130215761302083826132e9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130655761306081613456565b6130a4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130a3576130a28282613527565b5b5b505050565b6130b383836135a6565b6130c06000848484613104565b6130ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f69061441a565b60405180910390fd5b505050565b60006131258473ffffffffffffffffffffffffffffffffffffffff16613774565b1561328e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261314e6126dd565b8786866040518563ffffffff1660e01b81526004016131709493929190614306565b602060405180830381600087803b15801561318a57600080fd5b505af19250505080156131bb57506040513d601f19601f820116820180604052508101906131b89190613cce565b60015b61323e573d80600081146131eb576040519150601f19603f3d011682016040523d82523d6000602084013e6131f0565b606091505b50600081511415613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d9061459a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613293565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132f6846114f9565b6133009190614985565b90506000600760008481526020019081526020016000205490508181146133e5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061346a9190614985565b905060006009600084815260200190815260200160002054905060006008838154811061349a57613499614c5d565b5b9060005260206000200154905080600883815481106134bc576134bb614c5d565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061350b5761350a614c2e565b5b6001900381819060005260206000200160009055905550505050565b6000613532836114f9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360d906145ba565b60405180910390fd5b61361f816126e5565b1561365f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613656906144da565b60405180910390fd5b61366b60008383612f95565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136bb91906148a4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461379390614a8b565b90600052602060002090601f0160209004810192826137b557600085556137fc565b82601f106137ce57805160ff19168380011785556137fc565b828001600101855582156137fc579182015b828111156137fb5782518255916020019190600101906137e0565b5b509050613809919061380d565b5090565b5b8082111561382657600081600090555060010161380e565b5090565b600061383d6138388461479a565b614775565b905080838252602082019050828560208602820111156138605761385f614cc0565b5b60005b8581101561389057816138768882613a26565b845260208401935060208301925050600181019050613863565b5050509392505050565b60006138ad6138a8846147c6565b614775565b9050828152602081018484840111156138c9576138c8614cc5565b5b6138d4848285614a49565b509392505050565b60006138ef6138ea846147f7565b614775565b90508281526020810184848401111561390b5761390a614cc5565b5b613916848285614a49565b509392505050565b60008135905061392d816151ad565b92915050565b600081519050613942816151ad565b92915050565b600082601f83011261395d5761395c614cbb565b5b815161396d84826020860161382a565b91505092915050565b600081359050613985816151c4565b92915050565b60008135905061399a816151db565b92915050565b6000815190506139af816151db565b92915050565b600082601f8301126139ca576139c9614cbb565b5b81356139da84826020860161389a565b91505092915050565b600082601f8301126139f8576139f7614cbb565b5b8135613a088482602086016138dc565b91505092915050565b600081359050613a20816151f2565b92915050565b600081519050613a35816151f2565b92915050565b600060208284031215613a5157613a50614ccf565b5b6000613a5f8482850161391e565b91505092915050565b600060208284031215613a7e57613a7d614ccf565b5b6000613a8c84828501613933565b91505092915050565b60008060408385031215613aac57613aab614ccf565b5b6000613aba8582860161391e565b9250506020613acb8582860161391e565b9150509250929050565b600080600060608486031215613aee57613aed614ccf565b5b6000613afc8682870161391e565b9350506020613b0d8682870161391e565b9250506040613b1e86828701613a11565b9150509250925092565b60008060008060808587031215613b4257613b41614ccf565b5b6000613b508782880161391e565b9450506020613b618782880161391e565b9350506040613b7287828801613a11565b925050606085013567ffffffffffffffff811115613b9357613b92614cca565b5b613b9f878288016139b5565b91505092959194509250565b60008060408385031215613bc257613bc1614ccf565b5b6000613bd08582860161391e565b9250506020613be185828601613976565b9150509250929050565b60008060408385031215613c0257613c01614ccf565b5b6000613c108582860161391e565b9250506020613c2185828601613a11565b9150509250929050565b600060208284031215613c4157613c40614ccf565b5b600082015167ffffffffffffffff811115613c5f57613c5e614cca565b5b613c6b84828501613948565b91505092915050565b600060208284031215613c8a57613c89614ccf565b5b6000613c9884828501613976565b91505092915050565b600060208284031215613cb757613cb6614ccf565b5b6000613cc58482850161398b565b91505092915050565b600060208284031215613ce457613ce3614ccf565b5b6000613cf2848285016139a0565b91505092915050565b600060208284031215613d1157613d10614ccf565b5b600082013567ffffffffffffffff811115613d2f57613d2e614cca565b5b613d3b848285016139e3565b91505092915050565b600060208284031215613d5a57613d59614ccf565b5b6000613d6884828501613a11565b91505092915050565b600060208284031215613d8757613d86614ccf565b5b6000613d9584828501613a26565b91505092915050565b6000613daa83836142a9565b60208301905092915050565b613dbf816149b9565b82525050565b6000613dd082614838565b613dda8185614866565b9350613de583614828565b8060005b83811015613e16578151613dfd8882613d9e565b9750613e0883614859565b925050600181019050613de9565b5085935050505092915050565b613e2c816149cb565b82525050565b6000613e3d82614843565b613e478185614877565b9350613e57818560208601614a58565b613e6081614cd4565b840191505092915050565b6000613e768261484e565b613e808185614888565b9350613e90818560208601614a58565b613e9981614cd4565b840191505092915050565b6000613eaf8261484e565b613eb98185614899565b9350613ec9818560208601614a58565b80840191505092915050565b6000613ee2600383614888565b9150613eed82614ce5565b602082019050919050565b6000613f05600383614888565b9150613f1082614d0e565b602082019050919050565b6000613f28600383614888565b9150613f3382614d37565b602082019050919050565b6000613f4b602b83614888565b9150613f5682614d60565b604082019050919050565b6000613f6e600f83614888565b9150613f7982614daf565b602082019050919050565b6000613f91600383614888565b9150613f9c82614dd8565b602082019050919050565b6000613fb4600383614888565b9150613fbf82614e01565b602082019050919050565b6000613fd7600383614888565b9150613fe282614e2a565b602082019050919050565b6000613ffa600383614888565b915061400582614e53565b602082019050919050565b600061401d600383614888565b915061402882614e7c565b602082019050919050565b6000614040600f83614888565b915061404b82614ea5565b602082019050919050565b6000614063601b83614888565b915061406e82614ece565b602082019050919050565b6000614086600383614888565b915061409182614ef7565b602082019050919050565b60006140a9600383614888565b91506140b482614f20565b602082019050919050565b60006140cc600383614888565b91506140d782614f49565b602082019050919050565b60006140ef600383614888565b91506140fa82614f72565b602082019050919050565b6000614112601683614888565b915061411d82614f9b565b602082019050919050565b6000614135600d83614888565b915061414082614fc4565b602082019050919050565b6000614158600383614888565b915061416382614fed565b602082019050919050565b600061417b600a83614888565b915061418682615016565b602082019050919050565b600061419e600383614888565b91506141a98261503f565b602082019050919050565b60006141c1600383614888565b91506141cc82615068565b602082019050919050565b60006141e4600383614888565b91506141ef82615091565b602082019050919050565b6000614207601183614888565b9150614212826150ba565b602082019050919050565b600061422a602c83614888565b9150614235826150e3565b604082019050919050565b600061424d600383614888565b915061425882615132565b602082019050919050565b6000614270600383614888565b915061427b8261515b565b602082019050919050565b6000614293600383614888565b915061429e82615184565b602082019050919050565b6142b281614a3f565b82525050565b6142c181614a3f565b82525050565b60006142d38285613ea4565b91506142df8284613ea4565b91508190509392505050565b60006020820190506143006000830184613db6565b92915050565b600060808201905061431b6000830187613db6565b6143286020830186613db6565b61433560408301856142b8565b81810360608301526143478184613e32565b905095945050505050565b60006040820190506143676000830185613db6565b61437460208301846142b8565b9392505050565b600060208201905081810360008301526143958184613dc5565b905092915050565b60006020820190506143b26000830184613e23565b92915050565b600060208201905081810360008301526143d28184613e6b565b905092915050565b600060208201905081810360008301526143f381613ed5565b9050919050565b6000602082019050818103600083015261441381613ef8565b9050919050565b6000602082019050818103600083015261443381613f1b565b9050919050565b6000602082019050818103600083015261445381613f3e565b9050919050565b6000602082019050818103600083015261447381613f61565b9050919050565b6000602082019050818103600083015261449381613f84565b9050919050565b600060208201905081810360008301526144b381613fa7565b9050919050565b600060208201905081810360008301526144d381613fca565b9050919050565b600060208201905081810360008301526144f381613fed565b9050919050565b6000602082019050818103600083015261451381614010565b9050919050565b6000602082019050818103600083015261453381614033565b9050919050565b6000602082019050818103600083015261455381614056565b9050919050565b6000602082019050818103600083015261457381614079565b9050919050565b600060208201905081810360008301526145938161409c565b9050919050565b600060208201905081810360008301526145b3816140bf565b9050919050565b600060208201905081810360008301526145d3816140e2565b9050919050565b600060208201905081810360008301526145f381614105565b9050919050565b6000602082019050818103600083015261461381614128565b9050919050565b600060208201905081810360008301526146338161414b565b9050919050565b600060208201905081810360008301526146538161416e565b9050919050565b6000602082019050818103600083015261467381614191565b9050919050565b60006020820190508181036000830152614693816141b4565b9050919050565b600060208201905081810360008301526146b3816141d7565b9050919050565b600060208201905081810360008301526146d3816141fa565b9050919050565b600060208201905081810360008301526146f38161421d565b9050919050565b6000602082019050818103600083015261471381614240565b9050919050565b6000602082019050818103600083015261473381614263565b9050919050565b6000602082019050818103600083015261475381614286565b9050919050565b600060208201905061476f60008301846142b8565b92915050565b600061477f614790565b905061478b8282614abd565b919050565b6000604051905090565b600067ffffffffffffffff8211156147b5576147b4614c8c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147e1576147e0614c8c565b5b6147ea82614cd4565b9050602081019050919050565b600067ffffffffffffffff82111561481257614811614c8c565b5b61481b82614cd4565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148af82614a3f565b91506148ba83614a3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ef576148ee614ba1565b5b828201905092915050565b600061490582614a3f565b915061491083614a3f565b9250826149205761491f614bd0565b5b828204905092915050565b600061493682614a3f565b915061494183614a3f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561497a57614979614ba1565b5b828202905092915050565b600061499082614a3f565b915061499b83614a3f565b9250828210156149ae576149ad614ba1565b5b828203905092915050565b60006149c482614a1f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a76578082015181840152602081019050614a5b565b83811115614a85576000848401525b50505050565b60006002820490506001821680614aa357607f821691505b60208210811415614ab757614ab6614bff565b5b50919050565b614ac682614cd4565b810181811067ffffffffffffffff82111715614ae557614ae4614c8c565b5b80604052505050565b6000614af982614a03565b91506fffffffffffffffffffffffffffffffff821415614b1c57614b1b614ba1565b5b600182019050919050565b6000614b3282614a3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b6557614b64614ba1565b5b600182019050919050565b6000614b7b82614a3f565b9150614b8683614a3f565b925082614b9657614b95614bd0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334350000000000000000000000000000000000000000000000000000000000600082015250565b7f2334320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335350000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f7420656e61626c650000000000000000000000000000000000600082015250565b7f2335330000000000000000000000000000000000000000000000000000000000600082015250565b7f2334380000000000000000000000000000000000000000000000000000000000600082015250565b7f2335300000000000000000000000000000000000000000000000000000000000600082015250565b7f2335370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335380000000000000000000000000000000000000000000000000000000000600082015250565b7f546f6b656e206973206d696e7465640000000000000000000000000000000000600082015250565b7f4e6f20617661696c61626c6520746f6b656e20666f72206d696e740000000000600082015250565b7f2334390000000000000000000000000000000000000000000000000000000000600082015250565b7f2335310000000000000000000000000000000000000000000000000000000000600082015250565b7f2336300000000000000000000000000000000000000000000000000000000000600082015250565b7f2335360000000000000000000000000000000000000000000000000000000000600082015250565b7f54686973206973206e6f7420796f757220746f6b656e00000000000000000000600082015250565b7f45786365656473206c696d697400000000000000000000000000000000000000600082015250565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b7f4578636565647320353000000000000000000000000000000000000000000000600082015250565b7f2334360000000000000000000000000000000000000000000000000000000000600082015250565b7f2334370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335340000000000000000000000000000000000000000000000000000000000600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2334340000000000000000000000000000000000000000000000000000000000600082015250565b7f2335320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335390000000000000000000000000000000000000000000000000000000000600082015250565b6151b6816149b9565b81146151c157600080fd5b50565b6151cd816149cb565b81146151d857600080fd5b50565b6151e4816149d7565b81146151ef57600080fd5b50565b6151fb81614a3f565b811461520657600080fd5b5056fea264697066735822122063082718075b6bb68814b35053f0fbe3ff002ea0d43756237ae71e8846f41d9464736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001368747470733a2f2f6170692e3133662e696f2f00000000000000000000000000

Deployed Bytecode

0x60806040526004361061020f5760003560e01c80638462151c11610118578063c7876ea4116100a0578063e985e9c51161006f578063e985e9c5146107cb578063f2fde38b14610808578063fb61753a14610831578063fe4ca8471461085a578063fee04d23146108855761020f565b8063c7876ea4146106fd578063c87b56dd14610728578063de4b326214610765578063e16468931461078e5761020f565b806395d89b41116100e757806395d89b411461062c578063a22cb46514610657578063abc15a4914610680578063b02636fd146106ab578063b88d4fde146106d45761020f565b80638462151c1461057d578063853828b6146105ba5780638a086381146105c45780638da5cb5b146106015761020f565b806340c10f191161019b5780636352211e1161016a5780636352211e146104705780636923aebc146104ad5780636e1bd323146104ea5780636ec232d31461051557806370a08231146105405761020f565b806340c10f19146103c557806342842e0e146103e15780634f6ccce71461040a57806355f804b3146104475761020f565b8063095ea7b3116101e2578063095ea7b3146102e257806309acc2cb1461030b57806318160ddd1461033457806323b872dd1461035f5780632f745c59146103885761020f565b806301ffc9a71461021457806306fdde031461025157806307ef5be51461027c578063081812fc146102a5575b600080fd5b34801561022057600080fd5b5061023b60048036038101906102369190613ca1565b6108ae565b604051610248919061439d565b60405180910390f35b34801561025d57600080fd5b50610266610928565b60405161027391906143b8565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613d44565b6109ba565b005b3480156102b157600080fd5b506102cc60048036038101906102c79190613d44565b610a40565b6040516102d991906142eb565b60405180910390f35b3480156102ee57600080fd5b5061030960048036038101906103049190613beb565b610ac5565b005b34801561031757600080fd5b50610332600480360381019061032d9190613d44565b610bdd565b005b34801561034057600080fd5b50610349610c63565b604051610356919061475a565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613ad5565b610c70565b005b34801561039457600080fd5b506103af60048036038101906103aa9190613beb565b610cd0565b6040516103bc919061475a565b60405180910390f35b6103df60048036038101906103da9190613beb565b610d75565b005b3480156103ed57600080fd5b5061040860048036038101906104039190613ad5565b610ffa565b005b34801561041657600080fd5b50610431600480360381019061042c9190613d44565b61101a565b60405161043e919061475a565b60405180910390f35b34801561045357600080fd5b5061046e60048036038101906104699190613cfb565b61108b565b005b34801561047c57600080fd5b5061049760048036038101906104929190613d44565b611121565b6040516104a491906142eb565b60405180910390f35b3480156104b957600080fd5b506104d460048036038101906104cf9190613a3b565b6111d3565b6040516104e1919061475a565b60405180910390f35b3480156104f657600080fd5b506104ff6114d6565b60405161050c919061475a565b60405180910390f35b34801561052157600080fd5b5061052a6114dc565b604051610537919061475a565b60405180910390f35b34801561054c57600080fd5b5061056760048036038101906105629190613a3b565b6114f9565b604051610574919061475a565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f9190613a3b565b6115b1565b6040516105b1919061437b565b60405180910390f35b6105c261165f565b005b3480156105d057600080fd5b506105eb60048036038101906105e69190613d44565b6116e5565b6040516105f8919061439d565b60405180910390f35b34801561060d57600080fd5b5061061661170f565b60405161062391906142eb565b60405180910390f35b34801561063857600080fd5b50610641611739565b60405161064e91906143b8565b60405180910390f35b34801561066357600080fd5b5061067e60048036038101906106799190613bab565b6117cb565b005b34801561068c57600080fd5b5061069561194c565b6040516106a2919061475a565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd9190613c74565b611952565b005b3480156106e057600080fd5b506106fb60048036038101906106f69190613b28565b6119eb565b005b34801561070957600080fd5b50610712611a4d565b60405161071f919061475a565b60405180910390f35b34801561073457600080fd5b5061074f600480360381019061074a9190613d44565b611a53565b60405161075c91906143b8565b60405180910390f35b34801561077157600080fd5b5061078c60048036038101906107879190613d44565b611afa565b005b34801561079a57600080fd5b506107b560048036038101906107b09190613a3b565b611b80565b6040516107c2919061437b565b60405180910390f35b3480156107d757600080fd5b506107f260048036038101906107ed9190613a95565b611c39565b6040516107ff919061439d565b60405180910390f35b34801561081457600080fd5b5061082f600480360381019061082a9190613a3b565b611ccd565b005b34801561083d57600080fd5b5061085860048036038101906108539190613d44565b611e79565b005b34801561086657600080fd5b5061086f612353565b60405161087c919061439d565b60405180910390f35b34801561089157600080fd5b506108ac60048036038101906108a79190613beb565b612366565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109215750610920826125fb565b5b9050919050565b60606000805461093790614a8b565b80601f016020809104026020016040519081016040528092919081815260200182805461096390614a8b565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b6109c26126dd565b73ffffffffffffffffffffffffffffffffffffffff166109e061170f565b73ffffffffffffffffffffffffffffffffffffffff1614610a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2d9061461a565b60405180910390fd5b80600f8190555050565b6000610a4b826126e5565b610a8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a819061455a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ad082611121565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b389061467a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b606126dd565b73ffffffffffffffffffffffffffffffffffffffff161480610b8f5750610b8e81610b896126dd565b611c39565b5b610bce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc59061449a565b60405180910390fd5b610bd88383612751565b505050565b610be56126dd565b73ffffffffffffffffffffffffffffffffffffffff16610c0361170f565b73ffffffffffffffffffffffffffffffffffffffff1614610c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c509061461a565b60405180910390fd5b80600d8190555050565b6000600880549050905090565b610c81610c7b6126dd565b8261280a565b610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb79061457a565b60405180910390fd5b610ccb8383836128e8565b505050565b6000610cdb836114f9565b8210610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d139061443a565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610ddd5750601160009054906101000a900460ff165b610e1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e139061445a565b60405180910390fd5b600d5481610e28610c63565b610e3291906148a4565b1115610e73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6a906145fa565b60405180910390fd5b6032811115610eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eae9061463a565b60405180910390fd5b80600e54610ec5919061492b565b34101580610f205750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610f5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f56906146ba565b60405180910390fd5b60005b81811015610f8e57610f7b83610f76610c63565b612b44565b8080610f8690614b27565b915050610f62565b503373ffffffffffffffffffffffffffffffffffffffff166108fc610fb16114dc565b8362027100610fc0919061492b565b610fca919061492b565b9081150290604051600060405180830381858888f19350505050158015610ff5573d6000803e3d6000fd5b505050565b611015838383604051806020016040528060008152506119eb565b505050565b6000611024610c63565b8210611065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105c906146da565b60405180910390fd5b6008828154811061107957611078614c5d565b5b90600052602060002001549050919050565b6110936126dd565b73ffffffffffffffffffffffffffffffffffffffff166110b161170f565b73ffffffffffffffffffffffffffffffffffffffff1614611107576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fe9061461a565b60405180910390fd5b806010908051906020019061111d929190613787565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c1906143da565b60405180910390fd5b80915050919050565b600080600090506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b815260040161123791906142eb565b60206040518083038186803b15801561124f57600080fd5b505afa158015611263573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112879190613d71565b67ffffffffffffffff8111156112a05761129f614c8c565b5b6040519080825280602002602001820160405280156112ce5781602001602082028036833780820191505090505b50905060005b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b815260040161132f91906142eb565b60206040518083038186803b15801561134757600080fd5b505afa15801561135b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137f9190613d71565b8110156114b957601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5986836040518363ffffffff1660e01b81526004016113e3929190614352565b60206040518083038186803b1580156113fb57600080fd5b505afa15801561140f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114339190613d71565b82828151811061144657611445614c5d565b5b6020026020010181815250506012600083838151811061146957611468614c5d565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff1615611497576114a6565b82806114a290614aee565b9350505b80806114b190614b27565b9150506112d4565b50816fffffffffffffffffffffffffffffffff1692505050919050565b600d5481565b6000600f543a11156114f257600f5490506114f6565b3a90505b90565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561156a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611561906146fa565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606060006115be836114f9565b905060008167ffffffffffffffff8111156115dc576115db614c8c565b5b60405190808252806020026020018201604052801561160a5781602001602082028036833780820191505090505b50905060005b82811015611654576116228582610cd0565b82828151811061163557611634614c5d565b5b602002602001018181525050808061164c90614b27565b915050611610565b508092505050919050565b6116676126dd565b73ffffffffffffffffffffffffffffffffffffffff1661168561170f565b73ffffffffffffffffffffffffffffffffffffffff16146116db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d29061461a565b60405180910390fd5b6116e3612b62565b565b60006012600083815260200190815260200160002060009054906101000a900460ff169050919050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606001805461174890614a8b565b80601f016020809104026020016040519081016040528092919081815260200182805461177490614a8b565b80156117c15780601f10611796576101008083540402835291602001916117c1565b820191906000526020600020905b8154815290600101906020018083116117a457829003601f168201915b5050505050905090565b6117d36126dd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611841576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611838906144ba565b60405180910390fd5b806005600061184e6126dd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118fb6126dd565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611940919061439d565b60405180910390a35050565b600f5481565b61195a6126dd565b73ffffffffffffffffffffffffffffffffffffffff1661197861170f565b73ffffffffffffffffffffffffffffffffffffffff16146119ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c59061461a565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b6119fc6119f66126dd565b8361280a565b611a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a329061471a565b60405180910390fd5b611a4784848484612cdc565b50505050565b600e5481565b6060611a5e826126e5565b611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a949061465a565b60405180910390fd5b6000611aa7612d38565b90506000815111611ac75760405180602001604052806000815250611af2565b80611ad184612dca565b604051602001611ae29291906142c7565b6040516020818303038152906040525b915050919050565b611b026126dd565b73ffffffffffffffffffffffffffffffffffffffff16611b2061170f565b73ffffffffffffffffffffffffffffffffffffffff1614611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d9061461a565b60405180910390fd5b80600e8190555050565b6060601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638462151c836040518263ffffffff1660e01b8152600401611bdd91906142eb565b60006040518083038186803b158015611bf557600080fd5b505afa158015611c09573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190611c329190613c2b565b9050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611cd56126dd565b73ffffffffffffffffffffffffffffffffffffffff16611cf361170f565b73ffffffffffffffffffffffffffffffffffffffff1614611d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d409061461a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611db9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db0906143fa565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480611ee15750601160009054906101000a900460ff165b611f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f179061445a565b60405180910390fd5b600d5481611f2c610c63565b611f3691906148a4565b1115611f77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6e906145fa565b60405180910390fd5b6000611f82336111d3565b11611fc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb99061453a565b60405180910390fd5b611fcb336111d3565b81111561200d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612004906145fa565b60405180910390fd5b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161206b91906142eb565b60206040518083038186803b15801561208357600080fd5b505afa158015612097573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bb9190613d71565b67ffffffffffffffff8111156120d4576120d3614c8c565b5b6040519080825280602002602001820160405280156121025781602001602082028036833780820191505090505b50905060005b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b815260040161216391906142eb565b60206040518083038186803b15801561217b57600080fd5b505afa15801561218f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b39190613d71565b81101561234d57601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632f745c5933836040518363ffffffff1660e01b8152600401612217929190614352565b60206040518083038186803b15801561222f57600080fd5b505afa158015612243573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122679190613d71565b82828151811061227a57612279614c5d565b5b6020026020010181815250506012600083838151811061229d5761229c614c5d565b5b6020026020010151815260200190815260200160002060009054906101000a900460ff16156122cb5761233a565b83831015612339576122e4336122df610c63565b612b44565b82806122ef90614b27565b93505060016012600084848151811061230b5761230a614c5d565b5b6020026020010151815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5b808061234590614b27565b915050612108565b50505050565b601160009054906101000a900460ff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806123ce5750601160009054906101000a900460ff165b61240d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124049061445a565b60405180910390fd5b600d54612418610c63565b1115612459576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612450906145fa565b60405180910390fd5b612462816116e5565b156124a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124999061451a565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e826040518263ffffffff1660e01b81526004016124fd919061475a565b60206040518083038186803b15801561251557600080fd5b505afa158015612529573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254d9190613a68565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146125ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b1906145da565b60405180910390fd5b6125cb826125c6610c63565b612b44565b60016012600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806126c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806126d657506126d582612f2b565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166127c483611121565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612815826126e5565b612854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284b9061469a565b60405180910390fd5b600061285f83611121565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806128ce57508373ffffffffffffffffffffffffffffffffffffffff166128b684610a40565b73ffffffffffffffffffffffffffffffffffffffff16145b806128df57506128de8185611c39565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661290882611121565b73ffffffffffffffffffffffffffffffffffffffff161461295e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612955906144fa565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156129ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c59061473a565b60405180910390fd5b6129d9838383612f95565b6129e4600082612751565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a349190614985565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a8b91906148a4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b612b5e8282604051806020016040528060008152506130a9565b5050565b60006064601447612b73919061492b565b612b7d91906148fa565b905060006064601247612b90919061492b565b612b9a91906148fa565b90506000818347612bab9190614985565b612bb59190614985565b9050600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc849081150290604051600060405180830381858888f19350505050158015612c1f573d6000803e3d6000fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc839081150290604051600060405180830381858888f19350505050158015612c88573d6000803e3d6000fd5b50612c916126dd565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612cd6573d6000803e3d6000fd5b50505050565b612ce78484846128e8565b612cf384848484613104565b612d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d299061447a565b60405180910390fd5b50505050565b606060108054612d4790614a8b565b80601f0160208091040260200160405190810160405280929190818152602001828054612d7390614a8b565b8015612dc05780601f10612d9557610100808354040283529160200191612dc0565b820191906000526020600020905b815481529060010190602001808311612da357829003601f168201915b5050505050905090565b60606000821415612e12576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612f26565b600082905060005b60008214612e44578080612e2d90614b27565b915050600a82612e3d91906148fa565b9150612e1a565b60008167ffffffffffffffff811115612e6057612e5f614c8c565b5b6040519080825280601f01601f191660200182016040528015612e925781602001600182028036833780820191505090505b5090505b60008514612f1f57600182612eab9190614985565b9150600a85612eba9190614b70565b6030612ec691906148a4565b60f81b818381518110612edc57612edb614c5d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612f1891906148fa565b9450612e96565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612fa083838361329b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612fe357612fde816132a0565b613022565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146130215761302083826132e9565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130655761306081613456565b6130a4565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146130a3576130a28282613527565b5b5b505050565b6130b383836135a6565b6130c06000848484613104565b6130ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f69061441a565b60405180910390fd5b505050565b60006131258473ffffffffffffffffffffffffffffffffffffffff16613774565b1561328e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261314e6126dd565b8786866040518563ffffffff1660e01b81526004016131709493929190614306565b602060405180830381600087803b15801561318a57600080fd5b505af19250505080156131bb57506040513d601f19601f820116820180604052508101906131b89190613cce565b60015b61323e573d80600081146131eb576040519150601f19603f3d011682016040523d82523d6000602084013e6131f0565b606091505b50600081511415613236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322d9061459a565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613293565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016132f6846114f9565b6133009190614985565b90506000600760008481526020019081526020016000205490508181146133e5576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061346a9190614985565b905060006009600084815260200190815260200160002054905060006008838154811061349a57613499614c5d565b5b9060005260206000200154905080600883815481106134bc576134bb614c5d565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061350b5761350a614c2e565b5b6001900381819060005260206000200160009055905550505050565b6000613532836114f9565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360d906145ba565b60405180910390fd5b61361f816126e5565b1561365f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613656906144da565b60405180910390fd5b61366b60008383612f95565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546136bb91906148a4565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461379390614a8b565b90600052602060002090601f0160209004810192826137b557600085556137fc565b82601f106137ce57805160ff19168380011785556137fc565b828001600101855582156137fc579182015b828111156137fb5782518255916020019190600101906137e0565b5b509050613809919061380d565b5090565b5b8082111561382657600081600090555060010161380e565b5090565b600061383d6138388461479a565b614775565b905080838252602082019050828560208602820111156138605761385f614cc0565b5b60005b8581101561389057816138768882613a26565b845260208401935060208301925050600181019050613863565b5050509392505050565b60006138ad6138a8846147c6565b614775565b9050828152602081018484840111156138c9576138c8614cc5565b5b6138d4848285614a49565b509392505050565b60006138ef6138ea846147f7565b614775565b90508281526020810184848401111561390b5761390a614cc5565b5b613916848285614a49565b509392505050565b60008135905061392d816151ad565b92915050565b600081519050613942816151ad565b92915050565b600082601f83011261395d5761395c614cbb565b5b815161396d84826020860161382a565b91505092915050565b600081359050613985816151c4565b92915050565b60008135905061399a816151db565b92915050565b6000815190506139af816151db565b92915050565b600082601f8301126139ca576139c9614cbb565b5b81356139da84826020860161389a565b91505092915050565b600082601f8301126139f8576139f7614cbb565b5b8135613a088482602086016138dc565b91505092915050565b600081359050613a20816151f2565b92915050565b600081519050613a35816151f2565b92915050565b600060208284031215613a5157613a50614ccf565b5b6000613a5f8482850161391e565b91505092915050565b600060208284031215613a7e57613a7d614ccf565b5b6000613a8c84828501613933565b91505092915050565b60008060408385031215613aac57613aab614ccf565b5b6000613aba8582860161391e565b9250506020613acb8582860161391e565b9150509250929050565b600080600060608486031215613aee57613aed614ccf565b5b6000613afc8682870161391e565b9350506020613b0d8682870161391e565b9250506040613b1e86828701613a11565b9150509250925092565b60008060008060808587031215613b4257613b41614ccf565b5b6000613b508782880161391e565b9450506020613b618782880161391e565b9350506040613b7287828801613a11565b925050606085013567ffffffffffffffff811115613b9357613b92614cca565b5b613b9f878288016139b5565b91505092959194509250565b60008060408385031215613bc257613bc1614ccf565b5b6000613bd08582860161391e565b9250506020613be185828601613976565b9150509250929050565b60008060408385031215613c0257613c01614ccf565b5b6000613c108582860161391e565b9250506020613c2185828601613a11565b9150509250929050565b600060208284031215613c4157613c40614ccf565b5b600082015167ffffffffffffffff811115613c5f57613c5e614cca565b5b613c6b84828501613948565b91505092915050565b600060208284031215613c8a57613c89614ccf565b5b6000613c9884828501613976565b91505092915050565b600060208284031215613cb757613cb6614ccf565b5b6000613cc58482850161398b565b91505092915050565b600060208284031215613ce457613ce3614ccf565b5b6000613cf2848285016139a0565b91505092915050565b600060208284031215613d1157613d10614ccf565b5b600082013567ffffffffffffffff811115613d2f57613d2e614cca565b5b613d3b848285016139e3565b91505092915050565b600060208284031215613d5a57613d59614ccf565b5b6000613d6884828501613a11565b91505092915050565b600060208284031215613d8757613d86614ccf565b5b6000613d9584828501613a26565b91505092915050565b6000613daa83836142a9565b60208301905092915050565b613dbf816149b9565b82525050565b6000613dd082614838565b613dda8185614866565b9350613de583614828565b8060005b83811015613e16578151613dfd8882613d9e565b9750613e0883614859565b925050600181019050613de9565b5085935050505092915050565b613e2c816149cb565b82525050565b6000613e3d82614843565b613e478185614877565b9350613e57818560208601614a58565b613e6081614cd4565b840191505092915050565b6000613e768261484e565b613e808185614888565b9350613e90818560208601614a58565b613e9981614cd4565b840191505092915050565b6000613eaf8261484e565b613eb98185614899565b9350613ec9818560208601614a58565b80840191505092915050565b6000613ee2600383614888565b9150613eed82614ce5565b602082019050919050565b6000613f05600383614888565b9150613f1082614d0e565b602082019050919050565b6000613f28600383614888565b9150613f3382614d37565b602082019050919050565b6000613f4b602b83614888565b9150613f5682614d60565b604082019050919050565b6000613f6e600f83614888565b9150613f7982614daf565b602082019050919050565b6000613f91600383614888565b9150613f9c82614dd8565b602082019050919050565b6000613fb4600383614888565b9150613fbf82614e01565b602082019050919050565b6000613fd7600383614888565b9150613fe282614e2a565b602082019050919050565b6000613ffa600383614888565b915061400582614e53565b602082019050919050565b600061401d600383614888565b915061402882614e7c565b602082019050919050565b6000614040600f83614888565b915061404b82614ea5565b602082019050919050565b6000614063601b83614888565b915061406e82614ece565b602082019050919050565b6000614086600383614888565b915061409182614ef7565b602082019050919050565b60006140a9600383614888565b91506140b482614f20565b602082019050919050565b60006140cc600383614888565b91506140d782614f49565b602082019050919050565b60006140ef600383614888565b91506140fa82614f72565b602082019050919050565b6000614112601683614888565b915061411d82614f9b565b602082019050919050565b6000614135600d83614888565b915061414082614fc4565b602082019050919050565b6000614158600383614888565b915061416382614fed565b602082019050919050565b600061417b600a83614888565b915061418682615016565b602082019050919050565b600061419e600383614888565b91506141a98261503f565b602082019050919050565b60006141c1600383614888565b91506141cc82615068565b602082019050919050565b60006141e4600383614888565b91506141ef82615091565b602082019050919050565b6000614207601183614888565b9150614212826150ba565b602082019050919050565b600061422a602c83614888565b9150614235826150e3565b604082019050919050565b600061424d600383614888565b915061425882615132565b602082019050919050565b6000614270600383614888565b915061427b8261515b565b602082019050919050565b6000614293600383614888565b915061429e82615184565b602082019050919050565b6142b281614a3f565b82525050565b6142c181614a3f565b82525050565b60006142d38285613ea4565b91506142df8284613ea4565b91508190509392505050565b60006020820190506143006000830184613db6565b92915050565b600060808201905061431b6000830187613db6565b6143286020830186613db6565b61433560408301856142b8565b81810360608301526143478184613e32565b905095945050505050565b60006040820190506143676000830185613db6565b61437460208301846142b8565b9392505050565b600060208201905081810360008301526143958184613dc5565b905092915050565b60006020820190506143b26000830184613e23565b92915050565b600060208201905081810360008301526143d28184613e6b565b905092915050565b600060208201905081810360008301526143f381613ed5565b9050919050565b6000602082019050818103600083015261441381613ef8565b9050919050565b6000602082019050818103600083015261443381613f1b565b9050919050565b6000602082019050818103600083015261445381613f3e565b9050919050565b6000602082019050818103600083015261447381613f61565b9050919050565b6000602082019050818103600083015261449381613f84565b9050919050565b600060208201905081810360008301526144b381613fa7565b9050919050565b600060208201905081810360008301526144d381613fca565b9050919050565b600060208201905081810360008301526144f381613fed565b9050919050565b6000602082019050818103600083015261451381614010565b9050919050565b6000602082019050818103600083015261453381614033565b9050919050565b6000602082019050818103600083015261455381614056565b9050919050565b6000602082019050818103600083015261457381614079565b9050919050565b600060208201905081810360008301526145938161409c565b9050919050565b600060208201905081810360008301526145b3816140bf565b9050919050565b600060208201905081810360008301526145d3816140e2565b9050919050565b600060208201905081810360008301526145f381614105565b9050919050565b6000602082019050818103600083015261461381614128565b9050919050565b600060208201905081810360008301526146338161414b565b9050919050565b600060208201905081810360008301526146538161416e565b9050919050565b6000602082019050818103600083015261467381614191565b9050919050565b60006020820190508181036000830152614693816141b4565b9050919050565b600060208201905081810360008301526146b3816141d7565b9050919050565b600060208201905081810360008301526146d3816141fa565b9050919050565b600060208201905081810360008301526146f38161421d565b9050919050565b6000602082019050818103600083015261471381614240565b9050919050565b6000602082019050818103600083015261473381614263565b9050919050565b6000602082019050818103600083015261475381614286565b9050919050565b600060208201905061476f60008301846142b8565b92915050565b600061477f614790565b905061478b8282614abd565b919050565b6000604051905090565b600067ffffffffffffffff8211156147b5576147b4614c8c565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156147e1576147e0614c8c565b5b6147ea82614cd4565b9050602081019050919050565b600067ffffffffffffffff82111561481257614811614c8c565b5b61481b82614cd4565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148af82614a3f565b91506148ba83614a3f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156148ef576148ee614ba1565b5b828201905092915050565b600061490582614a3f565b915061491083614a3f565b9250826149205761491f614bd0565b5b828204905092915050565b600061493682614a3f565b915061494183614a3f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561497a57614979614ba1565b5b828202905092915050565b600061499082614a3f565b915061499b83614a3f565b9250828210156149ae576149ad614ba1565b5b828203905092915050565b60006149c482614a1f565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60006fffffffffffffffffffffffffffffffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614a76578082015181840152602081019050614a5b565b83811115614a85576000848401525b50505050565b60006002820490506001821680614aa357607f821691505b60208210811415614ab757614ab6614bff565b5b50919050565b614ac682614cd4565b810181811067ffffffffffffffff82111715614ae557614ae4614c8c565b5b80604052505050565b6000614af982614a03565b91506fffffffffffffffffffffffffffffffff821415614b1c57614b1b614ba1565b5b600182019050919050565b6000614b3282614a3f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b6557614b64614ba1565b5b600182019050919050565b6000614b7b82614a3f565b9150614b8683614a3f565b925082614b9657614b95614bd0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f2334350000000000000000000000000000000000000000000000000000000000600082015250565b7f2334320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335350000000000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f53616c65206e6f7420656e61626c650000000000000000000000000000000000600082015250565b7f2335330000000000000000000000000000000000000000000000000000000000600082015250565b7f2334380000000000000000000000000000000000000000000000000000000000600082015250565b7f2335300000000000000000000000000000000000000000000000000000000000600082015250565b7f2335370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335380000000000000000000000000000000000000000000000000000000000600082015250565b7f546f6b656e206973206d696e7465640000000000000000000000000000000000600082015250565b7f4e6f20617661696c61626c6520746f6b656e20666f72206d696e740000000000600082015250565b7f2334390000000000000000000000000000000000000000000000000000000000600082015250565b7f2335310000000000000000000000000000000000000000000000000000000000600082015250565b7f2336300000000000000000000000000000000000000000000000000000000000600082015250565b7f2335360000000000000000000000000000000000000000000000000000000000600082015250565b7f54686973206973206e6f7420796f757220746f6b656e00000000000000000000600082015250565b7f45786365656473206c696d697400000000000000000000000000000000000000600082015250565b7f2334310000000000000000000000000000000000000000000000000000000000600082015250565b7f4578636565647320353000000000000000000000000000000000000000000000600082015250565b7f2334360000000000000000000000000000000000000000000000000000000000600082015250565b7f2334370000000000000000000000000000000000000000000000000000000000600082015250565b7f2335340000000000000000000000000000000000000000000000000000000000600082015250565b7f56616c75652062656c6f77207072696365000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f2334340000000000000000000000000000000000000000000000000000000000600082015250565b7f2335320000000000000000000000000000000000000000000000000000000000600082015250565b7f2335390000000000000000000000000000000000000000000000000000000000600082015250565b6151b6816149b9565b81146151c157600080fd5b50565b6151cd816149cb565b81146151d857600080fd5b50565b6151e4816149d7565b81146151ef57600080fd5b50565b6151fb81614a3f565b811461520657600080fd5b5056fea264697066735822122063082718075b6bb68814b35053f0fbe3ff002ea0d43756237ae71e8846f41d9464736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001368747470733a2f2f6170692e3133662e696f2f00000000000000000000000000

-----Decoded View---------------
Arg [0] : baseURI (string): https://api.13f.io/

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000013
Arg [2] : 68747470733a2f2f6170692e3133662e696f2f00000000000000000000000000


Deployed Bytecode Sourcemap

38922:4979:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32795:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19990:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40623:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21330:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20943:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39509:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33448:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22157:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33116:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39844:544;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22487:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33638:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40869:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19722:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41706:533;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38982:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40400:210;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19491:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40979:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41331:81;;;:::i;:::-;;41567:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14209:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20159:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21582:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39073:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39394:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22709:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39017:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20334:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39615:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41425:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21926:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15726:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42255:1164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39149:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43439:456;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32795:237;32897:4;32936:35;32921:50;;;:11;:50;;;;:103;;;;32988:36;33012:11;32988:23;:36::i;:::-;32921:103;32914:110;;32795:237;;;:::o;19990:100::-;20044:13;20077:5;20070:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19990:100;:::o;40623:111::-;14440:12;:10;:12::i;:::-;14429:23;;:7;:5;:7::i;:::-;:23;;;14421:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;40713:13:::1;40698:12;:28;;;;40623:111:::0;:::o;21330:180::-;21406:7;21434:16;21442:7;21434;:16::i;:::-;21426:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;21478:15;:24;21494:7;21478:24;;;;;;;;;;;;;;;;;;;;;21471:31;;21330:180;;;:::o;20943:321::-;21024:13;21040:23;21055:7;21040:14;:23::i;:::-;21024:39;;21088:5;21082:11;;:2;:11;;;;21074:27;;;;;;;;;;;;:::i;:::-;;;;;;;;;21138:5;21122:21;;:12;:10;:12::i;:::-;:21;;;:69;;;;21147:44;21171:5;21178:12;:10;:12::i;:::-;21147:23;:44::i;:::-;21122:69;21114:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;21235:21;21244:2;21248:7;21235:8;:21::i;:::-;21013:251;20943:321;;:::o;39509:98::-;14440:12;:10;:12::i;:::-;14429:23;;:7;:5;:7::i;:::-;:23;;;14421:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39589:10:::1;39577:9;:22;;;;39509:98:::0;:::o;33448:113::-;33509:7;33536:10;:17;;;;33529:24;;33448:113;:::o;22157:259::-;22318:41;22337:12;:10;:12::i;:::-;22351:7;22318:18;:41::i;:::-;22310:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22380:28;22390:4;22396:2;22400:7;22380:9;:28::i;:::-;22157:259;;;:::o;33116:256::-;33213:7;33249:23;33266:5;33249:16;:23::i;:::-;33241:5;:31;33233:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;33338:12;:19;33351:5;33338:19;;;;;;;;;;;;;;;:26;33358:5;33338:26;;;;;;;;;;;;33331:33;;33116:256;;;;:::o;39844:544::-;39932:6;;;;;;;;;;;39918:20;;:10;:20;;;:34;;;;39942:10;;;;;;;;;;;39918:34;39910:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;40016:9;;40006:6;39991:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;39983:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40072:2;40062:6;:12;;40054:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;40133:6;40121:9;;:18;;;;:::i;:::-;40108:9;:31;;:55;;;;40157:6;;;;;;;;;;;40143:20;;:10;:20;;;40108:55;40100:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;40209:6;40205:92;40225:6;40221:1;:10;40205:92;;;40252:29;40262:3;40267:13;:11;:13::i;:::-;40252:9;:29::i;:::-;40233:3;;;;;:::i;:::-;;;;40205:92;;;;40329:10;40321:28;;:59;40369:10;:8;:10::i;:::-;40360:6;40351;:15;;;;:::i;:::-;:28;;;;:::i;:::-;40321:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39844:544;;:::o;22487:151::-;22591:39;22608:4;22614:2;22618:7;22591:39;;;;;;;;;;;;:16;:39::i;:::-;22487:151;;;:::o;33638:233::-;33713:7;33749:30;:28;:30::i;:::-;33741:5;:38;33733:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;33846:10;33857:5;33846:17;;;;;;;;:::i;:::-;;;;;;;;;;33839:24;;33638:233;;;:::o;40869:102::-;14440:12;:10;:12::i;:::-;14429:23;;:7;:5;:7::i;:::-;:23;;;14421:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;40956:7:::1;40940:13;:23;;;;;;;;;;;;:::i;:::-;;40869:102:::0;:::o;19722:201::-;19794:7;19814:13;19830:7;:16;19838:7;19830:16;;;;;;;;;;;;;;;;;;;;;19814:32;;19882:1;19865:19;;:5;:19;;;;19857:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;19910:5;19903:12;;;19722:201;;;:::o;41706:533::-;41783:7;41803:23;41829:1;41803:27;;41841:25;41883:3;;;;;;;;;;;:13;;;41897:7;41883:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41869:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41841:65;;41921:6;41917:277;41937:3;;;;;;;;;;;:13;;;41951:7;41937:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41933:1;:26;41917:277;;;41994:3;;;;;;;;;;;:23;;;42018:7;42027:1;41994:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41980:8;41989:1;41980:11;;;;;;;;:::i;:::-;;;;;;;:49;;;;;42062:13;:26;42076:8;42085:1;42076:11;;;;;;;;:::i;:::-;;;;;;;;42062:26;;;;;;;;;;;;;;;;;;;;;42058:111;;;;;;42135:16;;;;;:::i;:::-;;;;42058:111;41961:3;;;;;:::i;:::-;;;;41917:277;;;;42217:14;42210:21;;;;;;41706:533;;;:::o;38982:28::-;;;;:::o;40400:210::-;40448:4;40483:12;;40468:11;:27;40464:130;;;40519:12;;40511:20;;;;40464:130;40571:11;40564:18;;40400:210;;:::o;19491:169::-;19563:7;19608:1;19591:19;;:5;:19;;;;19583:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;19636:9;:16;19646:5;19636:16;;;;;;;;;;;;;;;;19629:23;;19491:169;;;:::o;40979:344::-;41040:16;41069:15;41087:17;41097:6;41087:9;:17::i;:::-;41069:35;;41117:25;41159:10;41145:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41117:53;;41185:6;41181:107;41201:10;41197:1;:14;41181:107;;;41246:30;41266:6;41274:1;41246:19;:30::i;:::-;41232:8;41241:1;41232:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;41213:3;;;;;:::i;:::-;;;;41181:107;;;;41307:8;41300:15;;;;40979:344;;;:::o;41331:81::-;14440:12;:10;:12::i;:::-;14429:23;;:7;:5;:7::i;:::-;:23;;;14421:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;41390:14:::1;:12;:14::i;:::-;41331:81::o:0;41567:128::-;41641:4;41666:13;:21;41680:6;41666:21;;;;;;;;;;;;;;;;;;;;;41659:28;;41567:128;;;:::o;14209:87::-;14255:7;14282:6;;;;;;;;;;;14275:13;;14209:87;:::o;20159:104::-;20215:13;20248:7;20241:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20159:104;:::o;21582:273::-;21697:12;:10;:12::i;:::-;21685:24;;:8;:24;;;;21677:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;21775:8;21730:18;:32;21749:12;:10;:12::i;:::-;21730:32;;;;;;;;;;;;;;;:42;21763:8;21730:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;21828:8;21799:48;;21814:12;:10;:12::i;:::-;21799:48;;;21838:8;21799:48;;;;;;:::i;:::-;;;;;;;;21582:273;;:::o;39073:37::-;;;;:::o;39394:103::-;14440:12;:10;:12::i;:::-;14429:23;;:7;:5;:7::i;:::-;:23;;;14421:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39478:11:::1;39465:10;;:24;;;;;;;;;;;;;;;;;;39394:103:::0;:::o;22709:239::-;22841:41;22860:12;:10;:12::i;:::-;22874:7;22841:18;:41::i;:::-;22833:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22901:39;22915:4;22921:2;22925:7;22934:5;22901:13;:39::i;:::-;22709:239;;;;:::o;39017:35::-;;;;:::o;20334:316::-;20407:13;20441:16;20449:7;20441;:16::i;:::-;20433:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;20478:21;20502:10;:8;:10::i;:::-;20478:34;;20554:1;20536:7;20530:21;:25;:112;;;;;;;;;;;;;;;;;20595:7;20604:18;:7;:16;:18::i;:::-;20578:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20530:112;20523:119;;;20334:316;;;:::o;39615:99::-;14440:12;:10;:12::i;:::-;14429:23;;:7;:5;:7::i;:::-;:23;;;14421:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;39696:10:::1;39684:9;:22;;;;39615:99:::0;:::o;41425:130::-;41483:16;41520:3;;;;;;;;;;;:17;;;41538:7;41520:26;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41513:33;;41425:130;;;:::o;21926:164::-;22023:4;22047:18;:25;22066:5;22047:25;;;;;;;;;;;;;;;:35;22073:8;22047:35;;;;;;;;;;;;;;;;;;;;;;;;;22040:42;;21926:164;;;;:::o;15726:209::-;14440:12;:10;:12::i;:::-;14429:23;;:7;:5;:7::i;:::-;:23;;;14421:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;15835:1:::1;15815:22;;:8;:22;;;;15807:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;15890:8;15861:38;;15882:6;;;;;;;;;;;15861:38;;;;;;;;;;;;15919:8;15910:6;;:17;;;;;;;;;;;;;;;;;;15726:209:::0;:::o;42255:1164::-;42328:6;;;;;;;;;;;42314:20;;:10;:20;;;:34;;;;42338:10;;;;;;;;;;;42314:34;42306:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;42412:9;;42402:6;42387:13;:11;:13::i;:::-;:21;;;;:::i;:::-;:34;;42379:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;42494:1;42458:33;42480:10;42458:21;:33::i;:::-;:37;42450:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;42556:33;42578:10;42556:21;:33::i;:::-;42546:6;:43;;42538:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42678:20;42761:25;42803:3;;;;;;;;;;;:13;;;42817:10;42803:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42789:40;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42761:68;;42844:6;42840:566;42860:3;;;;;;;;;;;:13;;;42874:10;42860:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42856:1;:29;42840:566;;;42920:3;;;;;;;;;;;:23;;;42944:10;42956:1;42920:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42906:8;42915:1;42906:11;;;;;;;;:::i;:::-;;;;;;;:52;;;;;43032:13;:26;43046:8;43055:1;43046:11;;;;;;;;:::i;:::-;;;;;;;;43032:26;;;;;;;;;;;;;;;;;;;;;43028:362;;;;;;43138:6;43121:14;:23;43118:253;;;43193:36;43203:10;43215:13;:11;:13::i;:::-;43193:9;:36::i;:::-;43254:16;;;;;:::i;:::-;;;;43324:4;43295:13;:26;43309:8;43318:1;43309:11;;;;;;;;:::i;:::-;;;;;;;;43295:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;43118:253;43028:362;42887:3;;;;;:::i;:::-;;;;42840:566;;;;42295:1124;;42255:1164;:::o;39149:30::-;;;;;;;;;;;;;:::o;43439:456::-;43532:6;;;;;;;;;;;43518:20;;:10;:20;;;:34;;;;43542:10;;;;;;;;;;;43518:34;43510:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43609:9;;43591:13;:11;:13::i;:::-;:27;;43583:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43656:27;43676:6;43656:19;:27::i;:::-;43655:28;43647:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;43731:3;;;;;;;;;;;:11;;;43743:6;43731:19;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43724:26;;:3;:26;;;43715:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43802:29;43812:3;43817:13;:11;:13::i;:::-;43802:9;:29::i;:::-;43870:4;43846:13;:21;43860:6;43846:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;43439:456;;:::o;19135:292::-;19237:4;19276:25;19261:40;;;:11;:40;;;;:105;;;;19333:33;19318:48;;;:11;:48;;;;19261:105;:158;;;;19383:36;19407:11;19383:23;:36::i;:::-;19261:158;19254:165;;19135:292;;;:::o;4977:98::-;5030:7;5057:10;5050:17;;4977:98;:::o;24368:127::-;24433:4;24485:1;24457:30;;:7;:16;24465:7;24457:16;;;;;;;;;;;;;;;;;;;;;:30;;;;24450:37;;24368:127;;;:::o;28039:174::-;28141:2;28114:15;:24;28130:7;28114:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28197:7;28193:2;28159:46;;28168:23;28183:7;28168:14;:23::i;:::-;28159:46;;;;;;;;;;;;28039:174;;:::o;24662:314::-;24755:4;24780:16;24788:7;24780;:16::i;:::-;24772:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;24815:13;24831:23;24846:7;24831:14;:23::i;:::-;24815:39;;24884:5;24873:16;;:7;:16;;;:51;;;;24917:7;24893:31;;:20;24905:7;24893:11;:20::i;:::-;:31;;;24873:51;:94;;;;24928:39;24952:5;24959:7;24928:23;:39::i;:::-;24873:94;24865:103;;;24662:314;;;;:::o;27448:473::-;27573:4;27546:31;;:23;27561:7;27546:14;:23::i;:::-;:31;;;27538:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;27618:1;27604:16;;:2;:16;;;;27596:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;27641:39;27662:4;27668:2;27672:7;27641:20;:39::i;:::-;27745:29;27762:1;27766:7;27745:8;:29::i;:::-;27806:1;27787:9;:15;27797:4;27787:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;27835:1;27818:9;:13;27828:2;27818:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;27866:2;27847:7;:16;27855:7;27847:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;27905:7;27901:2;27886:27;;27895:4;27886:27;;;;;;;;;;;;27448:473;;;:::o;25318:110::-;25394:26;25404:2;25408:7;25394:26;;;;;;;;;;;;:9;:26::i;:::-;25318:110;;:::o;15175:382::-;15227:18;15273:3;15270:2;15248:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;15227:49;;15286:17;15331:3;15328:2;15306:21;:24;;;;:::i;:::-;:28;;;;:::i;:::-;15286:48;;15344:20;15400:9;15389:10;15367:21;:32;;;;:::i;:::-;:42;;;;:::i;:::-;15344:65;;15427:3;;;;;;;;;;;15419:21;;:33;15441:10;15419:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15470:2;;;;;;;;;;;15462:20;;:31;15483:9;15462:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15511:12;:10;:12::i;:::-;15503:30;;:44;15534:12;15503:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15217:340;;;15175:382::o;23830:225::-;23944:28;23954:4;23960:2;23964:7;23944:9;:28::i;:::-;23991:48;24014:4;24020:2;24024:7;24033:5;23991:22;:48::i;:::-;23983:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23830:225;;;;:::o;40743:114::-;40803:13;40836;40829:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40743:114;:::o;16170:723::-;16226:13;16456:1;16447:5;:10;16443:53;;;16474:10;;;;;;;;;;;;;;;;;;;;;16443:53;16506:12;16521:5;16506:20;;16537:14;16562:78;16577:1;16569:4;:9;16562:78;;16595:8;;;;;:::i;:::-;;;;16626:2;16618:10;;;;;:::i;:::-;;;16562:78;;;16650:19;16682:6;16672:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16650:39;;16700:154;16716:1;16707:5;:10;16700:154;;16744:1;16734:11;;;;;:::i;:::-;;;16811:2;16803:5;:10;;;;:::i;:::-;16790:2;:24;;;;:::i;:::-;16777:39;;16760:6;16767;16760:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;16840:2;16831:11;;;;;:::i;:::-;;;16700:154;;;16878:6;16864:21;;;;;16170:723;;;;:::o;6025:157::-;6110:4;6149:25;6134:40;;;:11;:40;;;;6127:47;;6025:157;;;:::o;34484:555::-;34594:45;34621:4;34627:2;34631:7;34594:26;:45::i;:::-;34672:1;34656:18;;:4;:18;;;34652:187;;;34691:40;34723:7;34691:31;:40::i;:::-;34652:187;;;34761:2;34753:10;;:4;:10;;;34749:90;;34780:47;34813:4;34819:7;34780:32;:47::i;:::-;34749:90;34652:187;34867:1;34853:16;;:2;:16;;;34849:183;;;34886:45;34923:7;34886:36;:45::i;:::-;34849:183;;;34959:4;34953:10;;:2;:10;;;34949:83;;34980:40;35008:2;35012:7;34980:27;:40::i;:::-;34949:83;34849:183;34484:555;;;:::o;25655:203::-;25751:18;25757:2;25761:7;25751:5;:18::i;:::-;25788:54;25819:1;25823:2;25827:7;25836:5;25788:22;:54::i;:::-;25780:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25655:203;;;:::o;28778:796::-;28899:4;28925:15;:2;:13;;;:15::i;:::-;28921:646;;;28977:2;28961:36;;;28998:12;:10;:12::i;:::-;29012:4;29018:7;29027:5;28961:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;28957:555;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29224:1;29207:6;:13;:18;29203:294;;;29250:13;;;;;;;;;;:::i;:::-;;;;;;;;29203:294;29447:6;29441:13;29432:6;29428:2;29424:15;29417:38;28957:555;29094:45;;;29084:55;;;:6;:55;;;;29077:62;;;;;28921:646;29551:4;29544:11;;28778:796;;;;;;;:::o;30187:93::-;;;;:::o;35762:164::-;35866:10;:17;;;;35839:15;:24;35855:7;35839:24;;;;;;;;;;;:44;;;;35894:10;35910:7;35894:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35762:164;:::o;36553:988::-;36819:22;36869:1;36844:22;36861:4;36844:16;:22::i;:::-;:26;;;;:::i;:::-;36819:51;;36881:18;36902:17;:26;36920:7;36902:26;;;;;;;;;;;;36881:47;;37049:14;37035:10;:28;37031:328;;37080:19;37102:12;:18;37115:4;37102:18;;;;;;;;;;;;;;;:34;37121:14;37102:34;;;;;;;;;;;;37080:56;;37186:11;37153:12;:18;37166:4;37153:18;;;;;;;;;;;;;;;:30;37172:10;37153:30;;;;;;;;;;;:44;;;;37303:10;37270:17;:30;37288:11;37270:30;;;;;;;;;;;:43;;;;37065:294;37031:328;37455:17;:26;37473:7;37455:26;;;;;;;;;;;37448:33;;;37499:12;:18;37512:4;37499:18;;;;;;;;;;;;;;;:34;37518:14;37499:34;;;;;;;;;;;37492:41;;;36634:907;;36553:988;;:::o;37836:1079::-;38089:22;38134:1;38114:10;:17;;;;:21;;;;:::i;:::-;38089:46;;38146:18;38167:15;:24;38183:7;38167:24;;;;;;;;;;;;38146:45;;38518:19;38540:10;38551:14;38540:26;;;;;;;;:::i;:::-;;;;;;;;;;38518:48;;38604:11;38579:10;38590;38579:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;38715:10;38684:15;:28;38700:11;38684:28;;;;;;;;;;;:41;;;;38856:15;:24;38872:7;38856:24;;;;;;;;;;;38849:31;;;38891:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37907:1008;;;37836:1079;:::o;35340:221::-;35425:14;35442:20;35459:2;35442:16;:20::i;:::-;35425:37;;35500:7;35473:12;:16;35486:2;35473:16;;;;;;;;;;;;;;;:24;35490:6;35473:24;;;;;;;;;;;:34;;;;35547:6;35518:17;:26;35536:7;35518:26;;;;;;;;;;;:35;;;;35414:147;35340:221;;:::o;26194:328::-;26288:1;26274:16;;:2;:16;;;;26266:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;26318:16;26326:7;26318;:16::i;:::-;26317:17;26309:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;26355:45;26384:1;26388:2;26392:7;26355:20;:45::i;:::-;26430:1;26413:9;:13;26423:2;26413:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;26461:2;26442:7;:16;26450:7;26442:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26506:7;26502:2;26481:33;;26498:1;26481:33;;;;;;;;;;;;26194:328;;:::o;160:239::-;220:4;245:12;356:7;344:20;336:28;;390:1;383:4;:8;376:15;;;160:239;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:744:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:143;;;415:79;;:::i;:::-;361:143;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;24:744;;;;;:::o;774:410::-;851:5;876:65;892:48;933:6;892:48;:::i;:::-;876:65;:::i;:::-;867:74;;964:6;957:5;950:21;1002:4;995:5;991:16;1040:3;1031:6;1026:3;1022:16;1019:25;1016:112;;;1047:79;;:::i;:::-;1016:112;1137:41;1171:6;1166:3;1161;1137:41;:::i;:::-;857:327;774:410;;;;;:::o;1190:412::-;1268:5;1293:66;1309:49;1351:6;1309:49;:::i;:::-;1293:66;:::i;:::-;1284:75;;1382:6;1375:5;1368:21;1420:4;1413:5;1409:16;1458:3;1449:6;1444:3;1440:16;1437:25;1434:112;;;1465:79;;:::i;:::-;1434:112;1555:41;1589:6;1584:3;1579;1555:41;:::i;:::-;1274:328;1190:412;;;;;:::o;1608:139::-;1654:5;1692:6;1679:20;1670:29;;1708:33;1735:5;1708:33;:::i;:::-;1608:139;;;;:::o;1753:143::-;1810:5;1841:6;1835:13;1826:22;;1857:33;1884:5;1857:33;:::i;:::-;1753:143;;;;:::o;1919:385::-;2001:5;2050:3;2043:4;2035:6;2031:17;2027:27;2017:122;;2058:79;;:::i;:::-;2017:122;2168:6;2162:13;2193:105;2294:3;2286:6;2279:4;2271:6;2267:17;2193:105;:::i;:::-;2184:114;;2007:297;1919:385;;;;:::o;2310:133::-;2353:5;2391:6;2378:20;2369:29;;2407:30;2431:5;2407:30;:::i;:::-;2310:133;;;;:::o;2449:137::-;2494:5;2532:6;2519:20;2510:29;;2548:32;2574:5;2548:32;:::i;:::-;2449:137;;;;:::o;2592:141::-;2648:5;2679:6;2673:13;2664:22;;2695:32;2721:5;2695:32;:::i;:::-;2592:141;;;;:::o;2752:338::-;2807:5;2856:3;2849:4;2841:6;2837:17;2833:27;2823:122;;2864:79;;:::i;:::-;2823:122;2981:6;2968:20;3006:78;3080:3;3072:6;3065:4;3057:6;3053:17;3006:78;:::i;:::-;2997:87;;2813:277;2752:338;;;;:::o;3110:340::-;3166:5;3215:3;3208:4;3200:6;3196:17;3192:27;3182:122;;3223:79;;:::i;:::-;3182:122;3340:6;3327:20;3365:79;3440:3;3432:6;3425:4;3417:6;3413:17;3365:79;:::i;:::-;3356:88;;3172:278;3110:340;;;;:::o;3456:139::-;3502:5;3540:6;3527:20;3518:29;;3556:33;3583:5;3556:33;:::i;:::-;3456:139;;;;:::o;3601:143::-;3658:5;3689:6;3683:13;3674:22;;3705:33;3732:5;3705:33;:::i;:::-;3601:143;;;;:::o;3750:329::-;3809:6;3858:2;3846:9;3837:7;3833:23;3829:32;3826:119;;;3864:79;;:::i;:::-;3826:119;3984:1;4009:53;4054:7;4045:6;4034:9;4030:22;4009:53;:::i;:::-;3999:63;;3955:117;3750:329;;;;:::o;4085:351::-;4155:6;4204:2;4192:9;4183:7;4179:23;4175:32;4172:119;;;4210:79;;:::i;:::-;4172:119;4330:1;4355:64;4411:7;4402:6;4391:9;4387:22;4355:64;:::i;:::-;4345:74;;4301:128;4085:351;;;;:::o;4442:474::-;4510:6;4518;4567:2;4555:9;4546:7;4542:23;4538:32;4535:119;;;4573:79;;:::i;:::-;4535:119;4693:1;4718:53;4763:7;4754:6;4743:9;4739:22;4718:53;:::i;:::-;4708:63;;4664:117;4820:2;4846:53;4891:7;4882:6;4871:9;4867:22;4846:53;:::i;:::-;4836:63;;4791:118;4442:474;;;;;:::o;4922:619::-;4999:6;5007;5015;5064:2;5052:9;5043:7;5039:23;5035:32;5032:119;;;5070:79;;:::i;:::-;5032:119;5190:1;5215:53;5260:7;5251:6;5240:9;5236:22;5215:53;:::i;:::-;5205:63;;5161:117;5317:2;5343:53;5388:7;5379:6;5368:9;5364:22;5343:53;:::i;:::-;5333:63;;5288:118;5445:2;5471:53;5516:7;5507:6;5496:9;5492:22;5471:53;:::i;:::-;5461:63;;5416:118;4922:619;;;;;:::o;5547:943::-;5642:6;5650;5658;5666;5715:3;5703:9;5694:7;5690:23;5686:33;5683:120;;;5722:79;;:::i;:::-;5683:120;5842:1;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5813:117;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;6097:2;6123:53;6168:7;6159:6;6148:9;6144:22;6123:53;:::i;:::-;6113:63;;6068:118;6253:2;6242:9;6238:18;6225:32;6284:18;6276:6;6273:30;6270:117;;;6306:79;;:::i;:::-;6270:117;6411:62;6465:7;6456:6;6445:9;6441:22;6411:62;:::i;:::-;6401:72;;6196:287;5547:943;;;;;;;:::o;6496:468::-;6561:6;6569;6618:2;6606:9;6597:7;6593:23;6589:32;6586:119;;;6624:79;;:::i;:::-;6586:119;6744:1;6769:53;6814:7;6805:6;6794:9;6790:22;6769:53;:::i;:::-;6759:63;;6715:117;6871:2;6897:50;6939:7;6930:6;6919:9;6915:22;6897:50;:::i;:::-;6887:60;;6842:115;6496:468;;;;;:::o;6970:474::-;7038:6;7046;7095:2;7083:9;7074:7;7070:23;7066:32;7063:119;;;7101:79;;:::i;:::-;7063:119;7221:1;7246:53;7291:7;7282:6;7271:9;7267:22;7246:53;:::i;:::-;7236:63;;7192:117;7348:2;7374:53;7419:7;7410:6;7399:9;7395:22;7374:53;:::i;:::-;7364:63;;7319:118;6970:474;;;;;:::o;7450:554::-;7545:6;7594:2;7582:9;7573:7;7569:23;7565:32;7562:119;;;7600:79;;:::i;:::-;7562:119;7741:1;7730:9;7726:17;7720:24;7771:18;7763:6;7760:30;7757:117;;;7793:79;;:::i;:::-;7757:117;7898:89;7979:7;7970:6;7959:9;7955:22;7898:89;:::i;:::-;7888:99;;7691:306;7450:554;;;;:::o;8010:323::-;8066:6;8115:2;8103:9;8094:7;8090:23;8086:32;8083:119;;;8121:79;;:::i;:::-;8083:119;8241:1;8266:50;8308:7;8299:6;8288:9;8284:22;8266:50;:::i;:::-;8256:60;;8212:114;8010:323;;;;:::o;8339:327::-;8397:6;8446:2;8434:9;8425:7;8421:23;8417:32;8414:119;;;8452:79;;:::i;:::-;8414:119;8572:1;8597:52;8641:7;8632:6;8621:9;8617:22;8597:52;:::i;:::-;8587:62;;8543:116;8339:327;;;;:::o;8672:349::-;8741:6;8790:2;8778:9;8769:7;8765:23;8761:32;8758:119;;;8796:79;;:::i;:::-;8758:119;8916:1;8941:63;8996:7;8987:6;8976:9;8972:22;8941:63;:::i;:::-;8931:73;;8887:127;8672:349;;;;:::o;9027:509::-;9096:6;9145:2;9133:9;9124:7;9120:23;9116:32;9113:119;;;9151:79;;:::i;:::-;9113:119;9299:1;9288:9;9284:17;9271:31;9329:18;9321:6;9318:30;9315:117;;;9351:79;;:::i;:::-;9315:117;9456:63;9511:7;9502:6;9491:9;9487:22;9456:63;:::i;:::-;9446:73;;9242:287;9027:509;;;;:::o;9542:329::-;9601:6;9650:2;9638:9;9629:7;9625:23;9621:32;9618:119;;;9656:79;;:::i;:::-;9618:119;9776:1;9801:53;9846:7;9837:6;9826:9;9822:22;9801:53;:::i;:::-;9791:63;;9747:117;9542:329;;;;:::o;9877:351::-;9947:6;9996:2;9984:9;9975:7;9971:23;9967:32;9964:119;;;10002:79;;:::i;:::-;9964:119;10122:1;10147:64;10203:7;10194:6;10183:9;10179:22;10147:64;:::i;:::-;10137:74;;10093:128;9877:351;;;;:::o;10234:179::-;10303:10;10324:46;10366:3;10358:6;10324:46;:::i;:::-;10402:4;10397:3;10393:14;10379:28;;10234:179;;;;:::o;10419:118::-;10506:24;10524:5;10506:24;:::i;:::-;10501:3;10494:37;10419:118;;:::o;10573:732::-;10692:3;10721:54;10769:5;10721:54;:::i;:::-;10791:86;10870:6;10865:3;10791:86;:::i;:::-;10784:93;;10901:56;10951:5;10901:56;:::i;:::-;10980:7;11011:1;10996:284;11021:6;11018:1;11015:13;10996:284;;;11097:6;11091:13;11124:63;11183:3;11168:13;11124:63;:::i;:::-;11117:70;;11210:60;11263:6;11210:60;:::i;:::-;11200:70;;11056:224;11043:1;11040;11036:9;11031:14;;10996:284;;;11000:14;11296:3;11289:10;;10697:608;;;10573:732;;;;:::o;11311:109::-;11392:21;11407:5;11392:21;:::i;:::-;11387:3;11380:34;11311:109;;:::o;11426:360::-;11512:3;11540:38;11572:5;11540:38;:::i;:::-;11594:70;11657:6;11652:3;11594:70;:::i;:::-;11587:77;;11673:52;11718:6;11713:3;11706:4;11699:5;11695:16;11673:52;:::i;:::-;11750:29;11772:6;11750:29;:::i;:::-;11745:3;11741:39;11734:46;;11516:270;11426:360;;;;:::o;11792:364::-;11880:3;11908:39;11941:5;11908:39;:::i;:::-;11963:71;12027:6;12022:3;11963:71;:::i;:::-;11956:78;;12043:52;12088:6;12083:3;12076:4;12069:5;12065:16;12043:52;:::i;:::-;12120:29;12142:6;12120:29;:::i;:::-;12115:3;12111:39;12104:46;;11884:272;11792:364;;;;:::o;12162:377::-;12268:3;12296:39;12329:5;12296:39;:::i;:::-;12351:89;12433:6;12428:3;12351:89;:::i;:::-;12344:96;;12449:52;12494:6;12489:3;12482:4;12475:5;12471:16;12449:52;:::i;:::-;12526:6;12521:3;12517:16;12510:23;;12272:267;12162:377;;;;:::o;12545:365::-;12687:3;12708:66;12772:1;12767:3;12708:66;:::i;:::-;12701:73;;12783:93;12872:3;12783:93;:::i;:::-;12901:2;12896:3;12892:12;12885:19;;12545:365;;;:::o;12916:::-;13058:3;13079:66;13143:1;13138:3;13079:66;:::i;:::-;13072:73;;13154:93;13243:3;13154:93;:::i;:::-;13272:2;13267:3;13263:12;13256:19;;12916:365;;;:::o;13287:::-;13429:3;13450:66;13514:1;13509:3;13450:66;:::i;:::-;13443:73;;13525:93;13614:3;13525:93;:::i;:::-;13643:2;13638:3;13634:12;13627:19;;13287:365;;;:::o;13658:366::-;13800:3;13821:67;13885:2;13880:3;13821:67;:::i;:::-;13814:74;;13897:93;13986:3;13897:93;:::i;:::-;14015:2;14010:3;14006:12;13999:19;;13658:366;;;:::o;14030:::-;14172:3;14193:67;14257:2;14252:3;14193:67;:::i;:::-;14186:74;;14269:93;14358:3;14269:93;:::i;:::-;14387:2;14382:3;14378:12;14371:19;;14030:366;;;:::o;14402:365::-;14544:3;14565:66;14629:1;14624:3;14565:66;:::i;:::-;14558:73;;14640:93;14729:3;14640:93;:::i;:::-;14758:2;14753:3;14749:12;14742:19;;14402:365;;;:::o;14773:::-;14915:3;14936:66;15000:1;14995:3;14936:66;:::i;:::-;14929:73;;15011:93;15100:3;15011:93;:::i;:::-;15129:2;15124:3;15120:12;15113:19;;14773:365;;;:::o;15144:::-;15286:3;15307:66;15371:1;15366:3;15307:66;:::i;:::-;15300:73;;15382:93;15471:3;15382:93;:::i;:::-;15500:2;15495:3;15491:12;15484:19;;15144:365;;;:::o;15515:::-;15657:3;15678:66;15742:1;15737:3;15678:66;:::i;:::-;15671:73;;15753:93;15842:3;15753:93;:::i;:::-;15871:2;15866:3;15862:12;15855:19;;15515:365;;;:::o;15886:::-;16028:3;16049:66;16113:1;16108:3;16049:66;:::i;:::-;16042:73;;16124:93;16213:3;16124:93;:::i;:::-;16242:2;16237:3;16233:12;16226:19;;15886:365;;;:::o;16257:366::-;16399:3;16420:67;16484:2;16479:3;16420:67;:::i;:::-;16413:74;;16496:93;16585:3;16496:93;:::i;:::-;16614:2;16609:3;16605:12;16598:19;;16257:366;;;:::o;16629:::-;16771:3;16792:67;16856:2;16851:3;16792:67;:::i;:::-;16785:74;;16868:93;16957:3;16868:93;:::i;:::-;16986:2;16981:3;16977:12;16970:19;;16629:366;;;:::o;17001:365::-;17143:3;17164:66;17228:1;17223:3;17164:66;:::i;:::-;17157:73;;17239:93;17328:3;17239:93;:::i;:::-;17357:2;17352:3;17348:12;17341:19;;17001:365;;;:::o;17372:::-;17514:3;17535:66;17599:1;17594:3;17535:66;:::i;:::-;17528:73;;17610:93;17699:3;17610:93;:::i;:::-;17728:2;17723:3;17719:12;17712:19;;17372:365;;;:::o;17743:::-;17885:3;17906:66;17970:1;17965:3;17906:66;:::i;:::-;17899:73;;17981:93;18070:3;17981:93;:::i;:::-;18099:2;18094:3;18090:12;18083:19;;17743:365;;;:::o;18114:::-;18256:3;18277:66;18341:1;18336:3;18277:66;:::i;:::-;18270:73;;18352:93;18441:3;18352:93;:::i;:::-;18470:2;18465:3;18461:12;18454:19;;18114:365;;;:::o;18485:366::-;18627:3;18648:67;18712:2;18707:3;18648:67;:::i;:::-;18641:74;;18724:93;18813:3;18724:93;:::i;:::-;18842:2;18837:3;18833:12;18826:19;;18485:366;;;:::o;18857:::-;18999:3;19020:67;19084:2;19079:3;19020:67;:::i;:::-;19013:74;;19096:93;19185:3;19096:93;:::i;:::-;19214:2;19209:3;19205:12;19198:19;;18857:366;;;:::o;19229:365::-;19371:3;19392:66;19456:1;19451:3;19392:66;:::i;:::-;19385:73;;19467:93;19556:3;19467:93;:::i;:::-;19585:2;19580:3;19576:12;19569:19;;19229:365;;;:::o;19600:366::-;19742:3;19763:67;19827:2;19822:3;19763:67;:::i;:::-;19756:74;;19839:93;19928:3;19839:93;:::i;:::-;19957:2;19952:3;19948:12;19941:19;;19600:366;;;:::o;19972:365::-;20114:3;20135:66;20199:1;20194:3;20135:66;:::i;:::-;20128:73;;20210:93;20299:3;20210:93;:::i;:::-;20328:2;20323:3;20319:12;20312:19;;19972:365;;;:::o;20343:::-;20485:3;20506:66;20570:1;20565:3;20506:66;:::i;:::-;20499:73;;20581:93;20670:3;20581:93;:::i;:::-;20699:2;20694:3;20690:12;20683:19;;20343:365;;;:::o;20714:::-;20856:3;20877:66;20941:1;20936:3;20877:66;:::i;:::-;20870:73;;20952:93;21041:3;20952:93;:::i;:::-;21070:2;21065:3;21061:12;21054:19;;20714:365;;;:::o;21085:366::-;21227:3;21248:67;21312:2;21307:3;21248:67;:::i;:::-;21241:74;;21324:93;21413:3;21324:93;:::i;:::-;21442:2;21437:3;21433:12;21426:19;;21085:366;;;:::o;21457:::-;21599:3;21620:67;21684:2;21679:3;21620:67;:::i;:::-;21613:74;;21696:93;21785:3;21696:93;:::i;:::-;21814:2;21809:3;21805:12;21798:19;;21457:366;;;:::o;21829:365::-;21971:3;21992:66;22056:1;22051:3;21992:66;:::i;:::-;21985:73;;22067:93;22156:3;22067:93;:::i;:::-;22185:2;22180:3;22176:12;22169:19;;21829:365;;;:::o;22200:::-;22342:3;22363:66;22427:1;22422:3;22363:66;:::i;:::-;22356:73;;22438:93;22527:3;22438:93;:::i;:::-;22556:2;22551:3;22547:12;22540:19;;22200:365;;;:::o;22571:::-;22713:3;22734:66;22798:1;22793:3;22734:66;:::i;:::-;22727:73;;22809:93;22898:3;22809:93;:::i;:::-;22927:2;22922:3;22918:12;22911:19;;22571:365;;;:::o;22942:108::-;23019:24;23037:5;23019:24;:::i;:::-;23014:3;23007:37;22942:108;;:::o;23056:118::-;23143:24;23161:5;23143:24;:::i;:::-;23138:3;23131:37;23056:118;;:::o;23180:435::-;23360:3;23382:95;23473:3;23464:6;23382:95;:::i;:::-;23375:102;;23494:95;23585:3;23576:6;23494:95;:::i;:::-;23487:102;;23606:3;23599:10;;23180:435;;;;;:::o;23621:222::-;23714:4;23752:2;23741:9;23737:18;23729:26;;23765:71;23833:1;23822:9;23818:17;23809:6;23765:71;:::i;:::-;23621:222;;;;:::o;23849:640::-;24044:4;24082:3;24071:9;24067:19;24059:27;;24096:71;24164:1;24153:9;24149:17;24140:6;24096:71;:::i;:::-;24177:72;24245:2;24234:9;24230:18;24221:6;24177:72;:::i;:::-;24259;24327:2;24316:9;24312:18;24303:6;24259:72;:::i;:::-;24378:9;24372:4;24368:20;24363:2;24352:9;24348:18;24341:48;24406:76;24477:4;24468:6;24406:76;:::i;:::-;24398:84;;23849:640;;;;;;;:::o;24495:332::-;24616:4;24654:2;24643:9;24639:18;24631:26;;24667:71;24735:1;24724:9;24720:17;24711:6;24667:71;:::i;:::-;24748:72;24816:2;24805:9;24801:18;24792:6;24748:72;:::i;:::-;24495:332;;;;;:::o;24833:373::-;24976:4;25014:2;25003:9;24999:18;24991:26;;25063:9;25057:4;25053:20;25049:1;25038:9;25034:17;25027:47;25091:108;25194:4;25185:6;25091:108;:::i;:::-;25083:116;;24833:373;;;;:::o;25212:210::-;25299:4;25337:2;25326:9;25322:18;25314:26;;25350:65;25412:1;25401:9;25397:17;25388:6;25350:65;:::i;:::-;25212:210;;;;:::o;25428:313::-;25541:4;25579:2;25568:9;25564:18;25556:26;;25628:9;25622:4;25618:20;25614:1;25603:9;25599:17;25592:47;25656:78;25729:4;25720:6;25656:78;:::i;:::-;25648:86;;25428:313;;;;:::o;25747:419::-;25913:4;25951:2;25940:9;25936:18;25928:26;;26000:9;25994:4;25990:20;25986:1;25975:9;25971:17;25964:47;26028:131;26154:4;26028:131;:::i;:::-;26020:139;;25747:419;;;:::o;26172:::-;26338:4;26376:2;26365:9;26361:18;26353:26;;26425:9;26419:4;26415:20;26411:1;26400:9;26396:17;26389:47;26453:131;26579:4;26453:131;:::i;:::-;26445:139;;26172:419;;;:::o;26597:::-;26763:4;26801:2;26790:9;26786:18;26778:26;;26850:9;26844:4;26840:20;26836:1;26825:9;26821:17;26814:47;26878:131;27004:4;26878:131;:::i;:::-;26870:139;;26597:419;;;:::o;27022:::-;27188:4;27226:2;27215:9;27211:18;27203:26;;27275:9;27269:4;27265:20;27261:1;27250:9;27246:17;27239:47;27303:131;27429:4;27303:131;:::i;:::-;27295:139;;27022:419;;;:::o;27447:::-;27613:4;27651:2;27640:9;27636:18;27628:26;;27700:9;27694:4;27690:20;27686:1;27675:9;27671:17;27664:47;27728:131;27854:4;27728:131;:::i;:::-;27720:139;;27447:419;;;:::o;27872:::-;28038:4;28076:2;28065:9;28061:18;28053:26;;28125:9;28119:4;28115:20;28111:1;28100:9;28096:17;28089:47;28153:131;28279:4;28153:131;:::i;:::-;28145:139;;27872:419;;;:::o;28297:::-;28463:4;28501:2;28490:9;28486:18;28478:26;;28550:9;28544:4;28540:20;28536:1;28525:9;28521:17;28514:47;28578:131;28704:4;28578:131;:::i;:::-;28570:139;;28297:419;;;:::o;28722:::-;28888:4;28926:2;28915:9;28911:18;28903:26;;28975:9;28969:4;28965:20;28961:1;28950:9;28946:17;28939:47;29003:131;29129:4;29003:131;:::i;:::-;28995:139;;28722:419;;;:::o;29147:::-;29313:4;29351:2;29340:9;29336:18;29328:26;;29400:9;29394:4;29390:20;29386:1;29375:9;29371:17;29364:47;29428:131;29554:4;29428:131;:::i;:::-;29420:139;;29147:419;;;:::o;29572:::-;29738:4;29776:2;29765:9;29761:18;29753:26;;29825:9;29819:4;29815:20;29811:1;29800:9;29796:17;29789:47;29853:131;29979:4;29853:131;:::i;:::-;29845:139;;29572:419;;;:::o;29997:::-;30163:4;30201:2;30190:9;30186:18;30178:26;;30250:9;30244:4;30240:20;30236:1;30225:9;30221:17;30214:47;30278:131;30404:4;30278:131;:::i;:::-;30270:139;;29997:419;;;:::o;30422:::-;30588:4;30626:2;30615:9;30611:18;30603:26;;30675:9;30669:4;30665:20;30661:1;30650:9;30646:17;30639:47;30703:131;30829:4;30703:131;:::i;:::-;30695:139;;30422:419;;;:::o;30847:::-;31013:4;31051:2;31040:9;31036:18;31028:26;;31100:9;31094:4;31090:20;31086:1;31075:9;31071:17;31064:47;31128:131;31254:4;31128:131;:::i;:::-;31120:139;;30847:419;;;:::o;31272:::-;31438:4;31476:2;31465:9;31461:18;31453:26;;31525:9;31519:4;31515:20;31511:1;31500:9;31496:17;31489:47;31553:131;31679:4;31553:131;:::i;:::-;31545:139;;31272:419;;;:::o;31697:::-;31863:4;31901:2;31890:9;31886:18;31878:26;;31950:9;31944:4;31940:20;31936:1;31925:9;31921:17;31914:47;31978:131;32104:4;31978:131;:::i;:::-;31970:139;;31697:419;;;:::o;32122:::-;32288:4;32326:2;32315:9;32311:18;32303:26;;32375:9;32369:4;32365:20;32361:1;32350:9;32346:17;32339:47;32403:131;32529:4;32403:131;:::i;:::-;32395:139;;32122:419;;;:::o;32547:::-;32713:4;32751:2;32740:9;32736:18;32728:26;;32800:9;32794:4;32790:20;32786:1;32775:9;32771:17;32764:47;32828:131;32954:4;32828:131;:::i;:::-;32820:139;;32547:419;;;:::o;32972:::-;33138:4;33176:2;33165:9;33161:18;33153:26;;33225:9;33219:4;33215:20;33211:1;33200:9;33196:17;33189:47;33253:131;33379:4;33253:131;:::i;:::-;33245:139;;32972:419;;;:::o;33397:::-;33563:4;33601:2;33590:9;33586:18;33578:26;;33650:9;33644:4;33640:20;33636:1;33625:9;33621:17;33614:47;33678:131;33804:4;33678:131;:::i;:::-;33670:139;;33397:419;;;:::o;33822:::-;33988:4;34026:2;34015:9;34011:18;34003:26;;34075:9;34069:4;34065:20;34061:1;34050:9;34046:17;34039:47;34103:131;34229:4;34103:131;:::i;:::-;34095:139;;33822:419;;;:::o;34247:::-;34413:4;34451:2;34440:9;34436:18;34428:26;;34500:9;34494:4;34490:20;34486:1;34475:9;34471:17;34464:47;34528:131;34654:4;34528:131;:::i;:::-;34520:139;;34247:419;;;:::o;34672:::-;34838:4;34876:2;34865:9;34861:18;34853:26;;34925:9;34919:4;34915:20;34911:1;34900:9;34896:17;34889:47;34953:131;35079:4;34953:131;:::i;:::-;34945:139;;34672:419;;;:::o;35097:::-;35263:4;35301:2;35290:9;35286:18;35278:26;;35350:9;35344:4;35340:20;35336:1;35325:9;35321:17;35314:47;35378:131;35504:4;35378:131;:::i;:::-;35370:139;;35097:419;;;:::o;35522:::-;35688:4;35726:2;35715:9;35711:18;35703:26;;35775:9;35769:4;35765:20;35761:1;35750:9;35746:17;35739:47;35803:131;35929:4;35803:131;:::i;:::-;35795:139;;35522:419;;;:::o;35947:::-;36113:4;36151:2;36140:9;36136:18;36128:26;;36200:9;36194:4;36190:20;36186:1;36175:9;36171:17;36164:47;36228:131;36354:4;36228:131;:::i;:::-;36220:139;;35947:419;;;:::o;36372:::-;36538:4;36576:2;36565:9;36561:18;36553:26;;36625:9;36619:4;36615:20;36611:1;36600:9;36596:17;36589:47;36653:131;36779:4;36653:131;:::i;:::-;36645:139;;36372:419;;;:::o;36797:::-;36963:4;37001:2;36990:9;36986:18;36978:26;;37050:9;37044:4;37040:20;37036:1;37025:9;37021:17;37014:47;37078:131;37204:4;37078:131;:::i;:::-;37070:139;;36797:419;;;:::o;37222:::-;37388:4;37426:2;37415:9;37411:18;37403:26;;37475:9;37469:4;37465:20;37461:1;37450:9;37446:17;37439:47;37503:131;37629:4;37503:131;:::i;:::-;37495:139;;37222:419;;;:::o;37647:222::-;37740:4;37778:2;37767:9;37763:18;37755:26;;37791:71;37859:1;37848:9;37844:17;37835:6;37791:71;:::i;:::-;37647:222;;;;:::o;37875:129::-;37909:6;37936:20;;:::i;:::-;37926:30;;37965:33;37993:4;37985:6;37965:33;:::i;:::-;37875:129;;;:::o;38010:75::-;38043:6;38076:2;38070:9;38060:19;;38010:75;:::o;38091:311::-;38168:4;38258:18;38250:6;38247:30;38244:56;;;38280:18;;:::i;:::-;38244:56;38330:4;38322:6;38318:17;38310:25;;38390:4;38384;38380:15;38372:23;;38091:311;;;:::o;38408:307::-;38469:4;38559:18;38551:6;38548:30;38545:56;;;38581:18;;:::i;:::-;38545:56;38619:29;38641:6;38619:29;:::i;:::-;38611:37;;38703:4;38697;38693:15;38685:23;;38408:307;;;:::o;38721:308::-;38783:4;38873:18;38865:6;38862:30;38859:56;;;38895:18;;:::i;:::-;38859:56;38933:29;38955:6;38933:29;:::i;:::-;38925:37;;39017:4;39011;39007:15;38999:23;;38721:308;;;:::o;39035:132::-;39102:4;39125:3;39117:11;;39155:4;39150:3;39146:14;39138:22;;39035:132;;;:::o;39173:114::-;39240:6;39274:5;39268:12;39258:22;;39173:114;;;:::o;39293:98::-;39344:6;39378:5;39372:12;39362:22;;39293:98;;;:::o;39397:99::-;39449:6;39483:5;39477:12;39467:22;;39397:99;;;:::o;39502:113::-;39572:4;39604;39599:3;39595:14;39587:22;;39502:113;;;:::o;39621:184::-;39720:11;39754:6;39749:3;39742:19;39794:4;39789:3;39785:14;39770:29;;39621:184;;;;:::o;39811:168::-;39894:11;39928:6;39923:3;39916:19;39968:4;39963:3;39959:14;39944:29;;39811:168;;;;:::o;39985:169::-;40069:11;40103:6;40098:3;40091:19;40143:4;40138:3;40134:14;40119:29;;39985:169;;;;:::o;40160:148::-;40262:11;40299:3;40284:18;;40160:148;;;;:::o;40314:305::-;40354:3;40373:20;40391:1;40373:20;:::i;:::-;40368:25;;40407:20;40425:1;40407:20;:::i;:::-;40402:25;;40561:1;40493:66;40489:74;40486:1;40483:81;40480:107;;;40567:18;;:::i;:::-;40480:107;40611:1;40608;40604:9;40597:16;;40314:305;;;;:::o;40625:185::-;40665:1;40682:20;40700:1;40682:20;:::i;:::-;40677:25;;40716:20;40734:1;40716:20;:::i;:::-;40711:25;;40755:1;40745:35;;40760:18;;:::i;:::-;40745:35;40802:1;40799;40795:9;40790:14;;40625:185;;;;:::o;40816:348::-;40856:7;40879:20;40897:1;40879:20;:::i;:::-;40874:25;;40913:20;40931:1;40913:20;:::i;:::-;40908:25;;41101:1;41033:66;41029:74;41026:1;41023:81;41018:1;41011:9;41004:17;41000:105;40997:131;;;41108:18;;:::i;:::-;40997:131;41156:1;41153;41149:9;41138:20;;40816:348;;;;:::o;41170:191::-;41210:4;41230:20;41248:1;41230:20;:::i;:::-;41225:25;;41264:20;41282:1;41264:20;:::i;:::-;41259:25;;41303:1;41300;41297:8;41294:34;;;41308:18;;:::i;:::-;41294:34;41353:1;41350;41346:9;41338:17;;41170:191;;;;:::o;41367:96::-;41404:7;41433:24;41451:5;41433:24;:::i;:::-;41422:35;;41367:96;;;:::o;41469:90::-;41503:7;41546:5;41539:13;41532:21;41521:32;;41469:90;;;:::o;41565:149::-;41601:7;41641:66;41634:5;41630:78;41619:89;;41565:149;;;:::o;41720:118::-;41757:7;41797:34;41790:5;41786:46;41775:57;;41720:118;;;:::o;41844:126::-;41881:7;41921:42;41914:5;41910:54;41899:65;;41844:126;;;:::o;41976:77::-;42013:7;42042:5;42031:16;;41976:77;;;:::o;42059:154::-;42143:6;42138:3;42133;42120:30;42205:1;42196:6;42191:3;42187:16;42180:27;42059:154;;;:::o;42219:307::-;42287:1;42297:113;42311:6;42308:1;42305:13;42297:113;;;42396:1;42391:3;42387:11;42381:18;42377:1;42372:3;42368:11;42361:39;42333:2;42330:1;42326:10;42321:15;;42297:113;;;42428:6;42425:1;42422:13;42419:101;;;42508:1;42499:6;42494:3;42490:16;42483:27;42419:101;42268:258;42219:307;;;:::o;42532:320::-;42576:6;42613:1;42607:4;42603:12;42593:22;;42660:1;42654:4;42650:12;42681:18;42671:81;;42737:4;42729:6;42725:17;42715:27;;42671:81;42799:2;42791:6;42788:14;42768:18;42765:38;42762:84;;;42818:18;;:::i;:::-;42762:84;42583:269;42532:320;;;:::o;42858:281::-;42941:27;42963:4;42941:27;:::i;:::-;42933:6;42929:40;43071:6;43059:10;43056:22;43035:18;43023:10;43020:34;43017:62;43014:88;;;43082:18;;:::i;:::-;43014:88;43122:10;43118:2;43111:22;42901:238;42858:281;;:::o;43145:201::-;43184:3;43207:24;43225:5;43207:24;:::i;:::-;43198:33;;43253:34;43246:5;43243:45;43240:71;;;43291:18;;:::i;:::-;43240:71;43338:1;43331:5;43327:13;43320:20;;43145:201;;;:::o;43352:233::-;43391:3;43414:24;43432:5;43414:24;:::i;:::-;43405:33;;43460:66;43453:5;43450:77;43447:103;;;43530:18;;:::i;:::-;43447:103;43577:1;43570:5;43566:13;43559:20;;43352:233;;;:::o;43591:176::-;43623:1;43640:20;43658:1;43640:20;:::i;:::-;43635:25;;43674:20;43692:1;43674:20;:::i;:::-;43669:25;;43713:1;43703:35;;43718:18;;:::i;:::-;43703:35;43759:1;43756;43752:9;43747:14;;43591:176;;;;:::o;43773:180::-;43821:77;43818:1;43811:88;43918:4;43915:1;43908:15;43942:4;43939:1;43932:15;43959:180;44007:77;44004:1;43997:88;44104:4;44101:1;44094:15;44128:4;44125:1;44118:15;44145:180;44193:77;44190:1;44183:88;44290:4;44287:1;44280:15;44314:4;44311:1;44304:15;44331:180;44379:77;44376:1;44369:88;44476:4;44473:1;44466:15;44500:4;44497:1;44490:15;44517:180;44565:77;44562:1;44555:88;44662:4;44659:1;44652:15;44686:4;44683:1;44676:15;44703:180;44751:77;44748:1;44741:88;44848:4;44845:1;44838:15;44872:4;44869:1;44862:15;44889:117;44998:1;44995;44988:12;45012:117;45121:1;45118;45111:12;45135:117;45244:1;45241;45234:12;45258:117;45367:1;45364;45357:12;45381:117;45490:1;45487;45480:12;45504:102;45545:6;45596:2;45592:7;45587:2;45580:5;45576:14;45572:28;45562:38;;45504:102;;;:::o;45612:153::-;45752:5;45748:1;45740:6;45736:14;45729:29;45612:153;:::o;45771:::-;45911:5;45907:1;45899:6;45895:14;45888:29;45771:153;:::o;45930:::-;46070:5;46066:1;46058:6;46054:14;46047:29;45930:153;:::o;46089:230::-;46229:34;46225:1;46217:6;46213:14;46206:58;46298:13;46293:2;46285:6;46281:15;46274:38;46089:230;:::o;46325:165::-;46465:17;46461:1;46453:6;46449:14;46442:41;46325:165;:::o;46496:153::-;46636:5;46632:1;46624:6;46620:14;46613:29;46496:153;:::o;46655:::-;46795:5;46791:1;46783:6;46779:14;46772:29;46655:153;:::o;46814:::-;46954:5;46950:1;46942:6;46938:14;46931:29;46814:153;:::o;46973:::-;47113:5;47109:1;47101:6;47097:14;47090:29;46973:153;:::o;47132:::-;47272:5;47268:1;47260:6;47256:14;47249:29;47132:153;:::o;47291:165::-;47431:17;47427:1;47419:6;47415:14;47408:41;47291:165;:::o;47462:177::-;47602:29;47598:1;47590:6;47586:14;47579:53;47462:177;:::o;47645:153::-;47785:5;47781:1;47773:6;47769:14;47762:29;47645:153;:::o;47804:::-;47944:5;47940:1;47932:6;47928:14;47921:29;47804:153;:::o;47963:::-;48103:5;48099:1;48091:6;48087:14;48080:29;47963:153;:::o;48122:::-;48262:5;48258:1;48250:6;48246:14;48239:29;48122:153;:::o;48281:172::-;48421:24;48417:1;48409:6;48405:14;48398:48;48281:172;:::o;48459:163::-;48599:15;48595:1;48587:6;48583:14;48576:39;48459:163;:::o;48628:153::-;48768:5;48764:1;48756:6;48752:14;48745:29;48628:153;:::o;48787:160::-;48927:12;48923:1;48915:6;48911:14;48904:36;48787:160;:::o;48953:153::-;49093:5;49089:1;49081:6;49077:14;49070:29;48953:153;:::o;49112:::-;49252:5;49248:1;49240:6;49236:14;49229:29;49112:153;:::o;49271:::-;49411:5;49407:1;49399:6;49395:14;49388:29;49271:153;:::o;49430:167::-;49570:19;49566:1;49558:6;49554:14;49547:43;49430:167;:::o;49603:231::-;49743:34;49739:1;49731:6;49727:14;49720:58;49812:14;49807:2;49799:6;49795:15;49788:39;49603:231;:::o;49840:153::-;49980:5;49976:1;49968:6;49964:14;49957:29;49840:153;:::o;49999:::-;50139:5;50135:1;50127:6;50123:14;50116:29;49999:153;:::o;50158:::-;50298:5;50294:1;50286:6;50282:14;50275:29;50158:153;:::o;50317:122::-;50390:24;50408:5;50390:24;:::i;:::-;50383:5;50380:35;50370:63;;50429:1;50426;50419:12;50370:63;50317:122;:::o;50445:116::-;50515:21;50530:5;50515:21;:::i;:::-;50508:5;50505:32;50495:60;;50551:1;50548;50541:12;50495:60;50445:116;:::o;50567:120::-;50639:23;50656:5;50639:23;:::i;:::-;50632:5;50629:34;50619:62;;50677:1;50674;50667:12;50619:62;50567:120;:::o;50693:122::-;50766:24;50784:5;50766:24;:::i;:::-;50759:5;50756:35;50746:63;;50805:1;50802;50795:12;50746:63;50693:122;:::o

Swarm Source

ipfs://63082718075b6bb68814b35053f0fbe3ff002ea0d43756237ae71e8846f41d94
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.