ETH Price: $3,358.33 (-2.88%)

Token

PixelatedGanjaGators (PGG)
 

Overview

Max Total Supply

4,236 PGG

Holders

719

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
5 PGG
0x635C604d73fb5169b71d7D0046410Ec6C062AA6B
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:
PixelatedGanjaGators

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 2022-05-27
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

   
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Strings.sol


// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;


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

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;



abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal 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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.0;


library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(oldAllowance >= value, "SafeERC20: decreased allowance below zero");
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
        }
    }

  
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            // Return data is optional
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}


// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
   
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;



abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;


/**
 * @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);


    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

 
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

   
    function approve(address to, uint256 tokenId) external;

  
    function getApproved(uint256 tokenId) external view returns (address operator);

   
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @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);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


/**
 * @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);

    /**
     * @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);
}

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @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);
}

// File: contracts/TwistedToonz.sol


// Creator: Chiru Labs

pragma solidity ^0.8.0;



contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable {
    using Address for address;
    using Strings for uint256;

    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
    }

    struct AddressData {
        uint128 balance;
        uint128 numberMinted;
    }

    uint256 internal currentIndex;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

    // 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;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

   
    function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) {
        require(index < balanceOf(owner), "ERC721A: owner index out of bounds");
        uint256 numMintedSoFar = totalSupply();
        uint256 tokenIdsIdx;
        address currOwnershipAddr;

        // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar.
        unchecked {
            for (uint256 i; i < numMintedSoFar; i++) {
                TokenOwnership memory ownership = _ownerships[i];
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    if (tokenIdsIdx == index) {
                        return i;
                    }
                    tokenIdsIdx++;
                }
            }
        }

        revert("ERC721A: unable to get token of owner by index");
    }

    /**
     * @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 ||
            interfaceId == type(IERC721Enumerable).interfaceId ||
            super.supportsInterface(interfaceId);
    }

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

    function _numberMinted(address owner) internal view returns (uint256) {
        require(owner != address(0), "ERC721A: number minted query for the zero address");
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        require(_exists(tokenId), "ERC721A: owner query for nonexistent token");

        unchecked {
            for (uint256 curr = tokenId; curr >= 0; curr--) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (ownership.addr != address(0)) {
                    return ownership;
                }
            }
        }

        revert("ERC721A: unable to determine the owner of token");
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return ownershipOf(tokenId).addr;
    }

    /**
     * @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), "ERC721Metadata: URI query for nonexistent token");

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

   
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        require(to != owner, "ERC721A: approval to current owner");

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

        _approve(to, tokenId, owner);
    }

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

        return _tokenApprovals[tokenId];
    }

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

        _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 {
        _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 override {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721A: transfer to non ERC721Receiver implementer"
        );
    }

  
    function _exists(uint256 tokenId) internal view returns (bool) {
        return tokenId < currentIndex;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, "");
    }

    
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

  
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = currentIndex;
        require(to != address(0), "ERC721A: mint to the zero address");
        require(quantity != 0, "ERC721A: quantity must be greater than 0");

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1
        // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint128(quantity);
            _addressData[to].numberMinted += uint128(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;

            for (uint256 i; i < quantity; i++) {
                emit Transfer(address(0), to, updatedIndex);
                if (safe) {
                    require(
                        _checkOnERC721Received(address(0), to, updatedIndex, _data),
                        "ERC721A: transfer to non ERC721Receiver implementer"
                    );
                }

                updatedIndex++;
            }

            currentIndex = updatedIndex;
        }

        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * 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
    ) private {
        TokenOwnership memory prevOwnership = ownershipOf(tokenId);

        bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr ||
            getApproved(tokenId) == _msgSender() ||
            isApprovedForAll(prevOwnership.addr, _msgSender()));

        require(isApprovedOrOwner, "ERC721A: transfer caller is not owner nor approved");

        require(prevOwnership.addr == from, "ERC721A: transfer from incorrect owner");
        require(to != address(0), "ERC721A: transfer to the zero address");

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            _ownerships[tokenId].addr = to;
            _ownerships[tokenId].startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            if (_ownerships[nextTokenId].addr == address(0)) {
                if (_exists(nextTokenId)) {
                    _ownerships[nextTokenId].addr = prevOwnership.addr;
                    _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

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

    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("ERC721A: transfer to non ERC721Receiver implementer");
                } else {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

  
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

  
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract PixelatedGanjaGators is ERC721A, Ownable, ReentrancyGuard {

  string public        baseURI = "";
  uint public          price             = 0.0042 ether;
  uint public          maxPerTx          = 5;
  uint public          maxPerWallet      = 5;
  uint public          totalFree         = 4200;
  uint public          maxSupply         = 6969;
  uint public          nextOwnerToExplicitlySet;
  bool public          mintEnabled;

  constructor() ERC721A("PixelatedGanjaGators", "PGG"){}

  function mint(uint256 amt) external payable
  {
    uint cost = price;
    if(totalSupply() + amt < totalFree + 1) {
      cost = 0;
    }
    require(msg.sender == tx.origin,"ID mismatch");
    require(msg.value == amt * cost,"Please send the exact amount.");
    require(totalSupply() + amt < maxSupply + 1,"No more blocksmiths");
    require(mintEnabled, "Minting is not live yet.");
    require(numberMinted(msg.sender) + amt <= maxPerWallet,"Too many per wallet!");
    require( amt < maxPerTx + 1, "Max per TX reached.");

    _safeMint(msg.sender, amt);
  }

  function ownerBatchMint(uint256 amt) external onlyOwner
  {
    require(totalSupply() + amt < maxSupply + 1,"too many!");

    _safeMint(msg.sender, amt);
  }

  function toggleMinting() external onlyOwner {
      mintEnabled = !mintEnabled;
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

  function setBaseURI(string calldata baseURI_) external onlyOwner {
    baseURI = baseURI_;
  }

  function setPrice(uint256 price_) external onlyOwner {
      price = price_;
  }

  function setTotalFree(uint256 totalFree_) external onlyOwner {
      totalFree = totalFree_;
  }

  function setMaxPerTx(uint256 maxPerTx_) external onlyOwner {
      maxPerTx = maxPerTx_;
  }

  function setMaxPerWallet(uint256 maxPerWallet_) external onlyOwner {
      maxPerWallet = maxPerWallet_;
  }

  function setmaxSupply(uint256 maxSupply_) external onlyOwner {
      maxSupply = maxSupply_;
  }

  function _baseURI() internal view virtual override returns (string memory) {
    return baseURI;
  }

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

  function setOwnersExplicit(uint256 quantity) external onlyOwner nonReentrant {
    _setOwnersExplicit(quantity);
  }

  function getOwnershipData(uint256 tokenId) external view returns (TokenOwnership memory)
  {
    return ownershipOf(tokenId);
  }


  /**
    * @dev Explicitly set `owners` to eliminate loops in future calls of ownerOf().
    */
  function _setOwnersExplicit(uint256 quantity) internal {
      require(quantity != 0, "quantity must be nonzero");
      require(currentIndex != 0, "no tokens minted yet");
      uint256 _nextOwnerToExplicitlySet = nextOwnerToExplicitlySet;
      require(_nextOwnerToExplicitlySet < currentIndex, "all ownerships have been set");

      // Index underflow is impossible.
      // Counter or index overflow is incredibly unrealistic.
      unchecked {
          uint256 endIndex = _nextOwnerToExplicitlySet + quantity - 1;

          // Set the end index to be the last token index
          if (endIndex + 1 > currentIndex) {
              endIndex = currentIndex - 1;
          }

          for (uint256 i = _nextOwnerToExplicitlySet; i <= endIndex; i++) {
              if (_ownerships[i].addr == address(0)) {
                  TokenOwnership memory ownership = ownershipOf(i);
                  _ownerships[i].addr = ownership.addr;
                  _ownerships[i].startTimestamp = ownership.startTimestamp;
              }
          }

          nextOwnerToExplicitlySet = endIndex + 1;
      }
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":[{"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":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nextOwnerToExplicitlySet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"ownerBatchMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerTx_","type":"uint256"}],"name":"setMaxPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxPerWallet_","type":"uint256"}],"name":"setMaxPerWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"setOwnersExplicit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"price_","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totalFree_","type":"uint256"}],"name":"setTotalFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"setmaxSupply","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":[],"name":"toggleMinting","outputs":[],"stateMutability":"nonpayable","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":[],"name":"totalFree","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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600990805190602001906200002b929190620001f7565b50660eebe0b40e8000600a556005600b556005600c55611068600d55611b39600e553480156200005a57600080fd5b506040518060400160405280601481526020017f506978656c6174656447616e6a614761746f72730000000000000000000000008152506040518060400160405280600381526020017f50474700000000000000000000000000000000000000000000000000000000008152508160019080519060200190620000df929190620001f7565b508060029080519060200190620000f8929190620001f7565b5050506200011b6200010f6200012960201b60201c565b6200013160201b60201c565b60016008819055506200030c565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020590620002a7565b90600052602060002090601f01602090048101928262000229576000855562000275565b82601f106200024457805160ff191683800117855562000275565b8280016001018555821562000275579182015b828111156200027457825182559160200191906001019062000257565b5b50905062000284919062000288565b5090565b5b80821115620002a357600081600090555060010162000289565b5090565b60006002820490506001821680620002c057607f821691505b60208210811415620002d757620002d6620002dd565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614fd3806200031c6000396000f3fe60806040526004361061023b5760003560e01c80637d55094d1161012e578063c6f6f216116100ab578063dc33e6811161006f578063dc33e6811461084e578063e268e4d31461088b578063e985e9c5146108b4578063f2fde38b146108f1578063f968adbe1461091a5761023b565b8063c6f6f21614610767578063c87b56dd14610790578063d1239730146107cd578063d5abeb01146107f8578063d7224ba0146108235761023b565b806395d89b41116100f257806395d89b41146106a3578063a035b1fe146106ce578063a0712d68146106f9578063a22cb46514610715578063b88d4fde1461073e5761023b565b80637d55094d146105d25780638da5cb5b146105e95780638db89f071461061457806391b7f5ed1461063d5780639231ab2a146106665761023b565b80633ccfd60b116101bc578063563aaf1111610180578063563aaf11146104ed5780636352211e146105165780636c0360eb1461055357806370a082311461057e578063715018a6146105bb5761023b565b80633ccfd60b1461041c57806342842e0e14610433578063453c23101461045c5780634f6ccce71461048757806355f804b3146104c45761023b565b8063228025e811610203578063228025e81461033957806323b872dd146103625780632d20fb601461038b5780632f745c59146103b4578063333e44e6146103f15761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061371a565b610945565b6040516102749190613e5c565b60405180910390f35b34801561028957600080fd5b50610292610a8f565b60405161029f9190613e77565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906137c1565b610b21565b6040516102dc9190613df5565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906136da565b610ba6565b005b34801561031a57600080fd5b50610323610cbf565b60405161033091906142b4565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906137c1565b610cc8565b005b34801561036e57600080fd5b50610389600480360381019061038491906135c4565b610d4e565b005b34801561039757600080fd5b506103b260048036038101906103ad91906137c1565b610d5e565b005b3480156103c057600080fd5b506103db60048036038101906103d691906136da565b610e3c565b6040516103e891906142b4565b60405180910390f35b3480156103fd57600080fd5b5061040661102e565b60405161041391906142b4565b60405180910390f35b34801561042857600080fd5b50610431611034565b005b34801561043f57600080fd5b5061045a600480360381019061045591906135c4565b6111b5565b005b34801561046857600080fd5b506104716111d5565b60405161047e91906142b4565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a991906137c1565b6111db565b6040516104bb91906142b4565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613774565b61122e565b005b3480156104f957600080fd5b50610514600480360381019061050f91906137c1565b6112c0565b005b34801561052257600080fd5b5061053d600480360381019061053891906137c1565b611346565b60405161054a9190613df5565b60405180910390f35b34801561055f57600080fd5b5061056861135c565b6040516105759190613e77565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190613557565b6113ea565b6040516105b291906142b4565b60405180910390f35b3480156105c757600080fd5b506105d06114d3565b005b3480156105de57600080fd5b506105e761155b565b005b3480156105f557600080fd5b506105fe611603565b60405161060b9190613df5565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906137c1565b61162d565b005b34801561064957600080fd5b50610664600480360381019061065f91906137c1565b611718565b005b34801561067257600080fd5b5061068d600480360381019061068891906137c1565b61179e565b60405161069a9190614299565b60405180910390f35b3480156106af57600080fd5b506106b86117b6565b6040516106c59190613e77565b60405180910390f35b3480156106da57600080fd5b506106e3611848565b6040516106f091906142b4565b60405180910390f35b610713600480360381019061070e91906137c1565b61184e565b005b34801561072157600080fd5b5061073c6004803603810190610737919061369a565b611aa4565b005b34801561074a57600080fd5b5061076560048036038101906107609190613617565b611c25565b005b34801561077357600080fd5b5061078e600480360381019061078991906137c1565b611c81565b005b34801561079c57600080fd5b506107b760048036038101906107b291906137c1565b611d07565b6040516107c49190613e77565b60405180910390f35b3480156107d957600080fd5b506107e2611daf565b6040516107ef9190613e5c565b60405180910390f35b34801561080457600080fd5b5061080d611dc2565b60405161081a91906142b4565b60405180910390f35b34801561082f57600080fd5b50610838611dc8565b60405161084591906142b4565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613557565b611dce565b60405161088291906142b4565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad91906137c1565b611de0565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613584565b611e66565b6040516108e89190613e5c565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613557565b611efa565b005b34801561092657600080fd5b5061092f611ff2565b60405161093c91906142b4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a7857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a885750610a8782611ff8565b5b9050919050565b606060018054610a9e90614552565b80601f0160208091040260200160405190810160405280929190818152602001828054610aca90614552565b8015610b175780601f10610aec57610100808354040283529160200191610b17565b820191906000526020600020905b815481529060010190602001808311610afa57829003601f168201915b5050505050905090565b6000610b2c82612062565b610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290614279565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bb182611346565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990614139565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4161206f565b73ffffffffffffffffffffffffffffffffffffffff161480610c705750610c6f81610c6a61206f565b611e66565b5b610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613ff9565b60405180910390fd5b610cba838383612077565b505050565b60008054905090565b610cd061206f565b73ffffffffffffffffffffffffffffffffffffffff16610cee611603565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614079565b60405180910390fd5b80600e8190555050565b610d59838383612129565b505050565b610d6661206f565b73ffffffffffffffffffffffffffffffffffffffff16610d84611603565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190614079565b60405180910390fd5b60026008541415610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790614239565b60405180910390fd5b6002600881905550610e3181612669565b600160088190555050565b6000610e47836113ea565b8210610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613e99565b60405180910390fd5b6000610e92610cbf565b905060008060005b83811015610fec576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f8c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fde5786841415610fd5578195505050505050611028565b83806001019450505b508080600101915050610e9a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f906141f9565b60405180910390fd5b92915050565b600d5481565b61103c61206f565b73ffffffffffffffffffffffffffffffffffffffff1661105a611603565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790614079565b60405180910390fd5b600260085414156110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90614239565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161112490613de0565b60006040518083038185875af1925050503d8060008114611161576040519150601f19603f3d011682016040523d82523d6000602084013e611166565b606091505b50509050806111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190614159565b60405180910390fd5b506001600881905550565b6111d083838360405180602001604052806000815250611c25565b505050565b600c5481565b60006111e5610cbf565b8210611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613f59565b60405180910390fd5b819050919050565b61123661206f565b73ffffffffffffffffffffffffffffffffffffffff16611254611603565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190614079565b60405180910390fd5b8181600991906112bb92919061334b565b505050565b6112c861206f565b73ffffffffffffffffffffffffffffffffffffffff166112e6611603565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390614079565b60405180910390fd5b80600d8190555050565b60006113518261289b565b600001519050919050565b6009805461136990614552565b80601f016020809104026020016040519081016040528092919081815260200182805461139590614552565b80156113e25780601f106113b7576101008083540402835291602001916113e2565b820191906000526020600020905b8154815290600101906020018083116113c557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290614039565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114db61206f565b73ffffffffffffffffffffffffffffffffffffffff166114f9611603565b73ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690614079565b60405180910390fd5b6115596000612a35565b565b61156361206f565b73ffffffffffffffffffffffffffffffffffffffff16611581611603565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90614079565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61163561206f565b73ffffffffffffffffffffffffffffffffffffffff16611653611603565b73ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090614079565b60405180910390fd5b6001600e546116b89190614373565b816116c1610cbf565b6116cb9190614373565b1061170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613fd9565b60405180910390fd5b6117153382612afb565b50565b61172061206f565b73ffffffffffffffffffffffffffffffffffffffff1661173e611603565b73ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90614079565b60405180910390fd5b80600a8190555050565b6117a66133d1565b6117af8261289b565b9050919050565b6060600280546117c590614552565b80601f01602080910402602001604051908101604052809291908181526020018280546117f190614552565b801561183e5780601f106118135761010080835404028352916020019161183e565b820191906000526020600020905b81548152906001019060200180831161182157829003601f168201915b5050505050905090565b600a5481565b6000600a5490506001600d546118649190614373565b8261186d610cbf565b6118779190614373565b101561188257600090505b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614219565b60405180910390fd5b80826118fc91906143fa565b341461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614119565b60405180910390fd5b6001600e5461194c9190614373565b82611955610cbf565b61195f9190614373565b1061199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613eb9565b60405180910390fd5b601060009054906101000a900460ff166119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590614099565b60405180910390fd5b600c54826119fb33611dce565b611a059190614373565b1115611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613f39565b60405180910390fd5b6001600b54611a559190614373565b8210611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d906141d9565b60405180910390fd5b611aa03383612afb565b5050565b611aac61206f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b11906140d9565b60405180910390fd5b8060066000611b2761206f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bd461206f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c199190613e5c565b60405180910390a35050565b611c30848484612129565b611c3c84848484612b19565b611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614179565b60405180910390fd5b50505050565b611c8961206f565b73ffffffffffffffffffffffffffffffffffffffff16611ca7611603565b73ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf490614079565b60405180910390fd5b80600b8190555050565b6060611d1282612062565b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906140b9565b60405180910390fd5b6000611d5b612cb0565b9050600081511415611d7c5760405180602001604052806000815250611da7565b80611d8684612d42565b604051602001611d97929190613db1565b6040516020818303038152906040525b915050919050565b601060009054906101000a900460ff1681565b600e5481565b600f5481565b6000611dd982612ea3565b9050919050565b611de861206f565b73ffffffffffffffffffffffffffffffffffffffff16611e06611603565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390614079565b60405180910390fd5b80600c8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f0261206f565b73ffffffffffffffffffffffffffffffffffffffff16611f20611603565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90614079565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd90613ed9565b60405180910390fd5b611fef81612a35565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121348261289b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661215b61206f565b73ffffffffffffffffffffffffffffffffffffffff1614806121b7575061218061206f565b73ffffffffffffffffffffffffffffffffffffffff1661219f84610b21565b73ffffffffffffffffffffffffffffffffffffffff16145b806121d357506121d282600001516121cd61206f565b611e66565b5b905080612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140f9565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e90614059565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90613f79565b60405180910390fd5b6123048585856001612f8c565b6123146000848460000151612077565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f95761255881612062565b156125f85782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126628585856001612f92565b5050505050565b60008114156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614019565b60405180910390fd5b6000805414156126f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e990613f19565b60405180910390fd5b6000600f549050600054811061273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490613fb9565b60405180910390fd5b6000600183830103905060005460018201111561275d5760016000540390505b60008290505b81811161288b57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287e5760006127e08261289b565b905080600001516003600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602001516003600084815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b8080600101915050612763565b5060018101600f81905550505050565b6128a36133d1565b6128ac82612062565b6128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e290613ef9565b60405180910390fd5b60008290505b600081106129f4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129e5578092505050612a30565b508080600190039150506128f1565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790614259565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b15828260405180602001604052806000815250612f98565b5050565b6000612b3a8473ffffffffffffffffffffffffffffffffffffffff16612faa565b15612ca3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b6361206f565b8786866040518563ffffffff1660e01b8152600401612b859493929190613e10565b602060405180830381600087803b158015612b9f57600080fd5b505af1925050508015612bd057506040513d601f19601f82011682018060405250810190612bcd9190613747565b60015b612c53573d8060008114612c00576040519150601f19603f3d011682016040523d82523d6000602084013e612c05565b606091505b50600081511415612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290614179565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ca8565b600190505b949350505050565b606060098054612cbf90614552565b80601f0160208091040260200160405190810160405280929190818152602001828054612ceb90614552565b8015612d385780601f10612d0d57610100808354040283529160200191612d38565b820191906000526020600020905b815481529060010190602001808311612d1b57829003601f168201915b5050505050905090565b60606000821415612d8a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e9e565b600082905060005b60008214612dbc578080612da5906145b5565b915050600a82612db591906143c9565b9150612d92565b60008167ffffffffffffffff811115612dd857612dd76146eb565b5b6040519080825280601f01601f191660200182016040528015612e0a5781602001600182028036833780820191505090505b5090505b60008514612e9757600182612e239190614454565b9150600a85612e3291906145fe565b6030612e3e9190614373565b60f81b818381518110612e5457612e536146bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e9091906143c9565b9450612e0e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0b90613f99565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b612fa58383836001612fcd565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303a90614199565b60405180910390fd5b6000841415613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906141b9565b60405180910390fd5b6130946000868387612f8c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561332e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613319576132d96000888488612b19565b613318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330f90614179565b60405180910390fd5b5b81806001019250508080600101915050613262565b5080600081905550506133446000868387612f92565b5050505050565b82805461335790614552565b90600052602060002090601f01602090048101928261337957600085556133c0565b82601f1061339257803560ff19168380011785556133c0565b828001600101855582156133c0579182015b828111156133bf5782358255916020019190600101906133a4565b5b5090506133cd919061340b565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561342457600081600090555060010161340c565b5090565b600061343b613436846142f4565b6142cf565b90508281526020810184848401111561345757613456614729565b5b613462848285614510565b509392505050565b60008135905061347981614f41565b92915050565b60008135905061348e81614f58565b92915050565b6000813590506134a381614f6f565b92915050565b6000815190506134b881614f6f565b92915050565b600082601f8301126134d3576134d261471f565b5b81356134e3848260208601613428565b91505092915050565b60008083601f8401126135025761350161471f565b5b8235905067ffffffffffffffff81111561351f5761351e61471a565b5b60208301915083600182028301111561353b5761353a614724565b5b9250929050565b60008135905061355181614f86565b92915050565b60006020828403121561356d5761356c614733565b5b600061357b8482850161346a565b91505092915050565b6000806040838503121561359b5761359a614733565b5b60006135a98582860161346a565b92505060206135ba8582860161346a565b9150509250929050565b6000806000606084860312156135dd576135dc614733565b5b60006135eb8682870161346a565b93505060206135fc8682870161346a565b925050604061360d86828701613542565b9150509250925092565b6000806000806080858703121561363157613630614733565b5b600061363f8782880161346a565b94505060206136508782880161346a565b935050604061366187828801613542565b925050606085013567ffffffffffffffff8111156136825761368161472e565b5b61368e878288016134be565b91505092959194509250565b600080604083850312156136b1576136b0614733565b5b60006136bf8582860161346a565b92505060206136d08582860161347f565b9150509250929050565b600080604083850312156136f1576136f0614733565b5b60006136ff8582860161346a565b925050602061371085828601613542565b9150509250929050565b6000602082840312156137305761372f614733565b5b600061373e84828501613494565b91505092915050565b60006020828403121561375d5761375c614733565b5b600061376b848285016134a9565b91505092915050565b6000806020838503121561378b5761378a614733565b5b600083013567ffffffffffffffff8111156137a9576137a861472e565b5b6137b5858286016134ec565b92509250509250929050565b6000602082840312156137d7576137d6614733565b5b60006137e584828501613542565b91505092915050565b6137f781614488565b82525050565b61380681614488565b82525050565b6138158161449a565b82525050565b600061382682614325565b613830818561433b565b935061384081856020860161451f565b61384981614738565b840191505092915050565b600061385f82614330565b6138698185614357565b935061387981856020860161451f565b61388281614738565b840191505092915050565b600061389882614330565b6138a28185614368565b93506138b281856020860161451f565b80840191505092915050565b60006138cb602283614357565b91506138d682614749565b604082019050919050565b60006138ee601383614357565b91506138f982614798565b602082019050919050565b6000613911602683614357565b915061391c826147c1565b604082019050919050565b6000613934602a83614357565b915061393f82614810565b604082019050919050565b6000613957601483614357565b91506139628261485f565b602082019050919050565b600061397a601483614357565b915061398582614888565b602082019050919050565b600061399d602383614357565b91506139a8826148b1565b604082019050919050565b60006139c0602583614357565b91506139cb82614900565b604082019050919050565b60006139e3603183614357565b91506139ee8261494f565b604082019050919050565b6000613a06601c83614357565b9150613a118261499e565b602082019050919050565b6000613a29600983614357565b9150613a34826149c7565b602082019050919050565b6000613a4c603983614357565b9150613a57826149f0565b604082019050919050565b6000613a6f601883614357565b9150613a7a82614a3f565b602082019050919050565b6000613a92602b83614357565b9150613a9d82614a68565b604082019050919050565b6000613ab5602683614357565b9150613ac082614ab7565b604082019050919050565b6000613ad8600583614368565b9150613ae382614b06565b600582019050919050565b6000613afb602083614357565b9150613b0682614b2f565b602082019050919050565b6000613b1e601883614357565b9150613b2982614b58565b602082019050919050565b6000613b41602f83614357565b9150613b4c82614b81565b604082019050919050565b6000613b64601a83614357565b9150613b6f82614bd0565b602082019050919050565b6000613b87603283614357565b9150613b9282614bf9565b604082019050919050565b6000613baa601d83614357565b9150613bb582614c48565b602082019050919050565b6000613bcd602283614357565b9150613bd882614c71565b604082019050919050565b6000613bf060008361434c565b9150613bfb82614cc0565b600082019050919050565b6000613c13601083614357565b9150613c1e82614cc3565b602082019050919050565b6000613c36603383614357565b9150613c4182614cec565b604082019050919050565b6000613c59602183614357565b9150613c6482614d3b565b604082019050919050565b6000613c7c602883614357565b9150613c8782614d8a565b604082019050919050565b6000613c9f601383614357565b9150613caa82614dd9565b602082019050919050565b6000613cc2602e83614357565b9150613ccd82614e02565b604082019050919050565b6000613ce5600b83614357565b9150613cf082614e51565b602082019050919050565b6000613d08601f83614357565b9150613d1382614e7a565b602082019050919050565b6000613d2b602f83614357565b9150613d3682614ea3565b604082019050919050565b6000613d4e602d83614357565b9150613d5982614ef2565b604082019050919050565b604082016000820151613d7a60008501826137ee565b506020820151613d8d6020850182613da2565b50505050565b613d9c816144f2565b82525050565b613dab816144fc565b82525050565b6000613dbd828561388d565b9150613dc9828461388d565b9150613dd482613acb565b91508190509392505050565b6000613deb82613be3565b9150819050919050565b6000602082019050613e0a60008301846137fd565b92915050565b6000608082019050613e2560008301876137fd565b613e3260208301866137fd565b613e3f6040830185613d93565b8181036060830152613e51818461381b565b905095945050505050565b6000602082019050613e71600083018461380c565b92915050565b60006020820190508181036000830152613e918184613854565b905092915050565b60006020820190508181036000830152613eb2816138be565b9050919050565b60006020820190508181036000830152613ed2816138e1565b9050919050565b60006020820190508181036000830152613ef281613904565b9050919050565b60006020820190508181036000830152613f1281613927565b9050919050565b60006020820190508181036000830152613f328161394a565b9050919050565b60006020820190508181036000830152613f528161396d565b9050919050565b60006020820190508181036000830152613f7281613990565b9050919050565b60006020820190508181036000830152613f92816139b3565b9050919050565b60006020820190508181036000830152613fb2816139d6565b9050919050565b60006020820190508181036000830152613fd2816139f9565b9050919050565b60006020820190508181036000830152613ff281613a1c565b9050919050565b6000602082019050818103600083015261401281613a3f565b9050919050565b6000602082019050818103600083015261403281613a62565b9050919050565b6000602082019050818103600083015261405281613a85565b9050919050565b6000602082019050818103600083015261407281613aa8565b9050919050565b6000602082019050818103600083015261409281613aee565b9050919050565b600060208201905081810360008301526140b281613b11565b9050919050565b600060208201905081810360008301526140d281613b34565b9050919050565b600060208201905081810360008301526140f281613b57565b9050919050565b6000602082019050818103600083015261411281613b7a565b9050919050565b6000602082019050818103600083015261413281613b9d565b9050919050565b6000602082019050818103600083015261415281613bc0565b9050919050565b6000602082019050818103600083015261417281613c06565b9050919050565b6000602082019050818103600083015261419281613c29565b9050919050565b600060208201905081810360008301526141b281613c4c565b9050919050565b600060208201905081810360008301526141d281613c6f565b9050919050565b600060208201905081810360008301526141f281613c92565b9050919050565b6000602082019050818103600083015261421281613cb5565b9050919050565b6000602082019050818103600083015261423281613cd8565b9050919050565b6000602082019050818103600083015261425281613cfb565b9050919050565b6000602082019050818103600083015261427281613d1e565b9050919050565b6000602082019050818103600083015261429281613d41565b9050919050565b60006040820190506142ae6000830184613d64565b92915050565b60006020820190506142c96000830184613d93565b92915050565b60006142d96142ea565b90506142e58282614584565b919050565b6000604051905090565b600067ffffffffffffffff82111561430f5761430e6146eb565b5b61431882614738565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061437e826144f2565b9150614389836144f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143be576143bd61462f565b5b828201905092915050565b60006143d4826144f2565b91506143df836144f2565b9250826143ef576143ee61465e565b5b828204905092915050565b6000614405826144f2565b9150614410836144f2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144495761444861462f565b5b828202905092915050565b600061445f826144f2565b915061446a836144f2565b92508282101561447d5761447c61462f565b5b828203905092915050565b6000614493826144d2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561453d578082015181840152602081019050614522565b8381111561454c576000848401525b50505050565b6000600282049050600182168061456a57607f821691505b6020821081141561457e5761457d61468d565b5b50919050565b61458d82614738565b810181811067ffffffffffffffff821117156145ac576145ab6146eb565b5b80604052505050565b60006145c0826144f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145f3576145f261462f565b5b600182019050919050565b6000614609826144f2565b9150614614836144f2565b9250826146245761462361465e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f726520626c6f636b736d6974687300000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f20746f6b656e73206d696e74656420796574000000000000000000000000600082015250565b7f546f6f206d616e79207065722077616c6c657421000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f616c6c206f776e657273686970732068617665206265656e2073657400000000600082015250565b7f746f6f206d616e79210000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4944206d69736d61746368000000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614f4a81614488565b8114614f5557600080fd5b50565b614f618161449a565b8114614f6c57600080fd5b50565b614f78816144a6565b8114614f8357600080fd5b50565b614f8f816144f2565b8114614f9a57600080fd5b5056fea2646970667358221220e5e81c4af96de7f34193b1f233d578970bd14b845c74a0081f7e5b69c9205fc864736f6c63430008070033

Deployed Bytecode

0x60806040526004361061023b5760003560e01c80637d55094d1161012e578063c6f6f216116100ab578063dc33e6811161006f578063dc33e6811461084e578063e268e4d31461088b578063e985e9c5146108b4578063f2fde38b146108f1578063f968adbe1461091a5761023b565b8063c6f6f21614610767578063c87b56dd14610790578063d1239730146107cd578063d5abeb01146107f8578063d7224ba0146108235761023b565b806395d89b41116100f257806395d89b41146106a3578063a035b1fe146106ce578063a0712d68146106f9578063a22cb46514610715578063b88d4fde1461073e5761023b565b80637d55094d146105d25780638da5cb5b146105e95780638db89f071461061457806391b7f5ed1461063d5780639231ab2a146106665761023b565b80633ccfd60b116101bc578063563aaf1111610180578063563aaf11146104ed5780636352211e146105165780636c0360eb1461055357806370a082311461057e578063715018a6146105bb5761023b565b80633ccfd60b1461041c57806342842e0e14610433578063453c23101461045c5780634f6ccce71461048757806355f804b3146104c45761023b565b8063228025e811610203578063228025e81461033957806323b872dd146103625780632d20fb601461038b5780632f745c59146103b4578063333e44e6146103f15761023b565b806301ffc9a71461024057806306fdde031461027d578063081812fc146102a8578063095ea7b3146102e557806318160ddd1461030e575b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061371a565b610945565b6040516102749190613e5c565b60405180910390f35b34801561028957600080fd5b50610292610a8f565b60405161029f9190613e77565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca91906137c1565b610b21565b6040516102dc9190613df5565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906136da565b610ba6565b005b34801561031a57600080fd5b50610323610cbf565b60405161033091906142b4565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906137c1565b610cc8565b005b34801561036e57600080fd5b50610389600480360381019061038491906135c4565b610d4e565b005b34801561039757600080fd5b506103b260048036038101906103ad91906137c1565b610d5e565b005b3480156103c057600080fd5b506103db60048036038101906103d691906136da565b610e3c565b6040516103e891906142b4565b60405180910390f35b3480156103fd57600080fd5b5061040661102e565b60405161041391906142b4565b60405180910390f35b34801561042857600080fd5b50610431611034565b005b34801561043f57600080fd5b5061045a600480360381019061045591906135c4565b6111b5565b005b34801561046857600080fd5b506104716111d5565b60405161047e91906142b4565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a991906137c1565b6111db565b6040516104bb91906142b4565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190613774565b61122e565b005b3480156104f957600080fd5b50610514600480360381019061050f91906137c1565b6112c0565b005b34801561052257600080fd5b5061053d600480360381019061053891906137c1565b611346565b60405161054a9190613df5565b60405180910390f35b34801561055f57600080fd5b5061056861135c565b6040516105759190613e77565b60405180910390f35b34801561058a57600080fd5b506105a560048036038101906105a09190613557565b6113ea565b6040516105b291906142b4565b60405180910390f35b3480156105c757600080fd5b506105d06114d3565b005b3480156105de57600080fd5b506105e761155b565b005b3480156105f557600080fd5b506105fe611603565b60405161060b9190613df5565b60405180910390f35b34801561062057600080fd5b5061063b600480360381019061063691906137c1565b61162d565b005b34801561064957600080fd5b50610664600480360381019061065f91906137c1565b611718565b005b34801561067257600080fd5b5061068d600480360381019061068891906137c1565b61179e565b60405161069a9190614299565b60405180910390f35b3480156106af57600080fd5b506106b86117b6565b6040516106c59190613e77565b60405180910390f35b3480156106da57600080fd5b506106e3611848565b6040516106f091906142b4565b60405180910390f35b610713600480360381019061070e91906137c1565b61184e565b005b34801561072157600080fd5b5061073c6004803603810190610737919061369a565b611aa4565b005b34801561074a57600080fd5b5061076560048036038101906107609190613617565b611c25565b005b34801561077357600080fd5b5061078e600480360381019061078991906137c1565b611c81565b005b34801561079c57600080fd5b506107b760048036038101906107b291906137c1565b611d07565b6040516107c49190613e77565b60405180910390f35b3480156107d957600080fd5b506107e2611daf565b6040516107ef9190613e5c565b60405180910390f35b34801561080457600080fd5b5061080d611dc2565b60405161081a91906142b4565b60405180910390f35b34801561082f57600080fd5b50610838611dc8565b60405161084591906142b4565b60405180910390f35b34801561085a57600080fd5b5061087560048036038101906108709190613557565b611dce565b60405161088291906142b4565b60405180910390f35b34801561089757600080fd5b506108b260048036038101906108ad91906137c1565b611de0565b005b3480156108c057600080fd5b506108db60048036038101906108d69190613584565b611e66565b6040516108e89190613e5c565b60405180910390f35b3480156108fd57600080fd5b5061091860048036038101906109139190613557565b611efa565b005b34801561092657600080fd5b5061092f611ff2565b60405161093c91906142b4565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610a1057507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a7857507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a885750610a8782611ff8565b5b9050919050565b606060018054610a9e90614552565b80601f0160208091040260200160405190810160405280929190818152602001828054610aca90614552565b8015610b175780601f10610aec57610100808354040283529160200191610b17565b820191906000526020600020905b815481529060010190602001808311610afa57829003601f168201915b5050505050905090565b6000610b2c82612062565b610b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6290614279565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bb182611346565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1990614139565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c4161206f565b73ffffffffffffffffffffffffffffffffffffffff161480610c705750610c6f81610c6a61206f565b611e66565b5b610caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca690613ff9565b60405180910390fd5b610cba838383612077565b505050565b60008054905090565b610cd061206f565b73ffffffffffffffffffffffffffffffffffffffff16610cee611603565b73ffffffffffffffffffffffffffffffffffffffff1614610d44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3b90614079565b60405180910390fd5b80600e8190555050565b610d59838383612129565b505050565b610d6661206f565b73ffffffffffffffffffffffffffffffffffffffff16610d84611603565b73ffffffffffffffffffffffffffffffffffffffff1614610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd190614079565b60405180910390fd5b60026008541415610e20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1790614239565b60405180910390fd5b6002600881905550610e3181612669565b600160088190555050565b6000610e47836113ea565b8210610e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7f90613e99565b60405180910390fd5b6000610e92610cbf565b905060008060005b83811015610fec576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f8c57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610fde5786841415610fd5578195505050505050611028565b83806001019450505b508080600101915050610e9a565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101f906141f9565b60405180910390fd5b92915050565b600d5481565b61103c61206f565b73ffffffffffffffffffffffffffffffffffffffff1661105a611603565b73ffffffffffffffffffffffffffffffffffffffff16146110b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a790614079565b60405180910390fd5b600260085414156110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed90614239565b60405180910390fd5b600260088190555060003373ffffffffffffffffffffffffffffffffffffffff164760405161112490613de0565b60006040518083038185875af1925050503d8060008114611161576040519150601f19603f3d011682016040523d82523d6000602084013e611166565b606091505b50509050806111aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a190614159565b60405180910390fd5b506001600881905550565b6111d083838360405180602001604052806000815250611c25565b505050565b600c5481565b60006111e5610cbf565b8210611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90613f59565b60405180910390fd5b819050919050565b61123661206f565b73ffffffffffffffffffffffffffffffffffffffff16611254611603565b73ffffffffffffffffffffffffffffffffffffffff16146112aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a190614079565b60405180910390fd5b8181600991906112bb92919061334b565b505050565b6112c861206f565b73ffffffffffffffffffffffffffffffffffffffff166112e6611603565b73ffffffffffffffffffffffffffffffffffffffff161461133c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133390614079565b60405180910390fd5b80600d8190555050565b60006113518261289b565b600001519050919050565b6009805461136990614552565b80601f016020809104026020016040519081016040528092919081815260200182805461139590614552565b80156113e25780601f106113b7576101008083540402835291602001916113e2565b820191906000526020600020905b8154815290600101906020018083116113c557829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561145b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145290614039565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b6114db61206f565b73ffffffffffffffffffffffffffffffffffffffff166114f9611603565b73ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690614079565b60405180910390fd5b6115596000612a35565b565b61156361206f565b73ffffffffffffffffffffffffffffffffffffffff16611581611603565b73ffffffffffffffffffffffffffffffffffffffff16146115d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ce90614079565b60405180910390fd5b601060009054906101000a900460ff1615601060006101000a81548160ff021916908315150217905550565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61163561206f565b73ffffffffffffffffffffffffffffffffffffffff16611653611603565b73ffffffffffffffffffffffffffffffffffffffff16146116a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a090614079565b60405180910390fd5b6001600e546116b89190614373565b816116c1610cbf565b6116cb9190614373565b1061170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290613fd9565b60405180910390fd5b6117153382612afb565b50565b61172061206f565b73ffffffffffffffffffffffffffffffffffffffff1661173e611603565b73ffffffffffffffffffffffffffffffffffffffff1614611794576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178b90614079565b60405180910390fd5b80600a8190555050565b6117a66133d1565b6117af8261289b565b9050919050565b6060600280546117c590614552565b80601f01602080910402602001604051908101604052809291908181526020018280546117f190614552565b801561183e5780601f106118135761010080835404028352916020019161183e565b820191906000526020600020905b81548152906001019060200180831161182157829003601f168201915b5050505050905090565b600a5481565b6000600a5490506001600d546118649190614373565b8261186d610cbf565b6118779190614373565b101561188257600090505b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e790614219565b60405180910390fd5b80826118fc91906143fa565b341461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614119565b60405180910390fd5b6001600e5461194c9190614373565b82611955610cbf565b61195f9190614373565b1061199f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199690613eb9565b60405180910390fd5b601060009054906101000a900460ff166119ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119e590614099565b60405180910390fd5b600c54826119fb33611dce565b611a059190614373565b1115611a46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3d90613f39565b60405180910390fd5b6001600b54611a559190614373565b8210611a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8d906141d9565b60405180910390fd5b611aa03383612afb565b5050565b611aac61206f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b11906140d9565b60405180910390fd5b8060066000611b2761206f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611bd461206f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c199190613e5c565b60405180910390a35050565b611c30848484612129565b611c3c84848484612b19565b611c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7290614179565b60405180910390fd5b50505050565b611c8961206f565b73ffffffffffffffffffffffffffffffffffffffff16611ca7611603565b73ffffffffffffffffffffffffffffffffffffffff1614611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf490614079565b60405180910390fd5b80600b8190555050565b6060611d1282612062565b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d48906140b9565b60405180910390fd5b6000611d5b612cb0565b9050600081511415611d7c5760405180602001604052806000815250611da7565b80611d8684612d42565b604051602001611d97929190613db1565b6040516020818303038152906040525b915050919050565b601060009054906101000a900460ff1681565b600e5481565b600f5481565b6000611dd982612ea3565b9050919050565b611de861206f565b73ffffffffffffffffffffffffffffffffffffffff16611e06611603565b73ffffffffffffffffffffffffffffffffffffffff1614611e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5390614079565b60405180910390fd5b80600c8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f0261206f565b73ffffffffffffffffffffffffffffffffffffffff16611f20611603565b73ffffffffffffffffffffffffffffffffffffffff1614611f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6d90614079565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fe6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdd90613ed9565b60405180910390fd5b611fef81612a35565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6000805482109050919050565b600033905090565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121348261289b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff1661215b61206f565b73ffffffffffffffffffffffffffffffffffffffff1614806121b7575061218061206f565b73ffffffffffffffffffffffffffffffffffffffff1661219f84610b21565b73ffffffffffffffffffffffffffffffffffffffff16145b806121d357506121d282600001516121cd61206f565b611e66565b5b905080612215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220c906140f9565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff1614612287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227e90614059565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156122f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ee90613f79565b60405180910390fd5b6123048585856001612f8c565b6123146000848460000151612077565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125f95761255881612062565b156125f85782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46126628585856001612f92565b5050505050565b60008114156126ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a490614019565b60405180910390fd5b6000805414156126f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e990613f19565b60405180910390fd5b6000600f549050600054811061273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490613fb9565b60405180910390fd5b6000600183830103905060005460018201111561275d5760016000540390505b60008290505b81811161288b57600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561287e5760006127e08261289b565b905080600001516003600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080602001516003600084815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550505b8080600101915050612763565b5060018101600f81905550505050565b6128a36133d1565b6128ac82612062565b6128eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e290613ef9565b60405180910390fd5b60008290505b600081106129f4576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146129e5578092505050612a30565b508080600190039150506128f1565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2790614259565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b15828260405180602001604052806000815250612f98565b5050565b6000612b3a8473ffffffffffffffffffffffffffffffffffffffff16612faa565b15612ca3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b6361206f565b8786866040518563ffffffff1660e01b8152600401612b859493929190613e10565b602060405180830381600087803b158015612b9f57600080fd5b505af1925050508015612bd057506040513d601f19601f82011682018060405250810190612bcd9190613747565b60015b612c53573d8060008114612c00576040519150601f19603f3d011682016040523d82523d6000602084013e612c05565b606091505b50600081511415612c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4290614179565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612ca8565b600190505b949350505050565b606060098054612cbf90614552565b80601f0160208091040260200160405190810160405280929190818152602001828054612ceb90614552565b8015612d385780601f10612d0d57610100808354040283529160200191612d38565b820191906000526020600020905b815481529060010190602001808311612d1b57829003601f168201915b5050505050905090565b60606000821415612d8a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612e9e565b600082905060005b60008214612dbc578080612da5906145b5565b915050600a82612db591906143c9565b9150612d92565b60008167ffffffffffffffff811115612dd857612dd76146eb565b5b6040519080825280601f01601f191660200182016040528015612e0a5781602001600182028036833780820191505090505b5090505b60008514612e9757600182612e239190614454565b9150600a85612e3291906145fe565b6030612e3e9190614373565b60f81b818381518110612e5457612e536146bc565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612e9091906143c9565b9450612e0e565b8093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0b90613f99565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160109054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b50505050565b50505050565b612fa58383836001612fcd565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415613043576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161303a90614199565b60405180910390fd5b6000841415613087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307e906141b9565b60405180910390fd5b6130946000868387612f8c565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b8581101561332e57818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48315613319576132d96000888488612b19565b613318576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161330f90614179565b60405180910390fd5b5b81806001019250508080600101915050613262565b5080600081905550506133446000868387612f92565b5050505050565b82805461335790614552565b90600052602060002090601f01602090048101928261337957600085556133c0565b82601f1061339257803560ff19168380011785556133c0565b828001600101855582156133c0579182015b828111156133bf5782358255916020019190600101906133a4565b5b5090506133cd919061340b565b5090565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b5b8082111561342457600081600090555060010161340c565b5090565b600061343b613436846142f4565b6142cf565b90508281526020810184848401111561345757613456614729565b5b613462848285614510565b509392505050565b60008135905061347981614f41565b92915050565b60008135905061348e81614f58565b92915050565b6000813590506134a381614f6f565b92915050565b6000815190506134b881614f6f565b92915050565b600082601f8301126134d3576134d261471f565b5b81356134e3848260208601613428565b91505092915050565b60008083601f8401126135025761350161471f565b5b8235905067ffffffffffffffff81111561351f5761351e61471a565b5b60208301915083600182028301111561353b5761353a614724565b5b9250929050565b60008135905061355181614f86565b92915050565b60006020828403121561356d5761356c614733565b5b600061357b8482850161346a565b91505092915050565b6000806040838503121561359b5761359a614733565b5b60006135a98582860161346a565b92505060206135ba8582860161346a565b9150509250929050565b6000806000606084860312156135dd576135dc614733565b5b60006135eb8682870161346a565b93505060206135fc8682870161346a565b925050604061360d86828701613542565b9150509250925092565b6000806000806080858703121561363157613630614733565b5b600061363f8782880161346a565b94505060206136508782880161346a565b935050604061366187828801613542565b925050606085013567ffffffffffffffff8111156136825761368161472e565b5b61368e878288016134be565b91505092959194509250565b600080604083850312156136b1576136b0614733565b5b60006136bf8582860161346a565b92505060206136d08582860161347f565b9150509250929050565b600080604083850312156136f1576136f0614733565b5b60006136ff8582860161346a565b925050602061371085828601613542565b9150509250929050565b6000602082840312156137305761372f614733565b5b600061373e84828501613494565b91505092915050565b60006020828403121561375d5761375c614733565b5b600061376b848285016134a9565b91505092915050565b6000806020838503121561378b5761378a614733565b5b600083013567ffffffffffffffff8111156137a9576137a861472e565b5b6137b5858286016134ec565b92509250509250929050565b6000602082840312156137d7576137d6614733565b5b60006137e584828501613542565b91505092915050565b6137f781614488565b82525050565b61380681614488565b82525050565b6138158161449a565b82525050565b600061382682614325565b613830818561433b565b935061384081856020860161451f565b61384981614738565b840191505092915050565b600061385f82614330565b6138698185614357565b935061387981856020860161451f565b61388281614738565b840191505092915050565b600061389882614330565b6138a28185614368565b93506138b281856020860161451f565b80840191505092915050565b60006138cb602283614357565b91506138d682614749565b604082019050919050565b60006138ee601383614357565b91506138f982614798565b602082019050919050565b6000613911602683614357565b915061391c826147c1565b604082019050919050565b6000613934602a83614357565b915061393f82614810565b604082019050919050565b6000613957601483614357565b91506139628261485f565b602082019050919050565b600061397a601483614357565b915061398582614888565b602082019050919050565b600061399d602383614357565b91506139a8826148b1565b604082019050919050565b60006139c0602583614357565b91506139cb82614900565b604082019050919050565b60006139e3603183614357565b91506139ee8261494f565b604082019050919050565b6000613a06601c83614357565b9150613a118261499e565b602082019050919050565b6000613a29600983614357565b9150613a34826149c7565b602082019050919050565b6000613a4c603983614357565b9150613a57826149f0565b604082019050919050565b6000613a6f601883614357565b9150613a7a82614a3f565b602082019050919050565b6000613a92602b83614357565b9150613a9d82614a68565b604082019050919050565b6000613ab5602683614357565b9150613ac082614ab7565b604082019050919050565b6000613ad8600583614368565b9150613ae382614b06565b600582019050919050565b6000613afb602083614357565b9150613b0682614b2f565b602082019050919050565b6000613b1e601883614357565b9150613b2982614b58565b602082019050919050565b6000613b41602f83614357565b9150613b4c82614b81565b604082019050919050565b6000613b64601a83614357565b9150613b6f82614bd0565b602082019050919050565b6000613b87603283614357565b9150613b9282614bf9565b604082019050919050565b6000613baa601d83614357565b9150613bb582614c48565b602082019050919050565b6000613bcd602283614357565b9150613bd882614c71565b604082019050919050565b6000613bf060008361434c565b9150613bfb82614cc0565b600082019050919050565b6000613c13601083614357565b9150613c1e82614cc3565b602082019050919050565b6000613c36603383614357565b9150613c4182614cec565b604082019050919050565b6000613c59602183614357565b9150613c6482614d3b565b604082019050919050565b6000613c7c602883614357565b9150613c8782614d8a565b604082019050919050565b6000613c9f601383614357565b9150613caa82614dd9565b602082019050919050565b6000613cc2602e83614357565b9150613ccd82614e02565b604082019050919050565b6000613ce5600b83614357565b9150613cf082614e51565b602082019050919050565b6000613d08601f83614357565b9150613d1382614e7a565b602082019050919050565b6000613d2b602f83614357565b9150613d3682614ea3565b604082019050919050565b6000613d4e602d83614357565b9150613d5982614ef2565b604082019050919050565b604082016000820151613d7a60008501826137ee565b506020820151613d8d6020850182613da2565b50505050565b613d9c816144f2565b82525050565b613dab816144fc565b82525050565b6000613dbd828561388d565b9150613dc9828461388d565b9150613dd482613acb565b91508190509392505050565b6000613deb82613be3565b9150819050919050565b6000602082019050613e0a60008301846137fd565b92915050565b6000608082019050613e2560008301876137fd565b613e3260208301866137fd565b613e3f6040830185613d93565b8181036060830152613e51818461381b565b905095945050505050565b6000602082019050613e71600083018461380c565b92915050565b60006020820190508181036000830152613e918184613854565b905092915050565b60006020820190508181036000830152613eb2816138be565b9050919050565b60006020820190508181036000830152613ed2816138e1565b9050919050565b60006020820190508181036000830152613ef281613904565b9050919050565b60006020820190508181036000830152613f1281613927565b9050919050565b60006020820190508181036000830152613f328161394a565b9050919050565b60006020820190508181036000830152613f528161396d565b9050919050565b60006020820190508181036000830152613f7281613990565b9050919050565b60006020820190508181036000830152613f92816139b3565b9050919050565b60006020820190508181036000830152613fb2816139d6565b9050919050565b60006020820190508181036000830152613fd2816139f9565b9050919050565b60006020820190508181036000830152613ff281613a1c565b9050919050565b6000602082019050818103600083015261401281613a3f565b9050919050565b6000602082019050818103600083015261403281613a62565b9050919050565b6000602082019050818103600083015261405281613a85565b9050919050565b6000602082019050818103600083015261407281613aa8565b9050919050565b6000602082019050818103600083015261409281613aee565b9050919050565b600060208201905081810360008301526140b281613b11565b9050919050565b600060208201905081810360008301526140d281613b34565b9050919050565b600060208201905081810360008301526140f281613b57565b9050919050565b6000602082019050818103600083015261411281613b7a565b9050919050565b6000602082019050818103600083015261413281613b9d565b9050919050565b6000602082019050818103600083015261415281613bc0565b9050919050565b6000602082019050818103600083015261417281613c06565b9050919050565b6000602082019050818103600083015261419281613c29565b9050919050565b600060208201905081810360008301526141b281613c4c565b9050919050565b600060208201905081810360008301526141d281613c6f565b9050919050565b600060208201905081810360008301526141f281613c92565b9050919050565b6000602082019050818103600083015261421281613cb5565b9050919050565b6000602082019050818103600083015261423281613cd8565b9050919050565b6000602082019050818103600083015261425281613cfb565b9050919050565b6000602082019050818103600083015261427281613d1e565b9050919050565b6000602082019050818103600083015261429281613d41565b9050919050565b60006040820190506142ae6000830184613d64565b92915050565b60006020820190506142c96000830184613d93565b92915050565b60006142d96142ea565b90506142e58282614584565b919050565b6000604051905090565b600067ffffffffffffffff82111561430f5761430e6146eb565b5b61431882614738565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061437e826144f2565b9150614389836144f2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143be576143bd61462f565b5b828201905092915050565b60006143d4826144f2565b91506143df836144f2565b9250826143ef576143ee61465e565b5b828204905092915050565b6000614405826144f2565b9150614410836144f2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156144495761444861462f565b5b828202905092915050565b600061445f826144f2565b915061446a836144f2565b92508282101561447d5761447c61462f565b5b828203905092915050565b6000614493826144d2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b8381101561453d578082015181840152602081019050614522565b8381111561454c576000848401525b50505050565b6000600282049050600182168061456a57607f821691505b6020821081141561457e5761457d61468d565b5b50919050565b61458d82614738565b810181811067ffffffffffffffff821117156145ac576145ab6146eb565b5b80604052505050565b60006145c0826144f2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145f3576145f261462f565b5b600182019050919050565b6000614609826144f2565b9150614614836144f2565b9250826146245761462361465e565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f206d6f726520626c6f636b736d6974687300000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b7f6e6f20746f6b656e73206d696e74656420796574000000000000000000000000600082015250565b7f546f6f206d616e79207065722077616c6c657421000000000000000000000000600082015250565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a206e756d626572206d696e74656420717565727920666f7260008201527f20746865207a65726f2061646472657373000000000000000000000000000000602082015250565b7f616c6c206f776e657273686970732068617665206265656e2073657400000000600082015250565b7f746f6f206d616e79210000000000000000000000000000000000000000000000600082015250565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b7f7175616e74697479206d757374206265206e6f6e7a65726f0000000000000000600082015250565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d696e74696e67206973206e6f74206c697665207965742e0000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f506c656173652073656e642074686520657861637420616d6f756e742e000000600082015250565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220545820726561636865642e00000000000000000000000000600082015250565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b7f4944206d69736d61746368000000000000000000000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b614f4a81614488565b8114614f5557600080fd5b50565b614f618161449a565b8114614f6c57600080fd5b50565b614f78816144a6565b8114614f8357600080fd5b50565b614f8f816144f2565b8114614f9a57600080fd5b5056fea2646970667358221220e5e81c4af96de7f34193b1f233d578970bd14b845c74a0081f7e5b69c9205fc864736f6c63430008070033

Deployed Bytecode Sourcemap

36052:3871:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25410:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27296:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28632:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28153:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23954:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38032:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29508:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38426:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24331:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36316:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38244:176;;;;;;;;;;;;;:::i;:::-;;29749:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36269:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24131:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37522:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37712:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27105:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36126:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25846:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7156:103;;;;;;;;;;;;;:::i;:::-;;37318:85;;;;;;;;;;;;;:::i;:::-;;6843:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37149:163;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37624:82;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38550:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27465:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36164:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36565:578;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28918:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30005:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37816:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27640:344;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36466:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36366:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36416;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37409:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37916:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29277:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7414:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36222:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25410:372;25512:4;25564:25;25549:40;;;:11;:40;;;;:105;;;;25621:33;25606:48;;;:11;:48;;;;25549:105;:172;;;;25686:35;25671:50;;;:11;:50;;;;25549:172;:225;;;;25738:36;25762:11;25738:23;:36::i;:::-;25549:225;25529:245;;25410:372;;;:::o;27296:100::-;27350:13;27383:5;27376:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27296:100;:::o;28632:214::-;28700:7;28728:16;28736:7;28728;:16::i;:::-;28720:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28814:15;:24;28830:7;28814:24;;;;;;;;;;;;;;;;;;;;;28807:31;;28632:214;;;:::o;28153:413::-;28226:13;28242:24;28258:7;28242:15;:24::i;:::-;28226:40;;28291:5;28285:11;;:2;:11;;;;28277:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28386:5;28370:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28395:37;28412:5;28419:12;:10;:12::i;:::-;28395:16;:37::i;:::-;28370:62;28348:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28530:28;28539:2;28543:7;28552:5;28530:8;:28::i;:::-;28215:351;28153:413;;:::o;23954:100::-;24007:7;24034:12;;24027:19;;23954:100;:::o;38032:98::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38114:10:::1;38102:9;:22;;;;38032:98:::0;:::o;29508:170::-;29642:28;29652:4;29658:2;29662:7;29642:9;:28::i;:::-;29508:170;;;:::o;38426:118::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3200:1:::1;3425:7;;:19;;3417:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3200:1;3558:7;:18;;;;38510:28:::2;38529:8;38510:18;:28::i;:::-;3156:1:::1;3737:7;:22;;;;38426:118:::0;:::o;24331:1007::-;24420:7;24456:16;24466:5;24456:9;:16::i;:::-;24448:5;:24;24440:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24522:22;24547:13;:11;:13::i;:::-;24522:38;;24571:19;24601:25;24790:9;24785:466;24805:14;24801:1;:18;24785:466;;;24845:31;24879:11;:14;24891:1;24879:14;;;;;;;;;;;24845:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24942:1;24916:28;;:9;:14;;;:28;;;24912:111;;24989:9;:14;;;24969:34;;24912:111;25066:5;25045:26;;:17;:26;;;25041:195;;;25115:5;25100:11;:20;25096:85;;;25156:1;25149:8;;;;;;;;;25096:85;25203:13;;;;;;;25041:195;24826:425;24821:3;;;;;;;24785:466;;;;25274:56;;;;;;;;;;:::i;:::-;;;;;;;;24331:1007;;;;;:::o;36316:45::-;;;;:::o;38244:176::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3200:1:::1;3425:7;;:19;;3417:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;3200:1;3558:7;:18;;;;38304:12:::2;38322:10;:15;;38345:21;38322:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38303:68;;;38386:7;38378:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;38296:124;3156:1:::1;3737:7;:22;;;;38244:176::o:0;29749:185::-;29887:39;29904:4;29910:2;29914:7;29887:39;;;;;;;;;;;;:16;:39::i;:::-;29749:185;;;:::o;36269:42::-;;;;:::o;24131:187::-;24198:7;24234:13;:11;:13::i;:::-;24226:5;:21;24218:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;24305:5;24298:12;;24131:187;;;:::o;37522:96::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37604:8:::1;;37594:7;:18;;;;;;;:::i;:::-;;37522:96:::0;;:::o;37712:98::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37794:10:::1;37782:9;:22;;;;37712:98:::0;:::o;27105:124::-;27169:7;27196:20;27208:7;27196:11;:20::i;:::-;:25;;;27189:32;;27105:124;;;:::o;36126:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25846:221::-;25910:7;25955:1;25938:19;;:5;:19;;;;25930:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26031:12;:19;26044:5;26031:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;26023:36;;26016:43;;25846:221;;;:::o;7156:103::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7221:30:::1;7248:1;7221:18;:30::i;:::-;7156:103::o:0;37318:85::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37386:11:::1;;;;;;;;;;;37385:12;37371:11;;:26;;;;;;;;;;;;;;;;;;37318:85::o:0;6843:87::-;6889:7;6916:6;;;;;;;;;;;6909:13;;6843:87;:::o;37149:163::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37257:1:::1;37245:9;;:13;;;;:::i;:::-;37239:3;37223:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;37215:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;37280:26;37290:10;37302:3;37280:9;:26::i;:::-;37149:163:::0;:::o;37624:82::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37694:6:::1;37686:5;:14;;;;37624:82:::0;:::o;38550:132::-;38616:21;;:::i;:::-;38656:20;38668:7;38656:11;:20::i;:::-;38649:27;;38550:132;;;:::o;27465:104::-;27521:13;27554:7;27547:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27465:104;:::o;36164:53::-;;;;:::o;36565:578::-;36619:9;36631:5;;36619:17;;36680:1;36668:9;;:13;;;;:::i;:::-;36662:3;36646:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;36643:65;;;36699:1;36692:8;;36643:65;36736:9;36722:23;;:10;:23;;;36714:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;36794:4;36788:3;:10;;;;:::i;:::-;36775:9;:23;36767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;36880:1;36868:9;;:13;;;;:::i;:::-;36862:3;36846:13;:11;:13::i;:::-;:19;;;;:::i;:::-;:35;36838:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36919:11;;;;;;;;;;;36911:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;37008:12;;37001:3;36974:24;36987:10;36974:12;:24::i;:::-;:30;;;;:::i;:::-;:46;;36966:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;37077:1;37066:8;;:12;;;;:::i;:::-;37060:3;:18;37051:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;37111:26;37121:10;37133:3;37111:9;:26::i;:::-;36612:531;36565:578;:::o;28918:288::-;29025:12;:10;:12::i;:::-;29013:24;;:8;:24;;;;29005:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29126:8;29081:18;:32;29100:12;:10;:12::i;:::-;29081:32;;;;;;;;;;;;;;;:42;29114:8;29081:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;29179:8;29150:48;;29165:12;:10;:12::i;:::-;29150:48;;;29189:8;29150:48;;;;;;:::i;:::-;;;;;;;;28918:288;;:::o;30005:355::-;30164:28;30174:4;30180:2;30184:7;30164:9;:28::i;:::-;30225:48;30248:4;30254:2;30258:7;30267:5;30225:22;:48::i;:::-;30203:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;30005:355;;;;:::o;37816:94::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37895:9:::1;37884:8;:20;;;;37816:94:::0;:::o;27640:344::-;27713:13;27747:16;27755:7;27747;:16::i;:::-;27739:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27828:21;27852:10;:8;:10::i;:::-;27828:34;;27905:1;27886:7;27880:21;:26;;:96;;;;;;;;;;;;;;;;;27933:7;27942:18;:7;:16;:18::i;:::-;27916:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27880:96;27873:103;;;27640:344;;;:::o;36466:32::-;;;;;;;;;;;;;:::o;36366:45::-;;;;:::o;36416:::-;;;;:::o;37409:107::-;37467:7;37490:20;37504:5;37490:13;:20::i;:::-;37483:27;;37409:107;;;:::o;37916:110::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38007:13:::1;37992:12;:28;;;;37916:110:::0;:::o;29277:164::-;29374:4;29398:18;:25;29417:5;29398:25;;;;;;;;;;;;;;;:35;29424:8;29398:35;;;;;;;;;;;;;;;;;;;;;;;;;29391:42;;29277:164;;;;:::o;7414:201::-;7074:12;:10;:12::i;:::-;7063:23;;:7;:5;:7::i;:::-;:23;;;7055:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7523:1:::1;7503:22;;:8;:22;;;;7495:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7579:28;7598:8;7579:18;:28::i;:::-;7414:201:::0;:::o;36222:42::-;;;;:::o;18417:157::-;18502:4;18541:25;18526:40;;;:11;:40;;;;18519:47;;18417:157;;;:::o;30372:111::-;30429:4;30463:12;;30453:7;:22;30446:29;;30372:111;;;:::o;6072:98::-;6125:7;6152:10;6145:17;;6072:98;:::o;34696:196::-;34838:2;34811:15;:24;34827:7;34811:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34876:7;34872:2;34856:28;;34865:5;34856:28;;;;;;;;;;;;34696:196;;;:::o;32576:2002::-;32691:35;32729:20;32741:7;32729:11;:20::i;:::-;32691:58;;32762:22;32804:13;:18;;;32788:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;32863:12;:10;:12::i;:::-;32839:36;;:20;32851:7;32839:11;:20::i;:::-;:36;;;32788:87;:154;;;;32892:50;32909:13;:18;;;32929:12;:10;:12::i;:::-;32892:16;:50::i;:::-;32788:154;32762:181;;32964:17;32956:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33079:4;33057:26;;:13;:18;;;:26;;;33049:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33159:1;33145:16;;:2;:16;;;;33137:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33216:43;33238:4;33244:2;33248:7;33257:1;33216:21;:43::i;:::-;33324:49;33341:1;33345:7;33354:13;:18;;;33324:8;:49::i;:::-;33699:1;33669:12;:18;33682:4;33669:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33743:1;33715:12;:16;33728:2;33715:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33789:2;33761:11;:20;33773:7;33761:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;33851:15;33806:11;:20;33818:7;33806:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34119:19;34151:1;34141:7;:11;34119:33;;34212:1;34171:43;;:11;:24;34183:11;34171:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34167:295;;;34239:20;34247:11;34239:7;:20::i;:::-;34235:212;;;34316:13;:18;;;34284:11;:24;34296:11;34284:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34399:13;:28;;;34357:11;:24;34369:11;34357:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34235:212;34167:295;33644:829;34509:7;34505:2;34490:27;;34499:4;34490:27;;;;;;;;;;;;34528:42;34549:4;34555:2;34559:7;34568:1;34528:20;:42::i;:::-;32680:1898;;32576:2002;;;:::o;38790:1130::-;38874:1;38862:8;:13;;38854:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38937:1;38921:12;;:17;;38913:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38972:33;39008:24;;38972:60;;39077:12;;39049:25;:40;39041:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39260:16;39318:1;39307:8;39279:25;:36;:40;39260:59;;39412:12;;39408:1;39397:8;:12;:27;39393:91;;;39469:1;39454:12;;:16;39443:27;;39393:91;39503:9;39515:25;39503:37;;39498:354;39547:8;39542:1;:13;39498:354;;39614:1;39583:33;;:11;:14;39595:1;39583:14;;;;;;;;;;;:19;;;;;;;;;;;;:33;;;39579:260;;;39639:31;39673:14;39685:1;39673:11;:14::i;:::-;39639:48;;39730:9;:14;;;39708:11;:14;39720:1;39708:14;;;;;;;;;;;:19;;;:36;;;;;;;;;;;;;;;;;;39797:9;:24;;;39765:11;:14;39777:1;39765:14;;;;;;;;;;;:29;;;:56;;;;;;;;;;;;;;;;;;39618:221;39579:260;39557:3;;;;;;;39498:354;;;;39904:1;39893:8;:12;39866:24;:39;;;;39237:678;38845:1075;38790:1130;:::o;26506:537::-;26567:21;;:::i;:::-;26609:16;26617:7;26609;:16::i;:::-;26601:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26715:12;26730:7;26715:22;;26710:245;26747:1;26739:4;:9;26710:245;;26777:31;26811:11;:17;26823:4;26811:17;;;;;;;;;;;26777:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26877:1;26851:28;;:9;:14;;;:28;;;26847:93;;26911:9;26904:16;;;;;;26847:93;26758:197;26750:6;;;;;;;;26710:245;;;;26978:57;;;;;;;;;;:::i;:::-;;;;;;;;26506:537;;;;:::o;7775:191::-;7849:16;7868:6;;;;;;;;;;;7849:25;;7894:8;7885:6;;:17;;;;;;;;;;;;;;;;;;7949:8;7918:40;;7939:8;7918:40;;;;;;;;;;;;7838:128;7775:191;:::o;30491:104::-;30560:27;30570:2;30574:8;30560:27;;;;;;;;;;;;:9;:27::i;:::-;30491:104;;:::o;34900:804::-;35055:4;35076:15;:2;:13;;;:15::i;:::-;35072:625;;;35128:2;35112:36;;;35149:12;:10;:12::i;:::-;35163:4;35169:7;35178:5;35112:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35108:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35375:1;35358:6;:13;:18;35354:273;;;35401:61;;;;;;;;;;:::i;:::-;;;;;;;;35354:273;35577:6;35571:13;35562:6;35558:2;35554:15;35547:38;35108:534;35245:45;;;35235:55;;;:6;:55;;;;35228:62;;;;;35072:625;35681:4;35674:11;;34900:804;;;;;;;:::o;38136:102::-;38196:13;38225:7;38218:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38136:102;:::o;4139:723::-;4195:13;4425:1;4416:5;:10;4412:53;;;4443:10;;;;;;;;;;;;;;;;;;;;;4412:53;4475:12;4490:5;4475:20;;4506:14;4531:78;4546:1;4538:4;:9;4531:78;;4564:8;;;;;:::i;:::-;;;;4595:2;4587:10;;;;;:::i;:::-;;;4531:78;;;4619:19;4651:6;4641:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4619:39;;4669:154;4685:1;4676:5;:10;4669:154;;4713:1;4703:11;;;;;:::i;:::-;;;4780:2;4772:5;:10;;;;:::i;:::-;4759:2;:24;;;;:::i;:::-;4746:39;;4729:6;4736;4729:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4809:2;4800:11;;;;;:::i;:::-;;;4669:154;;;4847:6;4833:21;;;;;4139:723;;;;:::o;26075:229::-;26136:7;26181:1;26164:19;;:5;:19;;;;26156:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26263:12;:19;26276:5;26263:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;26255:41;;26248:48;;26075:229;;;:::o;35716:159::-;;;;;:::o;35887:158::-;;;;;:::o;30609:163::-;30732:32;30738:2;30742:8;30752:5;30759:4;30732:5;:32::i;:::-;30609:163;;;:::o;8227:326::-;8287:4;8544:1;8522:7;:19;;;:23;8515:30;;8227:326;;;:::o;30784:1538::-;30923:20;30946:12;;30923:35;;30991:1;30977:16;;:2;:16;;;;30969:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31062:1;31050:8;:13;;31042:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31121:61;31151:1;31155:2;31159:12;31173:8;31121:21;:61::i;:::-;31496:8;31460:12;:16;31473:2;31460:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31561:8;31520:12;:16;31533:2;31520:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31620:2;31587:11;:25;31599:12;31587:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;31687:15;31637:11;:25;31649:12;31637:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;31720:20;31743:12;31720:35;;31777:9;31772:415;31792:8;31788:1;:12;31772:415;;;31856:12;31852:2;31831:38;;31848:1;31831:38;;;;;;;;;;;;31892:4;31888:249;;;31955:59;31986:1;31990:2;31994:12;32008:5;31955:22;:59::i;:::-;31921:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;31888:249;32157:14;;;;;;;31802:3;;;;;;;31772:415;;;;32218:12;32203;:27;;;;31435:807;32254:60;32283:1;32287:2;32291:12;32305:8;32254:20;:60::i;:::-;30912:1410;30784:1538;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:329::-;2131:6;2180:2;2168:9;2159:7;2155:23;2151:32;2148:119;;;2186:79;;:::i;:::-;2148:119;2306:1;2331:53;2376:7;2367:6;2356:9;2352:22;2331:53;:::i;:::-;2321:63;;2277:117;2072:329;;;;:::o;2407:474::-;2475:6;2483;2532:2;2520:9;2511:7;2507:23;2503:32;2500:119;;;2538:79;;:::i;:::-;2500:119;2658:1;2683:53;2728:7;2719:6;2708:9;2704:22;2683:53;:::i;:::-;2673:63;;2629:117;2785:2;2811:53;2856:7;2847:6;2836:9;2832:22;2811:53;:::i;:::-;2801:63;;2756:118;2407:474;;;;;:::o;2887:619::-;2964:6;2972;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;3410:2;3436:53;3481:7;3472:6;3461:9;3457:22;3436:53;:::i;:::-;3426:63;;3381:118;2887:619;;;;;:::o;3512:943::-;3607:6;3615;3623;3631;3680:3;3668:9;3659:7;3655:23;3651:33;3648:120;;;3687:79;;:::i;:::-;3648:120;3807:1;3832:53;3877:7;3868:6;3857:9;3853:22;3832:53;:::i;:::-;3822:63;;3778:117;3934:2;3960:53;4005:7;3996:6;3985:9;3981:22;3960:53;:::i;:::-;3950:63;;3905:118;4062:2;4088:53;4133:7;4124:6;4113:9;4109:22;4088:53;:::i;:::-;4078:63;;4033:118;4218:2;4207:9;4203:18;4190:32;4249:18;4241:6;4238:30;4235:117;;;4271:79;;:::i;:::-;4235:117;4376:62;4430:7;4421:6;4410:9;4406:22;4376:62;:::i;:::-;4366:72;;4161:287;3512:943;;;;;;;:::o;4461:468::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:50;4904:7;4895:6;4884:9;4880:22;4862:50;:::i;:::-;4852:60;;4807:115;4461:468;;;;;:::o;4935:474::-;5003:6;5011;5060:2;5048:9;5039:7;5035:23;5031:32;5028:119;;;5066:79;;:::i;:::-;5028:119;5186:1;5211:53;5256:7;5247:6;5236:9;5232:22;5211:53;:::i;:::-;5201:63;;5157:117;5313:2;5339:53;5384:7;5375:6;5364:9;5360:22;5339:53;:::i;:::-;5329:63;;5284:118;4935:474;;;;;:::o;5415:327::-;5473:6;5522:2;5510:9;5501:7;5497:23;5493:32;5490:119;;;5528:79;;:::i;:::-;5490:119;5648:1;5673:52;5717:7;5708:6;5697:9;5693:22;5673:52;:::i;:::-;5663:62;;5619:116;5415:327;;;;:::o;5748:349::-;5817:6;5866:2;5854:9;5845:7;5841:23;5837:32;5834:119;;;5872:79;;:::i;:::-;5834:119;5992:1;6017:63;6072:7;6063:6;6052:9;6048:22;6017:63;:::i;:::-;6007:73;;5963:127;5748:349;;;;:::o;6103:529::-;6174:6;6182;6231:2;6219:9;6210:7;6206:23;6202:32;6199:119;;;6237:79;;:::i;:::-;6199:119;6385:1;6374:9;6370:17;6357:31;6415:18;6407:6;6404:30;6401:117;;;6437:79;;:::i;:::-;6401:117;6550:65;6607:7;6598:6;6587:9;6583:22;6550:65;:::i;:::-;6532:83;;;;6328:297;6103:529;;;;;:::o;6638:329::-;6697:6;6746:2;6734:9;6725:7;6721:23;6717:32;6714:119;;;6752:79;;:::i;:::-;6714:119;6872:1;6897:53;6942:7;6933:6;6922:9;6918:22;6897:53;:::i;:::-;6887:63;;6843:117;6638:329;;;;:::o;6973:108::-;7050:24;7068:5;7050:24;:::i;:::-;7045:3;7038:37;6973:108;;:::o;7087:118::-;7174:24;7192:5;7174:24;:::i;:::-;7169:3;7162:37;7087:118;;:::o;7211:109::-;7292:21;7307:5;7292:21;:::i;:::-;7287:3;7280:34;7211:109;;:::o;7326:360::-;7412:3;7440:38;7472:5;7440:38;:::i;:::-;7494:70;7557:6;7552:3;7494:70;:::i;:::-;7487:77;;7573:52;7618:6;7613:3;7606:4;7599:5;7595:16;7573:52;:::i;:::-;7650:29;7672:6;7650:29;:::i;:::-;7645:3;7641:39;7634:46;;7416:270;7326:360;;;;:::o;7692:364::-;7780:3;7808:39;7841:5;7808:39;:::i;:::-;7863:71;7927:6;7922:3;7863:71;:::i;:::-;7856:78;;7943:52;7988:6;7983:3;7976:4;7969:5;7965:16;7943:52;:::i;:::-;8020:29;8042:6;8020:29;:::i;:::-;8015:3;8011:39;8004:46;;7784:272;7692:364;;;;:::o;8062:377::-;8168:3;8196:39;8229:5;8196:39;:::i;:::-;8251:89;8333:6;8328:3;8251:89;:::i;:::-;8244:96;;8349:52;8394:6;8389:3;8382:4;8375:5;8371:16;8349:52;:::i;:::-;8426:6;8421:3;8417:16;8410:23;;8172:267;8062:377;;;;:::o;8445:366::-;8587:3;8608:67;8672:2;8667:3;8608:67;:::i;:::-;8601:74;;8684:93;8773:3;8684:93;:::i;:::-;8802:2;8797:3;8793:12;8786:19;;8445:366;;;:::o;8817:::-;8959:3;8980:67;9044:2;9039:3;8980:67;:::i;:::-;8973:74;;9056:93;9145:3;9056:93;:::i;:::-;9174:2;9169:3;9165:12;9158:19;;8817:366;;;:::o;9189:::-;9331:3;9352:67;9416:2;9411:3;9352:67;:::i;:::-;9345:74;;9428:93;9517:3;9428:93;:::i;:::-;9546:2;9541:3;9537:12;9530:19;;9189:366;;;:::o;9561:::-;9703:3;9724:67;9788:2;9783:3;9724:67;:::i;:::-;9717:74;;9800:93;9889:3;9800:93;:::i;:::-;9918:2;9913:3;9909:12;9902:19;;9561:366;;;:::o;9933:::-;10075:3;10096:67;10160:2;10155:3;10096:67;:::i;:::-;10089:74;;10172:93;10261:3;10172:93;:::i;:::-;10290:2;10285:3;10281:12;10274:19;;9933:366;;;:::o;10305:::-;10447:3;10468:67;10532:2;10527:3;10468:67;:::i;:::-;10461:74;;10544:93;10633:3;10544:93;:::i;:::-;10662:2;10657:3;10653:12;10646:19;;10305:366;;;:::o;10677:::-;10819:3;10840:67;10904:2;10899:3;10840:67;:::i;:::-;10833:74;;10916:93;11005:3;10916:93;:::i;:::-;11034:2;11029:3;11025:12;11018:19;;10677:366;;;:::o;11049:::-;11191:3;11212:67;11276:2;11271:3;11212:67;:::i;:::-;11205:74;;11288:93;11377:3;11288:93;:::i;:::-;11406:2;11401:3;11397:12;11390:19;;11049:366;;;:::o;11421:::-;11563:3;11584:67;11648:2;11643:3;11584:67;:::i;:::-;11577:74;;11660:93;11749:3;11660:93;:::i;:::-;11778:2;11773:3;11769:12;11762:19;;11421:366;;;:::o;11793:::-;11935:3;11956:67;12020:2;12015:3;11956:67;:::i;:::-;11949:74;;12032:93;12121:3;12032:93;:::i;:::-;12150:2;12145:3;12141:12;12134:19;;11793:366;;;:::o;12165:365::-;12307:3;12328:66;12392:1;12387:3;12328:66;:::i;:::-;12321:73;;12403:93;12492:3;12403:93;:::i;:::-;12521:2;12516:3;12512:12;12505:19;;12165:365;;;:::o;12536:366::-;12678:3;12699:67;12763:2;12758:3;12699:67;:::i;:::-;12692:74;;12775:93;12864:3;12775:93;:::i;:::-;12893:2;12888:3;12884:12;12877:19;;12536:366;;;:::o;12908:::-;13050:3;13071:67;13135:2;13130:3;13071:67;:::i;:::-;13064:74;;13147:93;13236:3;13147:93;:::i;:::-;13265:2;13260:3;13256:12;13249:19;;12908:366;;;:::o;13280:::-;13422:3;13443:67;13507:2;13502:3;13443:67;:::i;:::-;13436:74;;13519:93;13608:3;13519:93;:::i;:::-;13637:2;13632:3;13628:12;13621:19;;13280:366;;;:::o;13652:::-;13794:3;13815:67;13879:2;13874:3;13815:67;:::i;:::-;13808:74;;13891:93;13980:3;13891:93;:::i;:::-;14009:2;14004:3;14000:12;13993:19;;13652:366;;;:::o;14024:400::-;14184:3;14205:84;14287:1;14282:3;14205:84;:::i;:::-;14198:91;;14298:93;14387:3;14298:93;:::i;:::-;14416:1;14411:3;14407:11;14400:18;;14024:400;;;:::o;14430:366::-;14572:3;14593:67;14657:2;14652:3;14593:67;:::i;:::-;14586:74;;14669:93;14758:3;14669:93;:::i;:::-;14787:2;14782:3;14778:12;14771:19;;14430:366;;;:::o;14802:::-;14944:3;14965:67;15029:2;15024:3;14965:67;:::i;:::-;14958:74;;15041:93;15130:3;15041:93;:::i;:::-;15159:2;15154:3;15150:12;15143:19;;14802:366;;;:::o;15174:::-;15316:3;15337:67;15401:2;15396:3;15337:67;:::i;:::-;15330:74;;15413:93;15502:3;15413:93;:::i;:::-;15531:2;15526:3;15522:12;15515:19;;15174:366;;;:::o;15546:::-;15688:3;15709:67;15773:2;15768:3;15709:67;:::i;:::-;15702:74;;15785:93;15874:3;15785:93;:::i;:::-;15903:2;15898:3;15894:12;15887:19;;15546:366;;;:::o;15918:::-;16060:3;16081:67;16145:2;16140:3;16081:67;:::i;:::-;16074:74;;16157:93;16246:3;16157:93;:::i;:::-;16275:2;16270:3;16266:12;16259:19;;15918:366;;;:::o;16290:::-;16432:3;16453:67;16517:2;16512:3;16453:67;:::i;:::-;16446:74;;16529:93;16618:3;16529:93;:::i;:::-;16647:2;16642:3;16638:12;16631:19;;16290:366;;;:::o;16662:::-;16804:3;16825:67;16889:2;16884:3;16825:67;:::i;:::-;16818:74;;16901:93;16990:3;16901:93;:::i;:::-;17019:2;17014:3;17010:12;17003:19;;16662:366;;;:::o;17034:398::-;17193:3;17214:83;17295:1;17290:3;17214:83;:::i;:::-;17207:90;;17306:93;17395:3;17306:93;:::i;:::-;17424:1;17419:3;17415:11;17408:18;;17034:398;;;:::o;17438:366::-;17580:3;17601:67;17665:2;17660:3;17601:67;:::i;:::-;17594:74;;17677:93;17766:3;17677:93;:::i;:::-;17795:2;17790:3;17786:12;17779:19;;17438:366;;;:::o;17810:::-;17952:3;17973:67;18037:2;18032:3;17973:67;:::i;:::-;17966:74;;18049:93;18138:3;18049:93;:::i;:::-;18167:2;18162:3;18158:12;18151:19;;17810:366;;;:::o;18182:::-;18324:3;18345:67;18409:2;18404:3;18345:67;:::i;:::-;18338:74;;18421:93;18510:3;18421:93;:::i;:::-;18539:2;18534:3;18530:12;18523:19;;18182:366;;;:::o;18554:::-;18696:3;18717:67;18781:2;18776:3;18717:67;:::i;:::-;18710:74;;18793:93;18882:3;18793:93;:::i;:::-;18911:2;18906:3;18902:12;18895:19;;18554:366;;;:::o;18926:::-;19068:3;19089:67;19153:2;19148:3;19089:67;:::i;:::-;19082:74;;19165:93;19254:3;19165:93;:::i;:::-;19283:2;19278:3;19274:12;19267:19;;18926:366;;;:::o;19298:::-;19440:3;19461:67;19525:2;19520:3;19461:67;:::i;:::-;19454:74;;19537:93;19626:3;19537:93;:::i;:::-;19655:2;19650:3;19646:12;19639:19;;19298:366;;;:::o;19670:::-;19812:3;19833:67;19897:2;19892:3;19833:67;:::i;:::-;19826:74;;19909:93;19998:3;19909:93;:::i;:::-;20027:2;20022:3;20018:12;20011:19;;19670:366;;;:::o;20042:::-;20184:3;20205:67;20269:2;20264:3;20205:67;:::i;:::-;20198:74;;20281:93;20370:3;20281:93;:::i;:::-;20399:2;20394:3;20390:12;20383:19;;20042:366;;;:::o;20414:::-;20556:3;20577:67;20641:2;20636:3;20577:67;:::i;:::-;20570:74;;20653:93;20742:3;20653:93;:::i;:::-;20771:2;20766:3;20762:12;20755:19;;20414:366;;;:::o;20786:::-;20928:3;20949:67;21013:2;21008:3;20949:67;:::i;:::-;20942:74;;21025:93;21114:3;21025:93;:::i;:::-;21143:2;21138:3;21134:12;21127:19;;20786:366;;;:::o;21228:529::-;21389:4;21384:3;21380:14;21476:4;21469:5;21465:16;21459:23;21495:63;21552:4;21547:3;21543:14;21529:12;21495:63;:::i;:::-;21404:164;21660:4;21653:5;21649:16;21643:23;21679:61;21734:4;21729:3;21725:14;21711:12;21679:61;:::i;:::-;21578:172;21358:399;21228:529;;:::o;21763:118::-;21850:24;21868:5;21850:24;:::i;:::-;21845:3;21838:37;21763:118;;:::o;21887:105::-;21962:23;21979:5;21962:23;:::i;:::-;21957:3;21950:36;21887:105;;:::o;21998:701::-;22279:3;22301:95;22392:3;22383:6;22301:95;:::i;:::-;22294:102;;22413:95;22504:3;22495:6;22413:95;:::i;:::-;22406:102;;22525:148;22669:3;22525:148;:::i;:::-;22518:155;;22690:3;22683:10;;21998:701;;;;;:::o;22705:379::-;22889:3;22911:147;23054:3;22911:147;:::i;:::-;22904:154;;23075:3;23068:10;;22705:379;;;:::o;23090:222::-;23183:4;23221:2;23210:9;23206:18;23198:26;;23234:71;23302:1;23291:9;23287:17;23278:6;23234:71;:::i;:::-;23090:222;;;;:::o;23318:640::-;23513:4;23551:3;23540:9;23536:19;23528:27;;23565:71;23633:1;23622:9;23618:17;23609:6;23565:71;:::i;:::-;23646:72;23714:2;23703:9;23699:18;23690:6;23646:72;:::i;:::-;23728;23796:2;23785:9;23781:18;23772:6;23728:72;:::i;:::-;23847:9;23841:4;23837:20;23832:2;23821:9;23817:18;23810:48;23875:76;23946:4;23937:6;23875:76;:::i;:::-;23867:84;;23318:640;;;;;;;:::o;23964:210::-;24051:4;24089:2;24078:9;24074:18;24066:26;;24102:65;24164:1;24153:9;24149:17;24140:6;24102:65;:::i;:::-;23964:210;;;;:::o;24180:313::-;24293:4;24331:2;24320:9;24316:18;24308:26;;24380:9;24374:4;24370:20;24366:1;24355:9;24351:17;24344:47;24408:78;24481:4;24472:6;24408:78;:::i;:::-;24400:86;;24180:313;;;;:::o;24499:419::-;24665:4;24703:2;24692:9;24688:18;24680:26;;24752:9;24746:4;24742:20;24738:1;24727:9;24723:17;24716:47;24780:131;24906:4;24780:131;:::i;:::-;24772:139;;24499:419;;;:::o;24924:::-;25090:4;25128:2;25117:9;25113:18;25105:26;;25177:9;25171:4;25167:20;25163:1;25152:9;25148:17;25141:47;25205:131;25331:4;25205:131;:::i;:::-;25197:139;;24924:419;;;:::o;25349:::-;25515:4;25553:2;25542:9;25538:18;25530:26;;25602:9;25596:4;25592:20;25588:1;25577:9;25573:17;25566:47;25630:131;25756:4;25630:131;:::i;:::-;25622:139;;25349:419;;;:::o;25774:::-;25940:4;25978:2;25967:9;25963:18;25955:26;;26027:9;26021:4;26017:20;26013:1;26002:9;25998:17;25991:47;26055:131;26181:4;26055:131;:::i;:::-;26047:139;;25774:419;;;:::o;26199:::-;26365:4;26403:2;26392:9;26388:18;26380:26;;26452:9;26446:4;26442:20;26438:1;26427:9;26423:17;26416:47;26480:131;26606:4;26480:131;:::i;:::-;26472:139;;26199:419;;;:::o;26624:::-;26790:4;26828:2;26817:9;26813:18;26805:26;;26877:9;26871:4;26867:20;26863:1;26852:9;26848:17;26841:47;26905:131;27031:4;26905:131;:::i;:::-;26897:139;;26624:419;;;:::o;27049:::-;27215:4;27253:2;27242:9;27238:18;27230:26;;27302:9;27296:4;27292:20;27288:1;27277:9;27273:17;27266:47;27330:131;27456:4;27330:131;:::i;:::-;27322:139;;27049:419;;;:::o;27474:::-;27640:4;27678:2;27667:9;27663:18;27655:26;;27727:9;27721:4;27717:20;27713:1;27702:9;27698:17;27691:47;27755:131;27881:4;27755:131;:::i;:::-;27747:139;;27474:419;;;:::o;27899:::-;28065:4;28103:2;28092:9;28088:18;28080:26;;28152:9;28146:4;28142:20;28138:1;28127:9;28123:17;28116:47;28180:131;28306:4;28180:131;:::i;:::-;28172:139;;27899:419;;;:::o;28324:::-;28490:4;28528:2;28517:9;28513:18;28505:26;;28577:9;28571:4;28567:20;28563:1;28552:9;28548:17;28541:47;28605:131;28731:4;28605:131;:::i;:::-;28597:139;;28324:419;;;:::o;28749:::-;28915:4;28953:2;28942:9;28938:18;28930:26;;29002:9;28996:4;28992:20;28988:1;28977:9;28973:17;28966:47;29030:131;29156:4;29030:131;:::i;:::-;29022:139;;28749:419;;;:::o;29174:::-;29340:4;29378:2;29367:9;29363:18;29355:26;;29427:9;29421:4;29417:20;29413:1;29402:9;29398:17;29391:47;29455:131;29581:4;29455:131;:::i;:::-;29447:139;;29174:419;;;:::o;29599:::-;29765:4;29803:2;29792:9;29788:18;29780:26;;29852:9;29846:4;29842:20;29838:1;29827:9;29823:17;29816:47;29880:131;30006:4;29880:131;:::i;:::-;29872:139;;29599:419;;;:::o;30024:::-;30190:4;30228:2;30217:9;30213:18;30205:26;;30277:9;30271:4;30267:20;30263:1;30252:9;30248:17;30241:47;30305:131;30431:4;30305:131;:::i;:::-;30297:139;;30024:419;;;:::o;30449:::-;30615:4;30653:2;30642:9;30638:18;30630:26;;30702:9;30696:4;30692:20;30688:1;30677:9;30673:17;30666:47;30730:131;30856:4;30730:131;:::i;:::-;30722:139;;30449:419;;;:::o;30874:::-;31040:4;31078:2;31067:9;31063:18;31055:26;;31127:9;31121:4;31117:20;31113:1;31102:9;31098:17;31091:47;31155:131;31281:4;31155:131;:::i;:::-;31147:139;;30874:419;;;:::o;31299:::-;31465:4;31503:2;31492:9;31488:18;31480:26;;31552:9;31546:4;31542:20;31538:1;31527:9;31523:17;31516:47;31580:131;31706:4;31580:131;:::i;:::-;31572:139;;31299:419;;;:::o;31724:::-;31890:4;31928:2;31917:9;31913:18;31905:26;;31977:9;31971:4;31967:20;31963:1;31952:9;31948:17;31941:47;32005:131;32131:4;32005:131;:::i;:::-;31997:139;;31724:419;;;:::o;32149:::-;32315:4;32353:2;32342:9;32338:18;32330:26;;32402:9;32396:4;32392:20;32388:1;32377:9;32373:17;32366:47;32430:131;32556:4;32430:131;:::i;:::-;32422:139;;32149:419;;;:::o;32574:::-;32740:4;32778:2;32767:9;32763:18;32755:26;;32827:9;32821:4;32817:20;32813:1;32802:9;32798:17;32791:47;32855:131;32981:4;32855:131;:::i;:::-;32847:139;;32574:419;;;:::o;32999:::-;33165:4;33203:2;33192:9;33188:18;33180:26;;33252:9;33246:4;33242:20;33238:1;33227:9;33223:17;33216:47;33280:131;33406:4;33280:131;:::i;:::-;33272:139;;32999:419;;;:::o;33424:::-;33590:4;33628:2;33617:9;33613:18;33605:26;;33677:9;33671:4;33667:20;33663:1;33652:9;33648:17;33641:47;33705:131;33831:4;33705:131;:::i;:::-;33697:139;;33424:419;;;:::o;33849:::-;34015:4;34053:2;34042:9;34038:18;34030:26;;34102:9;34096:4;34092:20;34088:1;34077:9;34073:17;34066:47;34130:131;34256:4;34130:131;:::i;:::-;34122:139;;33849:419;;;:::o;34274:::-;34440:4;34478:2;34467:9;34463:18;34455:26;;34527:9;34521:4;34517:20;34513:1;34502:9;34498:17;34491:47;34555:131;34681:4;34555:131;:::i;:::-;34547:139;;34274:419;;;:::o;34699:::-;34865:4;34903:2;34892:9;34888:18;34880:26;;34952:9;34946:4;34942:20;34938:1;34927:9;34923:17;34916:47;34980:131;35106:4;34980:131;:::i;:::-;34972:139;;34699:419;;;:::o;35124:::-;35290:4;35328:2;35317:9;35313:18;35305:26;;35377:9;35371:4;35367:20;35363:1;35352:9;35348:17;35341:47;35405:131;35531:4;35405:131;:::i;:::-;35397:139;;35124:419;;;:::o;35549:::-;35715:4;35753:2;35742:9;35738:18;35730:26;;35802:9;35796:4;35792:20;35788:1;35777:9;35773:17;35766:47;35830:131;35956:4;35830:131;:::i;:::-;35822:139;;35549:419;;;:::o;35974:::-;36140:4;36178:2;36167:9;36163:18;36155:26;;36227:9;36221:4;36217:20;36213:1;36202:9;36198:17;36191:47;36255:131;36381:4;36255:131;:::i;:::-;36247:139;;35974:419;;;:::o;36399:::-;36565:4;36603:2;36592:9;36588:18;36580:26;;36652:9;36646:4;36642:20;36638:1;36627:9;36623:17;36616:47;36680:131;36806:4;36680:131;:::i;:::-;36672:139;;36399:419;;;:::o;36824:::-;36990:4;37028:2;37017:9;37013:18;37005:26;;37077:9;37071:4;37067:20;37063:1;37052:9;37048:17;37041:47;37105:131;37231:4;37105:131;:::i;:::-;37097:139;;36824:419;;;:::o;37249:::-;37415:4;37453:2;37442:9;37438:18;37430:26;;37502:9;37496:4;37492:20;37488:1;37477:9;37473:17;37466:47;37530:131;37656:4;37530:131;:::i;:::-;37522:139;;37249:419;;;:::o;37674:::-;37840:4;37878:2;37867:9;37863:18;37855:26;;37927:9;37921:4;37917:20;37913:1;37902:9;37898:17;37891:47;37955:131;38081:4;37955:131;:::i;:::-;37947:139;;37674:419;;;:::o;38099:350::-;38256:4;38294:2;38283:9;38279:18;38271:26;;38307:135;38439:1;38428:9;38424:17;38415:6;38307:135;:::i;:::-;38099:350;;;;:::o;38455:222::-;38548:4;38586:2;38575:9;38571:18;38563:26;;38599:71;38667:1;38656:9;38652:17;38643:6;38599:71;:::i;:::-;38455:222;;;;:::o;38683:129::-;38717:6;38744:20;;:::i;:::-;38734:30;;38773:33;38801:4;38793:6;38773:33;:::i;:::-;38683:129;;;:::o;38818:75::-;38851:6;38884:2;38878:9;38868:19;;38818:75;:::o;38899:307::-;38960:4;39050:18;39042:6;39039:30;39036:56;;;39072:18;;:::i;:::-;39036:56;39110:29;39132:6;39110:29;:::i;:::-;39102:37;;39194:4;39188;39184:15;39176:23;;38899:307;;;:::o;39212:98::-;39263:6;39297:5;39291:12;39281:22;;39212:98;;;:::o;39316:99::-;39368:6;39402:5;39396:12;39386:22;;39316:99;;;:::o;39421:168::-;39504:11;39538:6;39533:3;39526:19;39578:4;39573:3;39569:14;39554:29;;39421:168;;;;:::o;39595:147::-;39696:11;39733:3;39718:18;;39595:147;;;;:::o;39748:169::-;39832:11;39866:6;39861:3;39854:19;39906:4;39901:3;39897:14;39882:29;;39748:169;;;;:::o;39923:148::-;40025:11;40062:3;40047:18;;39923:148;;;;:::o;40077:305::-;40117:3;40136:20;40154:1;40136:20;:::i;:::-;40131:25;;40170:20;40188:1;40170:20;:::i;:::-;40165:25;;40324:1;40256:66;40252:74;40249:1;40246:81;40243:107;;;40330:18;;:::i;:::-;40243:107;40374:1;40371;40367:9;40360:16;;40077:305;;;;:::o;40388:185::-;40428:1;40445:20;40463:1;40445:20;:::i;:::-;40440:25;;40479:20;40497:1;40479:20;:::i;:::-;40474:25;;40518:1;40508:35;;40523:18;;:::i;:::-;40508:35;40565:1;40562;40558:9;40553:14;;40388:185;;;;:::o;40579:348::-;40619:7;40642:20;40660:1;40642:20;:::i;:::-;40637:25;;40676:20;40694:1;40676:20;:::i;:::-;40671:25;;40864:1;40796:66;40792:74;40789:1;40786:81;40781:1;40774:9;40767:17;40763:105;40760:131;;;40871:18;;:::i;:::-;40760:131;40919:1;40916;40912:9;40901:20;;40579:348;;;;:::o;40933:191::-;40973:4;40993:20;41011:1;40993:20;:::i;:::-;40988:25;;41027:20;41045:1;41027:20;:::i;:::-;41022:25;;41066:1;41063;41060:8;41057:34;;;41071:18;;:::i;:::-;41057:34;41116:1;41113;41109:9;41101:17;;40933:191;;;;:::o;41130:96::-;41167:7;41196:24;41214:5;41196:24;:::i;:::-;41185:35;;41130:96;;;:::o;41232:90::-;41266:7;41309:5;41302:13;41295:21;41284:32;;41232:90;;;:::o;41328:149::-;41364:7;41404:66;41397:5;41393:78;41382:89;;41328:149;;;:::o;41483:126::-;41520:7;41560:42;41553:5;41549:54;41538:65;;41483:126;;;:::o;41615:77::-;41652:7;41681:5;41670:16;;41615:77;;;:::o;41698:101::-;41734:7;41774:18;41767:5;41763:30;41752:41;;41698:101;;;:::o;41805:154::-;41889:6;41884:3;41879;41866:30;41951:1;41942:6;41937:3;41933:16;41926:27;41805:154;;;:::o;41965:307::-;42033:1;42043:113;42057:6;42054:1;42051:13;42043:113;;;42142:1;42137:3;42133:11;42127:18;42123:1;42118:3;42114:11;42107:39;42079:2;42076:1;42072:10;42067:15;;42043:113;;;42174:6;42171:1;42168:13;42165:101;;;42254:1;42245:6;42240:3;42236:16;42229:27;42165:101;42014:258;41965:307;;;:::o;42278:320::-;42322:6;42359:1;42353:4;42349:12;42339:22;;42406:1;42400:4;42396:12;42427:18;42417:81;;42483:4;42475:6;42471:17;42461:27;;42417:81;42545:2;42537:6;42534:14;42514:18;42511:38;42508:84;;;42564:18;;:::i;:::-;42508:84;42329:269;42278:320;;;:::o;42604:281::-;42687:27;42709:4;42687:27;:::i;:::-;42679:6;42675:40;42817:6;42805:10;42802:22;42781:18;42769:10;42766:34;42763:62;42760:88;;;42828:18;;:::i;:::-;42760:88;42868:10;42864:2;42857:22;42647:238;42604:281;;:::o;42891:233::-;42930:3;42953:24;42971:5;42953:24;:::i;:::-;42944:33;;42999:66;42992:5;42989:77;42986:103;;;43069:18;;:::i;:::-;42986:103;43116:1;43109:5;43105:13;43098:20;;42891:233;;;:::o;43130:176::-;43162:1;43179:20;43197:1;43179:20;:::i;:::-;43174:25;;43213:20;43231:1;43213:20;:::i;:::-;43208:25;;43252:1;43242:35;;43257:18;;:::i;:::-;43242:35;43298:1;43295;43291:9;43286:14;;43130:176;;;;:::o;43312:180::-;43360:77;43357:1;43350:88;43457:4;43454:1;43447:15;43481:4;43478:1;43471:15;43498:180;43546:77;43543:1;43536:88;43643:4;43640:1;43633:15;43667:4;43664:1;43657:15;43684:180;43732:77;43729:1;43722:88;43829:4;43826:1;43819:15;43853:4;43850:1;43843:15;43870:180;43918:77;43915:1;43908:88;44015:4;44012:1;44005:15;44039:4;44036:1;44029:15;44056:180;44104:77;44101:1;44094:88;44201:4;44198:1;44191:15;44225:4;44222:1;44215:15;44242:117;44351:1;44348;44341:12;44365:117;44474:1;44471;44464:12;44488:117;44597:1;44594;44587:12;44611:117;44720:1;44717;44710:12;44734:117;44843:1;44840;44833:12;44857:117;44966:1;44963;44956:12;44980:102;45021:6;45072:2;45068:7;45063:2;45056:5;45052:14;45048:28;45038:38;;44980:102;;;:::o;45088:221::-;45228:34;45224:1;45216:6;45212:14;45205:58;45297:4;45292:2;45284:6;45280:15;45273:29;45088:221;:::o;45315:169::-;45455:21;45451:1;45443:6;45439:14;45432:45;45315:169;:::o;45490:225::-;45630:34;45626:1;45618:6;45614:14;45607:58;45699:8;45694:2;45686:6;45682:15;45675:33;45490:225;:::o;45721:229::-;45861:34;45857:1;45849:6;45845:14;45838:58;45930:12;45925:2;45917:6;45913:15;45906:37;45721:229;:::o;45956:170::-;46096:22;46092:1;46084:6;46080:14;46073:46;45956:170;:::o;46132:::-;46272:22;46268:1;46260:6;46256:14;46249:46;46132:170;:::o;46308:222::-;46448:34;46444:1;46436:6;46432:14;46425:58;46517:5;46512:2;46504:6;46500:15;46493:30;46308:222;:::o;46536:224::-;46676:34;46672:1;46664:6;46660:14;46653:58;46745:7;46740:2;46732:6;46728:15;46721:32;46536:224;:::o;46766:236::-;46906:34;46902:1;46894:6;46890:14;46883:58;46975:19;46970:2;46962:6;46958:15;46951:44;46766:236;:::o;47008:178::-;47148:30;47144:1;47136:6;47132:14;47125:54;47008:178;:::o;47192:159::-;47332:11;47328:1;47320:6;47316:14;47309:35;47192:159;:::o;47357:244::-;47497:34;47493:1;47485:6;47481:14;47474:58;47566:27;47561:2;47553:6;47549:15;47542:52;47357:244;:::o;47607:174::-;47747:26;47743:1;47735:6;47731:14;47724:50;47607:174;:::o;47787:230::-;47927:34;47923:1;47915:6;47911:14;47904:58;47996:13;47991:2;47983:6;47979:15;47972:38;47787:230;:::o;48023:225::-;48163:34;48159:1;48151:6;48147:14;48140:58;48232:8;48227:2;48219:6;48215:15;48208:33;48023:225;:::o;48254:155::-;48394:7;48390:1;48382:6;48378:14;48371:31;48254:155;:::o;48415:182::-;48555:34;48551:1;48543:6;48539:14;48532:58;48415:182;:::o;48603:174::-;48743:26;48739:1;48731:6;48727:14;48720:50;48603:174;:::o;48783:234::-;48923:34;48919:1;48911:6;48907:14;48900:58;48992:17;48987:2;48979:6;48975:15;48968:42;48783:234;:::o;49023:176::-;49163:28;49159:1;49151:6;49147:14;49140:52;49023:176;:::o;49205:237::-;49345:34;49341:1;49333:6;49329:14;49322:58;49414:20;49409:2;49401:6;49397:15;49390:45;49205:237;:::o;49448:179::-;49588:31;49584:1;49576:6;49572:14;49565:55;49448:179;:::o;49633:221::-;49773:34;49769:1;49761:6;49757:14;49750:58;49842:4;49837:2;49829:6;49825:15;49818:29;49633:221;:::o;49860:114::-;;:::o;49980:166::-;50120:18;50116:1;50108:6;50104:14;50097:42;49980:166;:::o;50152:238::-;50292:34;50288:1;50280:6;50276:14;50269:58;50361:21;50356:2;50348:6;50344:15;50337:46;50152:238;:::o;50396:220::-;50536:34;50532:1;50524:6;50520:14;50513:58;50605:3;50600:2;50592:6;50588:15;50581:28;50396:220;:::o;50622:227::-;50762:34;50758:1;50750:6;50746:14;50739:58;50831:10;50826:2;50818:6;50814:15;50807:35;50622:227;:::o;50855:169::-;50995:21;50991:1;50983:6;50979:14;50972:45;50855:169;:::o;51030:233::-;51170:34;51166:1;51158:6;51154:14;51147:58;51239:16;51234:2;51226:6;51222:15;51215:41;51030:233;:::o;51269:161::-;51409:13;51405:1;51397:6;51393:14;51386:37;51269:161;:::o;51436:181::-;51576:33;51572:1;51564:6;51560:14;51553:57;51436:181;:::o;51623:234::-;51763:34;51759:1;51751:6;51747:14;51740:58;51832:17;51827:2;51819:6;51815:15;51808:42;51623:234;:::o;51863:232::-;52003:34;51999:1;51991:6;51987:14;51980:58;52072:15;52067:2;52059:6;52055:15;52048:40;51863:232;:::o;52101:122::-;52174:24;52192:5;52174:24;:::i;:::-;52167:5;52164:35;52154:63;;52213:1;52210;52203:12;52154:63;52101:122;:::o;52229:116::-;52299:21;52314:5;52299:21;:::i;:::-;52292:5;52289:32;52279:60;;52335:1;52332;52325:12;52279:60;52229:116;:::o;52351:120::-;52423:23;52440:5;52423:23;:::i;:::-;52416:5;52413:34;52403:62;;52461:1;52458;52451:12;52403:62;52351:120;:::o;52477:122::-;52550:24;52568:5;52550:24;:::i;:::-;52543:5;52540:35;52530:63;;52589:1;52586;52579:12;52530:63;52477:122;:::o

Swarm Source

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