ETH Price: $2,514.01 (+0.01%)

Token

NFTNewsCert75 (NNC75)
 

Overview

Max Total Supply

0 NNC75

Holders

17

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
bielenda.eth
Balance
1 NNC75
0xcb9c94cc52e69268b1c2ddd04bfee67c4059b304
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:
NFTNewsCert

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-07-10
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.9;

//base64.sol
library Base64 {
    string internal constant TABLE_ENCODE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
    bytes  internal constant TABLE_DECODE = hex"0000000000000000000000000000000000000000000000000000000000000000"
                                            hex"00000000000000000000003e0000003f3435363738393a3b3c3d000000000000"
                                            hex"00000102030405060708090a0b0c0d0e0f101112131415161718190000000000"
                                            hex"001a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132330000000000";

    function encode(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return '';

        // load the table into memory
        string memory table = TABLE_ENCODE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {} lt(dataPtr, endPtr) {}
            {
                // read 3 bytes
                dataPtr := add(dataPtr, 3)
                let input := mload(dataPtr)

                // write 4 characters
                mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(shr( 6, input), 0x3F))))
                resultPtr := add(resultPtr, 1)
                mstore8(resultPtr, mload(add(tablePtr, and(        input,  0x3F))))
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) }
            case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) }
        }

        return result;
    }

    function decode(string memory _data) internal pure returns (bytes memory) {
        bytes memory data = bytes(_data);

        if (data.length == 0) return new bytes(0);
        require(data.length % 4 == 0, "invalid base64 decoder input");

        // load the table into memory
        bytes memory table = TABLE_DECODE;

        // every 4 characters represent 3 bytes
        uint256 decodedLen = (data.length / 4) * 3;

        // add some extra buffer at the end required for the writing
        bytes memory result = new bytes(decodedLen + 32);

        assembly {
            // padding with '='
            let lastBytes := mload(add(data, mload(data)))
            if eq(and(lastBytes, 0xFF), 0x3d) {
                decodedLen := sub(decodedLen, 1)
                if eq(and(lastBytes, 0xFFFF), 0x3d3d) {
                    decodedLen := sub(decodedLen, 1)
                }
            }

            // set the actual output length
            mstore(result, decodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 4 characters at a time
            for {} lt(dataPtr, endPtr) {}
            {
               // read 4 characters
               dataPtr := add(dataPtr, 4)
               let input := mload(dataPtr)

               // write 3 bytes
               let output := add(
                   add(
                       shl(18, and(mload(add(tablePtr, and(shr(24, input), 0xFF))), 0xFF)),
                       shl(12, and(mload(add(tablePtr, and(shr(16, input), 0xFF))), 0xFF))),
                   add(
                       shl( 6, and(mload(add(tablePtr, and(shr( 8, input), 0xFF))), 0xFF)),
                               and(mload(add(tablePtr, and(        input , 0xFF))), 0xFF)
                    )
                )
                mstore(resultPtr, shl(232, output))
                resultPtr := add(resultPtr, 3)
            }
        }

        return result;
    }
}


//Address.sol
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    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;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    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
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}


//String.sol
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

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

    /**
     * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
     */
    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}


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

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


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

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

//Ownables
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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

 //IERC721Receiver
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}


//ERC721.sol
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: address zero is not a valid owner");
        return _balances[owner];
    }

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

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        _requireMinted(tokenId);

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

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overridden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }

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

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

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        _requireMinted(tokenId);

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

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

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

        _transfer(from, to, tokenId);
    }

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

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

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

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

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

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

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

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

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

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

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

        _afterTokenTransfer(address(0), to, tokenId);
    }

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

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

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

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

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

        _afterTokenTransfer(owner, address(0), tokenId);
    }

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

        _beforeTokenTransfer(from, to, tokenId);

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

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

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId);
    }

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

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Reverts if the `tokenId` has not been minted yet.
     */
    function _requireMinted(uint256 tokenId) internal view virtual {
        require(_exists(tokenId), "ERC721: invalid token ID");
    }

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

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

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}


//main zone
contract NFTNewsCert is ERC721, Ownable{
    uint256 private currentTokenId = 0;
    bool sw = false;
    uint256 totalNumer = 100;
    uint256 limit = 1;

    enum Color {Black, Red, Blue, Green, Yellow, White, Pink}
    string[] colorArray;
    mapping(Color => string) colorString;

    mapping(uint256 => Color) tokenColor;
    mapping(uint256 => string) tokenSignature;
    mapping(address => uint256) numOfMinted;

    event Mint(address indexed minter, string indexed color,string signature);
    constructor(
        string memory _name,
        string memory _symbol
    ) ERC721(_name, _symbol) {
        colorArray = ["black","red", "blue", "green", "yellow", "white", "pink"];
        for(uint256 i=0; i<colorArray.length; i++){
            colorString[Color(i)] = colorArray[i];
        }
    }

    //Utility
    function xPosition(uint256 _tokenId) private pure returns (uint256){
        return (_tokenId- 1) % 10 * 24 + 12 + 30 + 10;
    }
    function yPosition(uint256 _tokenId) private pure returns (uint256){
        return (_tokenId- 1) / 10 * 24 + 12 + 60 + 10;
    }

    function getNumberOfAccountMinted(address _address) public view returns (uint256) {
        return numOfMinted[_address];
    }

    function getNumberOfMinted() public view returns (uint256) {
        return currentTokenId ;
    }

    function getMintStatus() public view returns (bool) {
        return sw;
    }

    function getSignature(uint256 _tokenId) public view returns (string memory) {
        return tokenSignature[_tokenId];
    }

    function setSignature(uint256 _tokenId, string memory _signature) public {
        require(ownerOf(_tokenId) == msg.sender, "Only owner can set signature");
        tokenSignature[_tokenId] = _signature;
    }

    function mintRed( string memory yourName) public{
        mintTo( Color.Red, yourName);
    }
    function mintBlue(string memory yourName) public{
        mintTo(Color.Blue, yourName);
    }
    function mintGreen(string memory yourName) public{
        mintTo(Color.Green, yourName);
    }
    function mintYellow(string memory yourName) public{
        mintTo(Color.Yellow, yourName);
    }
    function mintWhite(string memory yourName) public{
        mintTo(Color.White, yourName);
    }
    function mintPink(string memory yourName) public{
        mintTo(Color.Pink, yourName);
    }
    function mintTo(Color _color,string memory _name) private{
        address _to = msg.sender;
        require(sw, "Minting window is not open");
        require(currentTokenId < totalNumer, "Token amount is full)");
        require(numOfMinted[_to] < limit, "You reached mint limit");
        uint256 newTokenId = _getNextTokenId();
        _mint(_to, newTokenId);
        
        tokenSignature[newTokenId] = _name;
        tokenColor[newTokenId] = _color;
        numOfMinted[_to]++;
        emit Mint(msg.sender, colorString[_color], _name);
        _incrementTokenId();
    }
    function _getNextTokenId() private view returns (uint256) {
        return currentTokenId+1;
    }
    function _incrementTokenId() private {
        currentTokenId++;
    }
        function isTokenExist(uint256 _tokenId) private view returns (bool) {
        if(_tokenId < 1 || currentTokenId < _tokenId){return false;}
        return tokenColor[_tokenId] != Color.Black;
    }
    function tokenURI(uint256 _tokenId) override public view returns (string memory) {
        require(isTokenExist(_tokenId), "tokenId must be exist");
        
        string[6] memory p;
        p[0] = string(abi.encodePacked(
            '<svg xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="xMinYMin meet" viewBox="0 0 320 320">',
            '<style>.base { fill: white; font-family: serif; font-size: 14px;}</style>',
            '<defs><filter id="f"><feGaussianBlur in="SourceGraphic" stdDeviation="3" /></filter>'
        ));

        for(uint256 i = 0; i< colorArray.length; i++){
            string memory color = colorArray[i];
            p[1] = string(abi.encodePacked(
                p[1],
                '<linearGradient id="', color, 'LG"><stop offset="0%" stop-color="',color,'"/><stop offset="100%"/>',
                '</linearGradient><circle id="',color, '" cx="0" cy="0" r="10" fill="url(#', color, 'LG)"/>'
            ));
        }

        p[2] = '</defs><rect width="100%" height="100%" fill="#222" rx="15" ry="15"/>';
        
        string memory xo = Strings.toString(xPosition(_tokenId));
        string memory yo = Strings.toString((yPosition(_tokenId)));
        p[3] = string(abi.encodePacked('<circle id="F" cx="', xo, '" cy="', yo, '" r="20" fill="#aaa" filter="url(#f)"/>'));

        for(uint256 i = 1; i <= 100; i++){
            if(tokenColor[i] == Color.Black){continue;}
            string memory ref = colorString[tokenColor[i]];
            string memory x = Strings.toString(xPosition(i));
            string memory y = Strings.toString(yPosition(i));
            p[4] = string(abi.encodePacked(p[4],'<use href="#',ref,'" x="',x,'" y="', y,'"/>'));
        }

        p[5] = string(abi.encodePacked(
            '<text x="30" y="25" class="base">NFT News Certification #75</text>',
            '<text x="30" y="45" class="base">ID: ',
            Strings.toString(_tokenId),
            '</text><text x="30" y="65" class="base"> Minter: ',
            tokenSignature[_tokenId],
            '</text></svg>'
        ));
        string memory svg = string(abi.encodePacked(p[0], p[1], p[2], p[3], p[4], p[5]));
        
        string memory meta = string(abi.encodePacked(
            '{"name": "NFTNewsCertfication #',
            Strings.toString(_tokenId),
            '","description": "NFT News Reading Certification.",',
            '"attributes": [{"trait_type":"Color","value":"',
            colorString[tokenColor[_tokenId]],
            '"}],',
            '"image": "data:image/svg+xml;base64,'
        ));
        string memory json = Base64.encode(bytes(string(abi.encodePacked(meta, Base64.encode(bytes(svg)), '"}'))));
        string memory output = string(abi.encodePacked('data:application/json;base64,', json));
        return output;
    }
    function setSwitch(bool _sw) onlyOwner() public {
        sw = _sw;
    }

    function setLimit(uint256 _limit) onlyOwner() public {
        limit = _limit;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"minter","type":"address"},{"indexed":true,"internalType":"string","name":"color","type":"string"},{"indexed":false,"internalType":"string","name":"signature","type":"string"}],"name":"Mint","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getNumberOfAccountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getNumberOfMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"getSignature","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"yourName","type":"string"}],"name":"mintBlue","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"yourName","type":"string"}],"name":"mintGreen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"yourName","type":"string"}],"name":"mintPink","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"yourName","type":"string"}],"name":"mintRed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"yourName","type":"string"}],"name":"mintWhite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"yourName","type":"string"}],"name":"mintYellow","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"uint256","name":"_limit","type":"uint256"}],"name":"setLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_signature","type":"string"}],"name":"setSignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_sw","type":"bool"}],"name":"setSwitch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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"}]

608060405260006007556000600860006101000a81548160ff02191690831515021790555060646009556001600a553480156200003b57600080fd5b5060405162005438380380620054388339818101604052810190620000619190620007b7565b818181600090805190602001906200007b929190620003fd565b50806001908051906020019062000094929190620003fd565b505050620000b7620000ab6200032f60201b60201c565b6200033760201b60201c565b6040518060e001604052806040518060400160405280600581526020017f626c61636b00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f726564000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f626c75650000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f677265656e00000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f79656c6c6f77000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f776869746500000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f70696e6b00000000000000000000000000000000000000000000000000000000815250815250600b9060076200026f9291906200048e565b5060005b600b805490508110156200032657600b81815481106200029857620002976200083c565b5b90600052602060002001600c6000836006811115620002bc57620002bb6200086b565b5b6006811115620002d157620002d06200086b565b5b6006811115620002e657620002e56200086b565b5b81526020019081526020016000209080546200030290620008c9565b6200030f929190620004f5565b5080806200031d9062000938565b91505062000273565b50505062000986565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200040b90620008c9565b90600052602060002090601f0160209004810192826200042f57600085556200047b565b82601f106200044a57805160ff19168380011785556200047b565b828001600101855582156200047b579182015b828111156200047a5782518255916020019190600101906200045d565b5b5090506200048a91906200058d565b5090565b828054828255906000526020600020908101928215620004e2579160200282015b82811115620004e1578251829080519060200190620004d0929190620003fd565b5091602001919060010190620004af565b5b509050620004f19190620005ac565b5090565b8280546200050390620008c9565b90600052602060002090601f0160209004810192826200052757600085556200057a565b82601f106200053a57805485556200057a565b828001600101855582156200057a57600052602060002091601f016020900482015b82811115620005795782548255916001019190600101906200055c565b5b5090506200058991906200058d565b5090565b5b80821115620005a85760008160009055506001016200058e565b5090565b5b80821115620005d05760008181620005c69190620005d4565b50600101620005ad565b5090565b508054620005e290620008c9565b6000825580601f10620005f6575062000617565b601f0160209004906000526020600020908101906200061691906200058d565b5b50565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620006838262000638565b810181811067ffffffffffffffff82111715620006a557620006a462000649565b5b80604052505050565b6000620006ba6200061a565b9050620006c8828262000678565b919050565b600067ffffffffffffffff821115620006eb57620006ea62000649565b5b620006f68262000638565b9050602081019050919050565b60005b838110156200072357808201518184015260208101905062000706565b8381111562000733576000848401525b50505050565b6000620007506200074a84620006cd565b620006ae565b9050828152602081018484840111156200076f576200076e62000633565b5b6200077c84828562000703565b509392505050565b600082601f8301126200079c576200079b6200062e565b5b8151620007ae84826020860162000739565b91505092915050565b60008060408385031215620007d157620007d062000624565b5b600083015167ffffffffffffffff811115620007f257620007f162000629565b5b620008008582860162000784565b925050602083015167ffffffffffffffff81111562000824576200082362000629565b5b620008328582860162000784565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008e257607f821691505b60208210811415620008f957620008f86200089a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b600062000945826200092e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156200097b576200097a620008ff565b5b600182019050919050565b614aa280620009966000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063c6ae9475116100a2578063e93d40cf11610071578063e93d40cf14610500578063e985e9c514610530578063f2fde38b14610560578063f69b85261461057c576101cf565b8063c6ae94751461047c578063c87b56dd14610498578063cdefbb12146104c8578063dcdeb9bd146104e4576101cf565b806397cefc4c116100de57806397cefc4c1461040c578063a22cb46514610428578063b88d4fde14610444578063be4603c314610460576101cf565b80638da5cb5b146103b2578063941ada0e146103d057806395d89b41146103ee576101cf565b8063424294e41161017157806359e5fad61161014b57806359e5fad61461032c5780636352211e1461034857806370a0823114610378578063715018a6146103a8576101cf565b8063424294e4146102d657806342842e0e146102f45780634d79957b14610310576101cf565b8063081812fc116101ad578063081812fc14610252578063095ea7b31461028257806323b872dd1461029e57806327ea6f2b146102ba576101cf565b806301ffc9a7146101d457806302a569e61461020457806306fdde0314610234575b600080fd5b6101ee60048036038101906101e9919061289a565b610598565b6040516101fb91906128e2565b60405180910390f35b61021e60048036038101906102199190612933565b61067a565b60405161022b91906129f9565b60405180910390f35b61023c61071f565b60405161024991906129f9565b60405180910390f35b61026c60048036038101906102679190612933565b6107b1565b6040516102799190612a5c565b60405180910390f35b61029c60048036038101906102979190612aa3565b6107f7565b005b6102b860048036038101906102b39190612ae3565b61090f565b005b6102d460048036038101906102cf9190612933565b61096f565b005b6102de610981565b6040516102eb9190612b45565b60405180910390f35b61030e60048036038101906103099190612ae3565b61098b565b005b61032a60048036038101906103259190612c95565b6109ab565b005b61034660048036038101906103419190612c95565b6109b9565b005b610362600480360381019061035d9190612933565b6109c7565b60405161036f9190612a5c565b60405180910390f35b610392600480360381019061038d9190612cde565b610a79565b60405161039f9190612b45565b60405180910390f35b6103b0610b31565b005b6103ba610b45565b6040516103c79190612a5c565b60405180910390f35b6103d8610b6f565b6040516103e591906128e2565b60405180910390f35b6103f6610b86565b60405161040391906129f9565b60405180910390f35b61042660048036038101906104219190612d37565b610c18565b005b610442600480360381019061043d9190612d64565b610c3d565b005b61045e60048036038101906104599190612e45565b610c53565b005b61047a60048036038101906104759190612c95565b610cb5565b005b61049660048036038101906104919190612c95565b610cc3565b005b6104b260048036038101906104ad9190612933565b610cd1565b6040516104bf91906129f9565b60405180910390f35b6104e260048036038101906104dd9190612c95565b61130a565b005b6104fe60048036038101906104f99190612ec8565b611318565b005b61051a60048036038101906105159190612cde565b6113ba565b6040516105279190612b45565b60405180910390f35b61054a60048036038101906105459190612f24565b611403565b60405161055791906128e2565b60405180910390f35b61057a60048036038101906105759190612cde565b611497565b005b61059660048036038101906105919190612c95565b61151b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610673575061067282611529565b5b9050919050565b6060600e6000838152602001908152602001600020805461069a90612f93565b80601f01602080910402602001604051908101604052809291908181526020018280546106c690612f93565b80156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b50505050509050919050565b60606000805461072e90612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461075a90612f93565b80156107a75780601f1061077c576101008083540402835291602001916107a7565b820191906000526020600020905b81548152906001019060200180831161078a57829003601f168201915b5050505050905090565b60006107bc82611593565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610802826109c7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90613037565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108926115de565b73ffffffffffffffffffffffffffffffffffffffff1614806108c157506108c0816108bb6115de565b611403565b5b610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f7906130c9565b60405180910390fd5b61090a83836115e6565b505050565b61092061091a6115de565b8261169f565b61095f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109569061315b565b60405180910390fd5b61096a838383611734565b505050565b61097761199b565b80600a8190555050565b6000600754905090565b6109a683838360405180602001604052806000815250610c53565b505050565b6109b6600482611a19565b50565b6109c4600282611a19565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a67906131c7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190613259565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b3961199b565b610b436000611cac565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860009054906101000a900460ff16905090565b606060018054610b9590612f93565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190612f93565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b610c2061199b565b80600860006101000a81548160ff02191690831515021790555050565b610c4f610c486115de565b8383611d72565b5050565b610c64610c5e6115de565b8361169f565b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a9061315b565b60405180910390fd5b610caf84848484611edf565b50505050565b610cc0600582611a19565b50565b610cce600182611a19565b50565b6060610cdc82611f3b565b610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d12906132c5565b60405180910390fd5b610d23612764565b604051602001610d32906134de565b60405160208183030381529060405281600060068110610d5557610d54613509565b5b602002018190525060005b600b80549050811015610e88576000600b8281548110610d8357610d82613509565b5b906000526020600020018054610d9890612f93565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612f93565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b5050505050905082600160068110610e2c57610e2b613509565b5b602002015181828384604051602001610e4995949392919061377d565b60405160208183030381529060405283600160068110610e6c57610e6b613509565b5b6020020181905250508080610e8090613839565b915050610d60565b50604051806080016040528060458152602001614a286045913981600260068110610eb657610eb5613509565b5b60200201819052506000610ed1610ecc85611fac565b611ffe565b90506000610ee6610ee18661215f565b611ffe565b90508181604051602001610efb92919061398c565b60405160208183030381529060405283600360068110610f1e57610f1d613509565b5b60200201819052506000600190505b606481116111065760006006811115610f4957610f486139d1565b5b600d600083815260200190815260200160002060009054906101000a900460ff166006811115610f7c57610f7b6139d1565b5b1415610f87576110f3565b6000600c6000600d600085815260200190815260200160002060009054906101000a900460ff166006811115610fc057610fbf6139d1565b5b6006811115610fd257610fd16139d1565b5b81526020019081526020016000208054610feb90612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461101790612f93565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b50505050509050600061107e61107984611fac565b611ffe565b9050600061109361108e8561215f565b611ffe565b9050866004600681106110a9576110a8613509565b5b60200201518383836040516020016110c49493929190613b30565b604051602081830303815290604052876004600681106110e7576110e6613509565b5b60200201819052505050505b80806110fe90613839565b915050610f2d565b5061111085611ffe565b600e6000878152602001908152602001600020604051602001611134929190613df6565b6040516020818303038152906040528360056006811061115757611156613509565b5b602002018190525060008360006006811061117557611174613509565b5b60200201518460016006811061118e5761118d613509565b5b6020020151856002600681106111a7576111a6613509565b5b6020020151866003600681106111c0576111bf613509565b5b6020020151876004600681106111d9576111d8613509565b5b6020020151886005600681106111f2576111f1613509565b5b602002015160405160200161120c96959493929190613e46565b6040516020818303038152906040529050600061122887611ffe565b600c6000600d60008b815260200190815260200160002060009054906101000a900460ff16600681111561125f5761125e6139d1565b5b6006811115611271576112706139d1565b5b815260200190815260200160002060405160200161129092919061408c565b604051602081830303815290604052905060006112d5826112b0856121b1565b6040516020016112c1929190614133565b6040516020818303038152906040526121b1565b90506000816040516020016112ea91906141ae565b604051602081830303815290604052905080975050505050505050919050565b611315600382611a19565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611338836109c7565b73ffffffffffffffffffffffffffffffffffffffff161461138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061421c565b60405180910390fd5b80600e600084815260200190815260200160002090805190602001906113b592919061278b565b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61149f61199b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561150f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611506906142ae565b60405180910390fd5b61151881611cac565b50565b611526600682611a19565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61159c8161232a565b6115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906131c7565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611659836109c7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806116ab836109c7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116ed57506116ec8185611403565b5b8061172b57508373ffffffffffffffffffffffffffffffffffffffff16611713846107b1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611754826109c7565b73ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a190614340565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811906143d2565b60405180910390fd5b611825838383612396565b6118306000826115e6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188091906143f2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d79190614426565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461199683838361239b565b505050565b6119a36115de565b73ffffffffffffffffffffffffffffffffffffffff166119c1610b45565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e906144c8565b60405180910390fd5b565b6000339050600860009054906101000a900460ff16611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490614534565b60405180910390fd5b60095460075410611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa906145a0565b60405180910390fd5b600a54600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d9061460c565b60405180910390fd5b6000611b406123a0565b9050611b4c82826123b6565b82600e60008381526020019081526020016000209080519060200190611b7392919061278b565b5083600d600083815260200190815260200160002060006101000a81548160ff02191690836006811115611baa57611ba96139d1565b5b0217905550600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bff90613839565b9190505550600c6000856006811115611c1b57611c1a6139d1565b5b6006811115611c2d57611c2c6139d1565b5b8152602001908152602001600020604051611c48919061462c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f35a0e34ee6c196b20f530d94282b96d57c4beda09ba5f603fe1baa387661d3c385604051611c9691906129f9565b60405180910390a3611ca6612590565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd89061468f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ed291906128e2565b60405180910390a3505050565b611eea848484611734565b611ef6848484846125aa565b611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90614721565b60405180910390fd5b50505050565b60006001821080611f4d575081600754105b15611f5b5760009050611fa7565b60006006811115611f6f57611f6e6139d1565b5b600d600084815260200190815260200160002060009054906101000a900460ff166006811115611fa257611fa16139d1565b5b141590505b919050565b6000600a601e600c6018600a600187611fc591906143f2565b611fcf9190614770565b611fd991906147a1565b611fe39190614426565b611fed9190614426565b611ff79190614426565b9050919050565b60606000821415612046576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061215a565b600082905060005b6000821461207857808061206190613839565b915050600a8261207191906147fb565b915061204e565b60008167ffffffffffffffff81111561209457612093612b6a565b5b6040519080825280601f01601f1916602001820160405280156120c65781602001600182028036833780820191505090505b5090505b60008514612153576001826120df91906143f2565b9150600a856120ee9190614770565b60306120fa9190614426565b60f81b8183815181106121105761210f613509565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561214c91906147fb565b94506120ca565b8093505050505b919050565b6000600a603c600c6018600a60018761217891906143f2565b61218291906147fb565b61218c91906147a1565b6121969190614426565b6121a09190614426565b6121aa9190614426565b9050919050565b60606000825114156121d457604051806020016040528060008152509050612325565b60006040518060600160405280604081526020016149e860409139905060006003600285516122039190614426565b61220d91906147fb565b600461221991906147a1565b9050600060208261222a9190614426565b67ffffffffffffffff81111561224357612242612b6a565b5b6040519080825280601f01601f1916602001820160405280156122755781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156122e4576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612289565b6003895106600181146122fe576002811461230e57612319565b613d3d60f01b6002830352612319565b603d60f81b60018303525b50505050508093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600060016007546123b19190614426565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d90614878565b60405180910390fd5b61242f8161232a565b1561246f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612466906148e4565b60405180910390fd5b61247b60008383612396565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124cb9190614426565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461258c6000838361239b565b5050565b600760008154809291906125a390613839565b9190505550565b60006125cb8473ffffffffffffffffffffffffffffffffffffffff16612741565b15612734578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f46115de565b8786866040518563ffffffff1660e01b81526004016126169493929190614959565b602060405180830381600087803b15801561263057600080fd5b505af192505050801561266157506040513d601f19601f8201168201806040525081019061265e91906149ba565b60015b6126e4573d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b506000815114156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d390614721565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612739565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060c001604052806006905b60608152602001906001900390816127735790505090565b82805461279790612f93565b90600052602060002090601f0160209004810192826127b95760008555612800565b82601f106127d257805160ff1916838001178555612800565b82800160010185558215612800579182015b828111156127ff5782518255916020019190600101906127e4565b5b50905061280d9190612811565b5090565b5b8082111561282a576000816000905550600101612812565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61287781612842565b811461288257600080fd5b50565b6000813590506128948161286e565b92915050565b6000602082840312156128b0576128af612838565b5b60006128be84828501612885565b91505092915050565b60008115159050919050565b6128dc816128c7565b82525050565b60006020820190506128f760008301846128d3565b92915050565b6000819050919050565b612910816128fd565b811461291b57600080fd5b50565b60008135905061292d81612907565b92915050565b60006020828403121561294957612948612838565b5b60006129578482850161291e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561299a57808201518184015260208101905061297f565b838111156129a9576000848401525b50505050565b6000601f19601f8301169050919050565b60006129cb82612960565b6129d5818561296b565b93506129e581856020860161297c565b6129ee816129af565b840191505092915050565b60006020820190508181036000830152612a1381846129c0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4682612a1b565b9050919050565b612a5681612a3b565b82525050565b6000602082019050612a716000830184612a4d565b92915050565b612a8081612a3b565b8114612a8b57600080fd5b50565b600081359050612a9d81612a77565b92915050565b60008060408385031215612aba57612ab9612838565b5b6000612ac885828601612a8e565b9250506020612ad98582860161291e565b9150509250929050565b600080600060608486031215612afc57612afb612838565b5b6000612b0a86828701612a8e565b9350506020612b1b86828701612a8e565b9250506040612b2c8682870161291e565b9150509250925092565b612b3f816128fd565b82525050565b6000602082019050612b5a6000830184612b36565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ba2826129af565b810181811067ffffffffffffffff82111715612bc157612bc0612b6a565b5b80604052505050565b6000612bd461282e565b9050612be08282612b99565b919050565b600067ffffffffffffffff821115612c0057612bff612b6a565b5b612c09826129af565b9050602081019050919050565b82818337600083830152505050565b6000612c38612c3384612be5565b612bca565b905082815260208101848484011115612c5457612c53612b65565b5b612c5f848285612c16565b509392505050565b600082601f830112612c7c57612c7b612b60565b5b8135612c8c848260208601612c25565b91505092915050565b600060208284031215612cab57612caa612838565b5b600082013567ffffffffffffffff811115612cc957612cc861283d565b5b612cd584828501612c67565b91505092915050565b600060208284031215612cf457612cf3612838565b5b6000612d0284828501612a8e565b91505092915050565b612d14816128c7565b8114612d1f57600080fd5b50565b600081359050612d3181612d0b565b92915050565b600060208284031215612d4d57612d4c612838565b5b6000612d5b84828501612d22565b91505092915050565b60008060408385031215612d7b57612d7a612838565b5b6000612d8985828601612a8e565b9250506020612d9a85828601612d22565b9150509250929050565b600067ffffffffffffffff821115612dbf57612dbe612b6a565b5b612dc8826129af565b9050602081019050919050565b6000612de8612de384612da4565b612bca565b905082815260208101848484011115612e0457612e03612b65565b5b612e0f848285612c16565b509392505050565b600082601f830112612e2c57612e2b612b60565b5b8135612e3c848260208601612dd5565b91505092915050565b60008060008060808587031215612e5f57612e5e612838565b5b6000612e6d87828801612a8e565b9450506020612e7e87828801612a8e565b9350506040612e8f8782880161291e565b925050606085013567ffffffffffffffff811115612eb057612eaf61283d565b5b612ebc87828801612e17565b91505092959194509250565b60008060408385031215612edf57612ede612838565b5b6000612eed8582860161291e565b925050602083013567ffffffffffffffff811115612f0e57612f0d61283d565b5b612f1a85828601612c67565b9150509250929050565b60008060408385031215612f3b57612f3a612838565b5b6000612f4985828601612a8e565b9250506020612f5a85828601612a8e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fab57607f821691505b60208210811415612fbf57612fbe612f64565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061302160218361296b565b915061302c82612fc5565b604082019050919050565b6000602082019050818103600083015261305081613014565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006130b3603e8361296b565b91506130be82613057565b604082019050919050565b600060208201905081810360008301526130e2816130a6565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613145602e8361296b565b9150613150826130e9565b604082019050919050565b6000602082019050818103600083015261317481613138565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006131b160188361296b565b91506131bc8261317b565b602082019050919050565b600060208201905081810360008301526131e0816131a4565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061324360298361296b565b915061324e826131e7565b604082019050919050565b6000602082019050818103600083015261327281613236565b9050919050565b7f746f6b656e4964206d7573742062652065786973740000000000000000000000600082015250565b60006132af60158361296b565b91506132ba82613279565b602082019050919050565b600060208201905081810360008301526132de816132a2565b9050919050565b600081905092915050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060008201527f30302f73766722207072657365727665417370656374526174696f3d22784d6960208201527f6e594d696e206d656574222076696577426f783d22302030203332302033323060408201527f223e000000000000000000000000000000000000000000000000000000000000606082015250565b60006133986062836132e5565b91506133a3826132f0565b606282019050919050565b7f3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e7460008201527f2d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b60208201527f7d3c2f7374796c653e0000000000000000000000000000000000000000000000604082015250565b60006134306049836132e5565b915061343b826133ae565b604982019050919050565b7f3c646566733e3c66696c7465722069643d2266223e3c6665476175737369616e60008201527f426c757220696e3d22536f75726365477261706869632220737464446576696160208201527f74696f6e3d223322202f3e3c2f66696c7465723e000000000000000000000000604082015250565b60006134c86054836132e5565b91506134d382613446565b605482019050919050565b60006134e98261338b565b91506134f482613423565b91506134ff826134bb565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061354382612960565b61354d81856132e5565b935061355d81856020860161297c565b80840191505092915050565b7f3c6c696e6561724772616469656e742069643d22000000000000000000000000600082015250565b600061359f6014836132e5565b91506135aa82613569565b601482019050919050565b7f4c47223e3c73746f70206f66667365743d223025222073746f702d636f6c6f7260008201527f3d22000000000000000000000000000000000000000000000000000000000000602082015250565b60006136116022836132e5565b915061361c826135b5565b602282019050919050565b7f222f3e3c73746f70206f66667365743d2231303025222f3e0000000000000000600082015250565b600061365d6018836132e5565b915061366882613627565b601882019050919050565b7f3c2f6c696e6561724772616469656e743e3c636972636c652069643d22000000600082015250565b60006136a9601d836132e5565b91506136b482613673565b601d82019050919050565b7f222063783d2230222063793d22302220723d223130222066696c6c3d2275726c60008201527f2823000000000000000000000000000000000000000000000000000000000000602082015250565b600061371b6022836132e5565b9150613726826136bf565b602282019050919050565b7f4c4729222f3e0000000000000000000000000000000000000000000000000000600082015250565b60006137676006836132e5565b915061377282613731565b600682019050919050565b60006137898288613538565b915061379482613592565b91506137a08287613538565b91506137ab82613604565b91506137b78286613538565b91506137c282613650565b91506137cd8261369c565b91506137d98285613538565b91506137e48261370e565b91506137f08284613538565b91506137fb8261375a565b91508190509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613844826128fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138775761387661380a565b5b600182019050919050565b7f3c636972636c652069643d2246222063783d2200000000000000000000000000600082015250565b60006138b86013836132e5565b91506138c382613882565b601382019050919050565b7f222063793d220000000000000000000000000000000000000000000000000000600082015250565b60006139046006836132e5565b915061390f826138ce565b600682019050919050565b7f2220723d223230222066696c6c3d2223616161222066696c7465723d2275726c60008201527f28236629222f3e00000000000000000000000000000000000000000000000000602082015250565b60006139766027836132e5565b91506139818261391a565b602782019050919050565b6000613997826138ab565b91506139a38285613538565b91506139ae826138f7565b91506139ba8284613538565b91506139c582613969565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f3c75736520687265663d22230000000000000000000000000000000000000000600082015250565b6000613a36600c836132e5565b9150613a4182613a00565b600c82019050919050565b7f2220783d22000000000000000000000000000000000000000000000000000000600082015250565b6000613a826005836132e5565b9150613a8d82613a4c565b600582019050919050565b7f2220793d22000000000000000000000000000000000000000000000000000000600082015250565b6000613ace6005836132e5565b9150613ad982613a98565b600582019050919050565b7f222f3e0000000000000000000000000000000000000000000000000000000000600082015250565b6000613b1a6003836132e5565b9150613b2582613ae4565b600382019050919050565b6000613b3c8287613538565b9150613b4782613a29565b9150613b538286613538565b9150613b5e82613a75565b9150613b6a8285613538565b9150613b7582613ac1565b9150613b818284613538565b9150613b8c82613b0d565b915081905095945050505050565b7f3c7465787420783d2233302220793d2232352220636c6173733d22626173652260008201527f3e4e4654204e6577732043657274696669636174696f6e202337353c2f74657860208201527f743e000000000000000000000000000000000000000000000000000000000000604082015250565b6000613c1c6042836132e5565b9150613c2782613b9a565b604282019050919050565b7f3c7465787420783d2233302220793d2234352220636c6173733d22626173652260008201527f3e49443a20000000000000000000000000000000000000000000000000000000602082015250565b6000613c8e6025836132e5565b9150613c9982613c32565b602582019050919050565b7f3c2f746578743e3c7465787420783d2233302220793d2236352220636c61737360008201527f3d2262617365223e204d696e7465723a20000000000000000000000000000000602082015250565b6000613d006031836132e5565b9150613d0b82613ca4565b603182019050919050565b60008190508160005260206000209050919050565b60008154613d3881612f93565b613d4281866132e5565b94506001821660008114613d5d5760018114613d6e57613da1565b60ff19831686528186019350613da1565b613d7785613d16565b60005b83811015613d9957815481890152600182019150602081019050613d7a565b838801955050505b50505092915050565b7f3c2f746578743e3c2f7376673e00000000000000000000000000000000000000600082015250565b6000613de0600d836132e5565b9150613deb82613daa565b600d82019050919050565b6000613e0182613c0f565b9150613e0c82613c81565b9150613e188285613538565b9150613e2382613cf3565b9150613e2f8284613d2b565b9150613e3a82613dd3565b91508190509392505050565b6000613e528289613538565b9150613e5e8288613538565b9150613e6a8287613538565b9150613e768286613538565b9150613e828285613538565b9150613e8e8284613538565b9150819050979650505050505050565b7f7b226e616d65223a20224e46544e657773436572746669636174696f6e202300600082015250565b6000613ed4601f836132e5565b9150613edf82613e9e565b601f82019050919050565b7f222c226465736372697074696f6e223a20224e4654204e65777320526561646960008201527f6e672043657274696669636174696f6e2e222c00000000000000000000000000602082015250565b6000613f466033836132e5565b9150613f5182613eea565b603382019050919050565b7f2261747472696275746573223a205b7b2274726169745f74797065223a22436f60008201527f6c6f72222c2276616c7565223a22000000000000000000000000000000000000602082015250565b6000613fb8602e836132e5565b9150613fc382613f5c565b602e82019050919050565b7f227d5d2c00000000000000000000000000000000000000000000000000000000600082015250565b60006140046004836132e5565b915061400f82613fce565b600482019050919050565b7f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360008201527f6536342c00000000000000000000000000000000000000000000000000000000602082015250565b60006140766024836132e5565b91506140818261401a565b602482019050919050565b600061409782613ec7565b91506140a38285613538565b91506140ae82613f39565b91506140b982613fab565b91506140c58284613d2b565b91506140d082613ff7565b91506140db82614069565b91508190509392505050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061411d6002836132e5565b9150614128826140e7565b600282019050919050565b600061413f8285613538565b915061414b8284613538565b915061415682614110565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614198601d836132e5565b91506141a382614162565b601d82019050919050565b60006141b98261418b565b91506141c58284613538565b915081905092915050565b7f4f6e6c79206f776e65722063616e20736574207369676e617475726500000000600082015250565b6000614206601c8361296b565b9150614211826141d0565b602082019050919050565b60006020820190508181036000830152614235816141f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061429860268361296b565b91506142a38261423c565b604082019050919050565b600060208201905081810360008301526142c78161428b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061432a60258361296b565b9150614335826142ce565b604082019050919050565b600060208201905081810360008301526143598161431d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143bc60248361296b565b91506143c782614360565b604082019050919050565b600060208201905081810360008301526143eb816143af565b9050919050565b60006143fd826128fd565b9150614408836128fd565b92508282101561441b5761441a61380a565b5b828203905092915050565b6000614431826128fd565b915061443c836128fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144715761447061380a565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144b260208361296b565b91506144bd8261447c565b602082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b7f4d696e74696e672077696e646f77206973206e6f74206f70656e000000000000600082015250565b600061451e601a8361296b565b9150614529826144e8565b602082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f546f6b656e20616d6f756e742069732066756c6c290000000000000000000000600082015250565b600061458a60158361296b565b915061459582614554565b602082019050919050565b600060208201905081810360008301526145b98161457d565b9050919050565b7f596f752072656163686564206d696e74206c696d697400000000000000000000600082015250565b60006145f660168361296b565b9150614601826145c0565b602082019050919050565b60006020820190508181036000830152614625816145e9565b9050919050565b60006146388284613d2b565b915081905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061467960198361296b565b915061468482614643565b602082019050919050565b600060208201905081810360008301526146a88161466c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061470b60328361296b565b9150614716826146af565b604082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061477b826128fd565b9150614786836128fd565b92508261479657614795614741565b5b828206905092915050565b60006147ac826128fd565b91506147b7836128fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f0576147ef61380a565b5b828202905092915050565b6000614806826128fd565b9150614811836128fd565b92508261482157614820614741565b5b828204905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061486260208361296b565b915061486d8261482c565b602082019050919050565b6000602082019050818103600083015261489181614855565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006148ce601c8361296b565b91506148d982614898565b602082019050919050565b600060208201905081810360008301526148fd816148c1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061492b82614904565b614935818561490f565b935061494581856020860161297c565b61494e816129af565b840191505092915050565b600060808201905061496e6000830187612a4d565b61497b6020830186612a4d565b6149886040830185612b36565b818103606083015261499a8184614920565b905095945050505050565b6000815190506149b48161286e565b92915050565b6000602082840312156149d0576149cf612838565b5b60006149de848285016149a5565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f646566733e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d2223323232222072783d223135222072793d223135222f3ea2646970667358221220e146994601cc2739db51e3225a92d4d02976565b9afd322316c79c527a5c74e064736f6c6343000809003300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d4e46544e6577734365727437350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e4e433735000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c80638da5cb5b11610104578063c6ae9475116100a2578063e93d40cf11610071578063e93d40cf14610500578063e985e9c514610530578063f2fde38b14610560578063f69b85261461057c576101cf565b8063c6ae94751461047c578063c87b56dd14610498578063cdefbb12146104c8578063dcdeb9bd146104e4576101cf565b806397cefc4c116100de57806397cefc4c1461040c578063a22cb46514610428578063b88d4fde14610444578063be4603c314610460576101cf565b80638da5cb5b146103b2578063941ada0e146103d057806395d89b41146103ee576101cf565b8063424294e41161017157806359e5fad61161014b57806359e5fad61461032c5780636352211e1461034857806370a0823114610378578063715018a6146103a8576101cf565b8063424294e4146102d657806342842e0e146102f45780634d79957b14610310576101cf565b8063081812fc116101ad578063081812fc14610252578063095ea7b31461028257806323b872dd1461029e57806327ea6f2b146102ba576101cf565b806301ffc9a7146101d457806302a569e61461020457806306fdde0314610234575b600080fd5b6101ee60048036038101906101e9919061289a565b610598565b6040516101fb91906128e2565b60405180910390f35b61021e60048036038101906102199190612933565b61067a565b60405161022b91906129f9565b60405180910390f35b61023c61071f565b60405161024991906129f9565b60405180910390f35b61026c60048036038101906102679190612933565b6107b1565b6040516102799190612a5c565b60405180910390f35b61029c60048036038101906102979190612aa3565b6107f7565b005b6102b860048036038101906102b39190612ae3565b61090f565b005b6102d460048036038101906102cf9190612933565b61096f565b005b6102de610981565b6040516102eb9190612b45565b60405180910390f35b61030e60048036038101906103099190612ae3565b61098b565b005b61032a60048036038101906103259190612c95565b6109ab565b005b61034660048036038101906103419190612c95565b6109b9565b005b610362600480360381019061035d9190612933565b6109c7565b60405161036f9190612a5c565b60405180910390f35b610392600480360381019061038d9190612cde565b610a79565b60405161039f9190612b45565b60405180910390f35b6103b0610b31565b005b6103ba610b45565b6040516103c79190612a5c565b60405180910390f35b6103d8610b6f565b6040516103e591906128e2565b60405180910390f35b6103f6610b86565b60405161040391906129f9565b60405180910390f35b61042660048036038101906104219190612d37565b610c18565b005b610442600480360381019061043d9190612d64565b610c3d565b005b61045e60048036038101906104599190612e45565b610c53565b005b61047a60048036038101906104759190612c95565b610cb5565b005b61049660048036038101906104919190612c95565b610cc3565b005b6104b260048036038101906104ad9190612933565b610cd1565b6040516104bf91906129f9565b60405180910390f35b6104e260048036038101906104dd9190612c95565b61130a565b005b6104fe60048036038101906104f99190612ec8565b611318565b005b61051a60048036038101906105159190612cde565b6113ba565b6040516105279190612b45565b60405180910390f35b61054a60048036038101906105459190612f24565b611403565b60405161055791906128e2565b60405180910390f35b61057a60048036038101906105759190612cde565b611497565b005b61059660048036038101906105919190612c95565b61151b565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061066357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610673575061067282611529565b5b9050919050565b6060600e6000838152602001908152602001600020805461069a90612f93565b80601f01602080910402602001604051908101604052809291908181526020018280546106c690612f93565b80156107135780601f106106e857610100808354040283529160200191610713565b820191906000526020600020905b8154815290600101906020018083116106f657829003601f168201915b50505050509050919050565b60606000805461072e90612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461075a90612f93565b80156107a75780601f1061077c576101008083540402835291602001916107a7565b820191906000526020600020905b81548152906001019060200180831161078a57829003601f168201915b5050505050905090565b60006107bc82611593565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610802826109c7565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90613037565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108926115de565b73ffffffffffffffffffffffffffffffffffffffff1614806108c157506108c0816108bb6115de565b611403565b5b610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f7906130c9565b60405180910390fd5b61090a83836115e6565b505050565b61092061091a6115de565b8261169f565b61095f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109569061315b565b60405180910390fd5b61096a838383611734565b505050565b61097761199b565b80600a8190555050565b6000600754905090565b6109a683838360405180602001604052806000815250610c53565b505050565b6109b6600482611a19565b50565b6109c4600282611a19565b50565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a67906131c7565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610aea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae190613259565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b3961199b565b610b436000611cac565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600860009054906101000a900460ff16905090565b606060018054610b9590612f93565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc190612f93565b8015610c0e5780601f10610be357610100808354040283529160200191610c0e565b820191906000526020600020905b815481529060010190602001808311610bf157829003601f168201915b5050505050905090565b610c2061199b565b80600860006101000a81548160ff02191690831515021790555050565b610c4f610c486115de565b8383611d72565b5050565b610c64610c5e6115de565b8361169f565b610ca3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9a9061315b565b60405180910390fd5b610caf84848484611edf565b50505050565b610cc0600582611a19565b50565b610cce600182611a19565b50565b6060610cdc82611f3b565b610d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d12906132c5565b60405180910390fd5b610d23612764565b604051602001610d32906134de565b60405160208183030381529060405281600060068110610d5557610d54613509565b5b602002018190525060005b600b80549050811015610e88576000600b8281548110610d8357610d82613509565b5b906000526020600020018054610d9890612f93565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc490612f93565b8015610e115780601f10610de657610100808354040283529160200191610e11565b820191906000526020600020905b815481529060010190602001808311610df457829003601f168201915b5050505050905082600160068110610e2c57610e2b613509565b5b602002015181828384604051602001610e4995949392919061377d565b60405160208183030381529060405283600160068110610e6c57610e6b613509565b5b6020020181905250508080610e8090613839565b915050610d60565b50604051806080016040528060458152602001614a286045913981600260068110610eb657610eb5613509565b5b60200201819052506000610ed1610ecc85611fac565b611ffe565b90506000610ee6610ee18661215f565b611ffe565b90508181604051602001610efb92919061398c565b60405160208183030381529060405283600360068110610f1e57610f1d613509565b5b60200201819052506000600190505b606481116111065760006006811115610f4957610f486139d1565b5b600d600083815260200190815260200160002060009054906101000a900460ff166006811115610f7c57610f7b6139d1565b5b1415610f87576110f3565b6000600c6000600d600085815260200190815260200160002060009054906101000a900460ff166006811115610fc057610fbf6139d1565b5b6006811115610fd257610fd16139d1565b5b81526020019081526020016000208054610feb90612f93565b80601f016020809104026020016040519081016040528092919081815260200182805461101790612f93565b80156110645780601f1061103957610100808354040283529160200191611064565b820191906000526020600020905b81548152906001019060200180831161104757829003601f168201915b50505050509050600061107e61107984611fac565b611ffe565b9050600061109361108e8561215f565b611ffe565b9050866004600681106110a9576110a8613509565b5b60200201518383836040516020016110c49493929190613b30565b604051602081830303815290604052876004600681106110e7576110e6613509565b5b60200201819052505050505b80806110fe90613839565b915050610f2d565b5061111085611ffe565b600e6000878152602001908152602001600020604051602001611134929190613df6565b6040516020818303038152906040528360056006811061115757611156613509565b5b602002018190525060008360006006811061117557611174613509565b5b60200201518460016006811061118e5761118d613509565b5b6020020151856002600681106111a7576111a6613509565b5b6020020151866003600681106111c0576111bf613509565b5b6020020151876004600681106111d9576111d8613509565b5b6020020151886005600681106111f2576111f1613509565b5b602002015160405160200161120c96959493929190613e46565b6040516020818303038152906040529050600061122887611ffe565b600c6000600d60008b815260200190815260200160002060009054906101000a900460ff16600681111561125f5761125e6139d1565b5b6006811115611271576112706139d1565b5b815260200190815260200160002060405160200161129092919061408c565b604051602081830303815290604052905060006112d5826112b0856121b1565b6040516020016112c1929190614133565b6040516020818303038152906040526121b1565b90506000816040516020016112ea91906141ae565b604051602081830303815290604052905080975050505050505050919050565b611315600382611a19565b50565b3373ffffffffffffffffffffffffffffffffffffffff16611338836109c7565b73ffffffffffffffffffffffffffffffffffffffff161461138e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113859061421c565b60405180910390fd5b80600e600084815260200190815260200160002090805190602001906113b592919061278b565b505050565b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61149f61199b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561150f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611506906142ae565b60405180910390fd5b61151881611cac565b50565b611526600682611a19565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61159c8161232a565b6115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906131c7565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611659836109c7565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000806116ab836109c7565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806116ed57506116ec8185611403565b5b8061172b57508373ffffffffffffffffffffffffffffffffffffffff16611713846107b1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611754826109c7565b73ffffffffffffffffffffffffffffffffffffffff16146117aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a190614340565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561181a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611811906143d2565b60405180910390fd5b611825838383612396565b6118306000826115e6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461188091906143f2565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118d79190614426565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461199683838361239b565b505050565b6119a36115de565b73ffffffffffffffffffffffffffffffffffffffff166119c1610b45565b73ffffffffffffffffffffffffffffffffffffffff1614611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e906144c8565b60405180910390fd5b565b6000339050600860009054906101000a900460ff16611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490614534565b60405180910390fd5b60095460075410611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa906145a0565b60405180910390fd5b600a54600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410611b36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2d9061460c565b60405180910390fd5b6000611b406123a0565b9050611b4c82826123b6565b82600e60008381526020019081526020016000209080519060200190611b7392919061278b565b5083600d600083815260200190815260200160002060006101000a81548160ff02191690836006811115611baa57611ba96139d1565b5b0217905550600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bff90613839565b9190505550600c6000856006811115611c1b57611c1a6139d1565b5b6006811115611c2d57611c2c6139d1565b5b8152602001908152602001600020604051611c48919061462c565b60405180910390203373ffffffffffffffffffffffffffffffffffffffff167f35a0e34ee6c196b20f530d94282b96d57c4beda09ba5f603fe1baa387661d3c385604051611c9691906129f9565b60405180910390a3611ca6612590565b50505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd89061468f565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ed291906128e2565b60405180910390a3505050565b611eea848484611734565b611ef6848484846125aa565b611f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2c90614721565b60405180910390fd5b50505050565b60006001821080611f4d575081600754105b15611f5b5760009050611fa7565b60006006811115611f6f57611f6e6139d1565b5b600d600084815260200190815260200160002060009054906101000a900460ff166006811115611fa257611fa16139d1565b5b141590505b919050565b6000600a601e600c6018600a600187611fc591906143f2565b611fcf9190614770565b611fd991906147a1565b611fe39190614426565b611fed9190614426565b611ff79190614426565b9050919050565b60606000821415612046576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061215a565b600082905060005b6000821461207857808061206190613839565b915050600a8261207191906147fb565b915061204e565b60008167ffffffffffffffff81111561209457612093612b6a565b5b6040519080825280601f01601f1916602001820160405280156120c65781602001600182028036833780820191505090505b5090505b60008514612153576001826120df91906143f2565b9150600a856120ee9190614770565b60306120fa9190614426565b60f81b8183815181106121105761210f613509565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561214c91906147fb565b94506120ca565b8093505050505b919050565b6000600a603c600c6018600a60018761217891906143f2565b61218291906147fb565b61218c91906147a1565b6121969190614426565b6121a09190614426565b6121aa9190614426565b9050919050565b60606000825114156121d457604051806020016040528060008152509050612325565b60006040518060600160405280604081526020016149e860409139905060006003600285516122039190614426565b61220d91906147fb565b600461221991906147a1565b9050600060208261222a9190614426565b67ffffffffffffffff81111561224357612242612b6a565b5b6040519080825280601f01601f1916602001820160405280156122755781602001600182028036833780820191505090505b509050818152600183018586518101602084015b818310156122e4576003830192508251603f8160121c168501518253600182019150603f81600c1c168501518253600182019150603f8160061c168501518253600182019150603f8116850151825360018201915050612289565b6003895106600181146122fe576002811461230e57612319565b613d3d60f01b6002830352612319565b603d60f81b60018303525b50505050508093505050505b919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b505050565b505050565b600060016007546123b19190614426565b905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612426576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241d90614878565b60405180910390fd5b61242f8161232a565b1561246f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612466906148e4565b60405180910390fd5b61247b60008383612396565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124cb9190614426565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461258c6000838361239b565b5050565b600760008154809291906125a390613839565b9190505550565b60006125cb8473ffffffffffffffffffffffffffffffffffffffff16612741565b15612734578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f46115de565b8786866040518563ffffffff1660e01b81526004016126169493929190614959565b602060405180830381600087803b15801561263057600080fd5b505af192505050801561266157506040513d601f19601f8201168201806040525081019061265e91906149ba565b60015b6126e4573d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b506000815114156126dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d390614721565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612739565b600190505b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6040518060c001604052806006905b60608152602001906001900390816127735790505090565b82805461279790612f93565b90600052602060002090601f0160209004810192826127b95760008555612800565b82601f106127d257805160ff1916838001178555612800565b82800160010185558215612800579182015b828111156127ff5782518255916020019190600101906127e4565b5b50905061280d9190612811565b5090565b5b8082111561282a576000816000905550600101612812565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61287781612842565b811461288257600080fd5b50565b6000813590506128948161286e565b92915050565b6000602082840312156128b0576128af612838565b5b60006128be84828501612885565b91505092915050565b60008115159050919050565b6128dc816128c7565b82525050565b60006020820190506128f760008301846128d3565b92915050565b6000819050919050565b612910816128fd565b811461291b57600080fd5b50565b60008135905061292d81612907565b92915050565b60006020828403121561294957612948612838565b5b60006129578482850161291e565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561299a57808201518184015260208101905061297f565b838111156129a9576000848401525b50505050565b6000601f19601f8301169050919050565b60006129cb82612960565b6129d5818561296b565b93506129e581856020860161297c565b6129ee816129af565b840191505092915050565b60006020820190508181036000830152612a1381846129c0565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4682612a1b565b9050919050565b612a5681612a3b565b82525050565b6000602082019050612a716000830184612a4d565b92915050565b612a8081612a3b565b8114612a8b57600080fd5b50565b600081359050612a9d81612a77565b92915050565b60008060408385031215612aba57612ab9612838565b5b6000612ac885828601612a8e565b9250506020612ad98582860161291e565b9150509250929050565b600080600060608486031215612afc57612afb612838565b5b6000612b0a86828701612a8e565b9350506020612b1b86828701612a8e565b9250506040612b2c8682870161291e565b9150509250925092565b612b3f816128fd565b82525050565b6000602082019050612b5a6000830184612b36565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612ba2826129af565b810181811067ffffffffffffffff82111715612bc157612bc0612b6a565b5b80604052505050565b6000612bd461282e565b9050612be08282612b99565b919050565b600067ffffffffffffffff821115612c0057612bff612b6a565b5b612c09826129af565b9050602081019050919050565b82818337600083830152505050565b6000612c38612c3384612be5565b612bca565b905082815260208101848484011115612c5457612c53612b65565b5b612c5f848285612c16565b509392505050565b600082601f830112612c7c57612c7b612b60565b5b8135612c8c848260208601612c25565b91505092915050565b600060208284031215612cab57612caa612838565b5b600082013567ffffffffffffffff811115612cc957612cc861283d565b5b612cd584828501612c67565b91505092915050565b600060208284031215612cf457612cf3612838565b5b6000612d0284828501612a8e565b91505092915050565b612d14816128c7565b8114612d1f57600080fd5b50565b600081359050612d3181612d0b565b92915050565b600060208284031215612d4d57612d4c612838565b5b6000612d5b84828501612d22565b91505092915050565b60008060408385031215612d7b57612d7a612838565b5b6000612d8985828601612a8e565b9250506020612d9a85828601612d22565b9150509250929050565b600067ffffffffffffffff821115612dbf57612dbe612b6a565b5b612dc8826129af565b9050602081019050919050565b6000612de8612de384612da4565b612bca565b905082815260208101848484011115612e0457612e03612b65565b5b612e0f848285612c16565b509392505050565b600082601f830112612e2c57612e2b612b60565b5b8135612e3c848260208601612dd5565b91505092915050565b60008060008060808587031215612e5f57612e5e612838565b5b6000612e6d87828801612a8e565b9450506020612e7e87828801612a8e565b9350506040612e8f8782880161291e565b925050606085013567ffffffffffffffff811115612eb057612eaf61283d565b5b612ebc87828801612e17565b91505092959194509250565b60008060408385031215612edf57612ede612838565b5b6000612eed8582860161291e565b925050602083013567ffffffffffffffff811115612f0e57612f0d61283d565b5b612f1a85828601612c67565b9150509250929050565b60008060408385031215612f3b57612f3a612838565b5b6000612f4985828601612a8e565b9250506020612f5a85828601612a8e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612fab57607f821691505b60208210811415612fbf57612fbe612f64565b5b50919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061302160218361296b565b915061302c82612fc5565b604082019050919050565b6000602082019050818103600083015261305081613014565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b60006130b3603e8361296b565b91506130be82613057565b604082019050919050565b600060208201905081810360008301526130e2816130a6565b9050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b6000613145602e8361296b565b9150613150826130e9565b604082019050919050565b6000602082019050818103600083015261317481613138565b9050919050565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b60006131b160188361296b565b91506131bc8261317b565b602082019050919050565b600060208201905081810360008301526131e0816131a4565b9050919050565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b600061324360298361296b565b915061324e826131e7565b604082019050919050565b6000602082019050818103600083015261327281613236565b9050919050565b7f746f6b656e4964206d7573742062652065786973740000000000000000000000600082015250565b60006132af60158361296b565b91506132ba82613279565b602082019050919050565b600060208201905081810360008301526132de816132a2565b9050919050565b600081905092915050565b7f3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323060008201527f30302f73766722207072657365727665417370656374526174696f3d22784d6960208201527f6e594d696e206d656574222076696577426f783d22302030203332302033323060408201527f223e000000000000000000000000000000000000000000000000000000000000606082015250565b60006133986062836132e5565b91506133a3826132f0565b606282019050919050565b7f3c7374796c653e2e62617365207b2066696c6c3a2077686974653b20666f6e7460008201527f2d66616d696c793a2073657269663b20666f6e742d73697a653a20313470783b60208201527f7d3c2f7374796c653e0000000000000000000000000000000000000000000000604082015250565b60006134306049836132e5565b915061343b826133ae565b604982019050919050565b7f3c646566733e3c66696c7465722069643d2266223e3c6665476175737369616e60008201527f426c757220696e3d22536f75726365477261706869632220737464446576696160208201527f74696f6e3d223322202f3e3c2f66696c7465723e000000000000000000000000604082015250565b60006134c86054836132e5565b91506134d382613446565b605482019050919050565b60006134e98261338b565b91506134f482613423565b91506134ff826134bb565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061354382612960565b61354d81856132e5565b935061355d81856020860161297c565b80840191505092915050565b7f3c6c696e6561724772616469656e742069643d22000000000000000000000000600082015250565b600061359f6014836132e5565b91506135aa82613569565b601482019050919050565b7f4c47223e3c73746f70206f66667365743d223025222073746f702d636f6c6f7260008201527f3d22000000000000000000000000000000000000000000000000000000000000602082015250565b60006136116022836132e5565b915061361c826135b5565b602282019050919050565b7f222f3e3c73746f70206f66667365743d2231303025222f3e0000000000000000600082015250565b600061365d6018836132e5565b915061366882613627565b601882019050919050565b7f3c2f6c696e6561724772616469656e743e3c636972636c652069643d22000000600082015250565b60006136a9601d836132e5565b91506136b482613673565b601d82019050919050565b7f222063783d2230222063793d22302220723d223130222066696c6c3d2275726c60008201527f2823000000000000000000000000000000000000000000000000000000000000602082015250565b600061371b6022836132e5565b9150613726826136bf565b602282019050919050565b7f4c4729222f3e0000000000000000000000000000000000000000000000000000600082015250565b60006137676006836132e5565b915061377282613731565b600682019050919050565b60006137898288613538565b915061379482613592565b91506137a08287613538565b91506137ab82613604565b91506137b78286613538565b91506137c282613650565b91506137cd8261369c565b91506137d98285613538565b91506137e48261370e565b91506137f08284613538565b91506137fb8261375a565b91508190509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613844826128fd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138775761387661380a565b5b600182019050919050565b7f3c636972636c652069643d2246222063783d2200000000000000000000000000600082015250565b60006138b86013836132e5565b91506138c382613882565b601382019050919050565b7f222063793d220000000000000000000000000000000000000000000000000000600082015250565b60006139046006836132e5565b915061390f826138ce565b600682019050919050565b7f2220723d223230222066696c6c3d2223616161222066696c7465723d2275726c60008201527f28236629222f3e00000000000000000000000000000000000000000000000000602082015250565b60006139766027836132e5565b91506139818261391a565b602782019050919050565b6000613997826138ab565b91506139a38285613538565b91506139ae826138f7565b91506139ba8284613538565b91506139c582613969565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f3c75736520687265663d22230000000000000000000000000000000000000000600082015250565b6000613a36600c836132e5565b9150613a4182613a00565b600c82019050919050565b7f2220783d22000000000000000000000000000000000000000000000000000000600082015250565b6000613a826005836132e5565b9150613a8d82613a4c565b600582019050919050565b7f2220793d22000000000000000000000000000000000000000000000000000000600082015250565b6000613ace6005836132e5565b9150613ad982613a98565b600582019050919050565b7f222f3e0000000000000000000000000000000000000000000000000000000000600082015250565b6000613b1a6003836132e5565b9150613b2582613ae4565b600382019050919050565b6000613b3c8287613538565b9150613b4782613a29565b9150613b538286613538565b9150613b5e82613a75565b9150613b6a8285613538565b9150613b7582613ac1565b9150613b818284613538565b9150613b8c82613b0d565b915081905095945050505050565b7f3c7465787420783d2233302220793d2232352220636c6173733d22626173652260008201527f3e4e4654204e6577732043657274696669636174696f6e202337353c2f74657860208201527f743e000000000000000000000000000000000000000000000000000000000000604082015250565b6000613c1c6042836132e5565b9150613c2782613b9a565b604282019050919050565b7f3c7465787420783d2233302220793d2234352220636c6173733d22626173652260008201527f3e49443a20000000000000000000000000000000000000000000000000000000602082015250565b6000613c8e6025836132e5565b9150613c9982613c32565b602582019050919050565b7f3c2f746578743e3c7465787420783d2233302220793d2236352220636c61737360008201527f3d2262617365223e204d696e7465723a20000000000000000000000000000000602082015250565b6000613d006031836132e5565b9150613d0b82613ca4565b603182019050919050565b60008190508160005260206000209050919050565b60008154613d3881612f93565b613d4281866132e5565b94506001821660008114613d5d5760018114613d6e57613da1565b60ff19831686528186019350613da1565b613d7785613d16565b60005b83811015613d9957815481890152600182019150602081019050613d7a565b838801955050505b50505092915050565b7f3c2f746578743e3c2f7376673e00000000000000000000000000000000000000600082015250565b6000613de0600d836132e5565b9150613deb82613daa565b600d82019050919050565b6000613e0182613c0f565b9150613e0c82613c81565b9150613e188285613538565b9150613e2382613cf3565b9150613e2f8284613d2b565b9150613e3a82613dd3565b91508190509392505050565b6000613e528289613538565b9150613e5e8288613538565b9150613e6a8287613538565b9150613e768286613538565b9150613e828285613538565b9150613e8e8284613538565b9150819050979650505050505050565b7f7b226e616d65223a20224e46544e657773436572746669636174696f6e202300600082015250565b6000613ed4601f836132e5565b9150613edf82613e9e565b601f82019050919050565b7f222c226465736372697074696f6e223a20224e4654204e65777320526561646960008201527f6e672043657274696669636174696f6e2e222c00000000000000000000000000602082015250565b6000613f466033836132e5565b9150613f5182613eea565b603382019050919050565b7f2261747472696275746573223a205b7b2274726169745f74797065223a22436f60008201527f6c6f72222c2276616c7565223a22000000000000000000000000000000000000602082015250565b6000613fb8602e836132e5565b9150613fc382613f5c565b602e82019050919050565b7f227d5d2c00000000000000000000000000000000000000000000000000000000600082015250565b60006140046004836132e5565b915061400f82613fce565b600482019050919050565b7f22696d616765223a2022646174613a696d6167652f7376672b786d6c3b62617360008201527f6536342c00000000000000000000000000000000000000000000000000000000602082015250565b60006140766024836132e5565b91506140818261401a565b602482019050919050565b600061409782613ec7565b91506140a38285613538565b91506140ae82613f39565b91506140b982613fab565b91506140c58284613d2b565b91506140d082613ff7565b91506140db82614069565b91508190509392505050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b600061411d6002836132e5565b9150614128826140e7565b600282019050919050565b600061413f8285613538565b915061414b8284613538565b915061415682614110565b91508190509392505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614198601d836132e5565b91506141a382614162565b601d82019050919050565b60006141b98261418b565b91506141c58284613538565b915081905092915050565b7f4f6e6c79206f776e65722063616e20736574207369676e617475726500000000600082015250565b6000614206601c8361296b565b9150614211826141d0565b602082019050919050565b60006020820190508181036000830152614235816141f9565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061429860268361296b565b91506142a38261423c565b604082019050919050565b600060208201905081810360008301526142c78161428b565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b600061432a60258361296b565b9150614335826142ce565b604082019050919050565b600060208201905081810360008301526143598161431d565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006143bc60248361296b565b91506143c782614360565b604082019050919050565b600060208201905081810360008301526143eb816143af565b9050919050565b60006143fd826128fd565b9150614408836128fd565b92508282101561441b5761441a61380a565b5b828203905092915050565b6000614431826128fd565b915061443c836128fd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156144715761447061380a565b5b828201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144b260208361296b565b91506144bd8261447c565b602082019050919050565b600060208201905081810360008301526144e1816144a5565b9050919050565b7f4d696e74696e672077696e646f77206973206e6f74206f70656e000000000000600082015250565b600061451e601a8361296b565b9150614529826144e8565b602082019050919050565b6000602082019050818103600083015261454d81614511565b9050919050565b7f546f6b656e20616d6f756e742069732066756c6c290000000000000000000000600082015250565b600061458a60158361296b565b915061459582614554565b602082019050919050565b600060208201905081810360008301526145b98161457d565b9050919050565b7f596f752072656163686564206d696e74206c696d697400000000000000000000600082015250565b60006145f660168361296b565b9150614601826145c0565b602082019050919050565b60006020820190508181036000830152614625816145e9565b9050919050565b60006146388284613d2b565b915081905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b600061467960198361296b565b915061468482614643565b602082019050919050565b600060208201905081810360008301526146a88161466c565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b600061470b60328361296b565b9150614716826146af565b604082019050919050565b6000602082019050818103600083015261473a816146fe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061477b826128fd565b9150614786836128fd565b92508261479657614795614741565b5b828206905092915050565b60006147ac826128fd565b91506147b7836128fd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156147f0576147ef61380a565b5b828202905092915050565b6000614806826128fd565b9150614811836128fd565b92508261482157614820614741565b5b828204905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061486260208361296b565b915061486d8261482c565b602082019050919050565b6000602082019050818103600083015261489181614855565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006148ce601c8361296b565b91506148d982614898565b602082019050919050565b600060208201905081810360008301526148fd816148c1565b9050919050565b600081519050919050565b600082825260208201905092915050565b600061492b82614904565b614935818561490f565b935061494581856020860161297c565b61494e816129af565b840191505092915050565b600060808201905061496e6000830187612a4d565b61497b6020830186612a4d565b6149886040830185612b36565b818103606083015261499a8184614920565b905095945050505050565b6000815190506149b48161286e565b92915050565b6000602082840312156149d0576149cf612838565b5b60006149de848285016149a5565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3c2f646566733e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d2223323232222072783d223135222072793d223135222f3ea2646970667358221220e146994601cc2739db51e3225a92d4d02976565b9afd322316c79c527a5c74e064736f6c63430008090033

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

00000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000d4e46544e6577734365727437350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000054e4e433735000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): NFTNewsCert75
Arg [1] : _symbol (string): NNC75

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [3] : 4e46544e65777343657274373500000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [5] : 4e4e433735000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38125:6464:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24928:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39587:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25855:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27368:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26885:417;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28068:336;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44500:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39391:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28475:185;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40246:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40042:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25566:222;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25297:207;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17749:103;;;:::i;:::-;;17101:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39499:80;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26024:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44417:75;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27611:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28731:323;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40351:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39941:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41546:2865;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40143:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39721:212;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39254:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27837:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18007:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40454:95;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24928:305;25030:4;25082:25;25067:40;;;:11;:40;;;;:105;;;;25139:33;25124:48;;;:11;:48;;;;25067:105;:158;;;;25189:36;25213:11;25189:23;:36::i;:::-;25067:158;25047:178;;24928:305;;;:::o;39587:126::-;39648:13;39681:14;:24;39696:8;39681:24;;;;;;;;;;;39674:31;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39587:126;;;:::o;25855:100::-;25909:13;25942:5;25935:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25855:100;:::o;27368:171::-;27444:7;27464:23;27479:7;27464:14;:23::i;:::-;27507:15;:24;27523:7;27507:24;;;;;;;;;;;;;;;;;;;;;27500:31;;27368:171;;;:::o;26885:417::-;26966:13;26982:23;26997:7;26982:14;:23::i;:::-;26966:39;;27030:5;27024:11;;:2;:11;;;;27016:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27124:5;27108:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27133:37;27150:5;27157:12;:10;:12::i;:::-;27133:16;:37::i;:::-;27108:62;27086:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;27273:21;27282:2;27286:7;27273:8;:21::i;:::-;26955:347;26885:417;;:::o;28068:336::-;28263:41;28282:12;:10;:12::i;:::-;28296:7;28263:18;:41::i;:::-;28255:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;28368:28;28378:4;28384:2;28388:7;28368:9;:28::i;:::-;28068:336;;;:::o;44500:86::-;16987:13;:11;:13::i;:::-;44572:6:::1;44564:5;:14;;;;44500:86:::0;:::o;39391:100::-;39441:7;39468:14;;39461:21;;39391:100;:::o;28475:185::-;28613:39;28630:4;28636:2;28640:7;28613:39;;;;;;;;;;;;:16;:39::i;:::-;28475:185;;;:::o;40246:99::-;40307:30;40314:12;40328:8;40307:6;:30::i;:::-;40246:99;:::o;40042:95::-;40101:28;40108:10;40120:8;40101:6;:28::i;:::-;40042:95;:::o;25566:222::-;25638:7;25658:13;25674:7;:16;25682:7;25674:16;;;;;;;;;;;;;;;;;;;;;25658:32;;25726:1;25709:19;;:5;:19;;;;25701:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;25775:5;25768:12;;;25566:222;;;:::o;25297:207::-;25369:7;25414:1;25397:19;;:5;:19;;;;25389:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25480:9;:16;25490:5;25480:16;;;;;;;;;;;;;;;;25473:23;;25297:207;;;:::o;17749:103::-;16987:13;:11;:13::i;:::-;17814:30:::1;17841:1;17814:18;:30::i;:::-;17749:103::o:0;17101:87::-;17147:7;17174:6;;;;;;;;;;;17167:13;;17101:87;:::o;39499:80::-;39545:4;39569:2;;;;;;;;;;;39562:9;;39499:80;:::o;26024:104::-;26080:13;26113:7;26106:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26024:104;:::o;44417:75::-;16987:13;:11;:13::i;:::-;44481:3:::1;44476:2;;:8;;;;;;;;;;;;;;;;;;44417:75:::0;:::o;27611:155::-;27706:52;27725:12;:10;:12::i;:::-;27739:8;27749;27706:18;:52::i;:::-;27611:155;;:::o;28731:323::-;28905:41;28924:12;:10;:12::i;:::-;28938:7;28905:18;:41::i;:::-;28897:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;29008:38;29022:4;29028:2;29032:7;29041:4;29008:13;:38::i;:::-;28731:323;;;;:::o;40351:97::-;40411:29;40418:11;40431:8;40411:6;:29::i;:::-;40351:97;:::o;39941:95::-;40000:28;40008:9;40019:8;40000:6;:28::i;:::-;39941:95;:::o;41546:2865::-;41612:13;41646:22;41659:8;41646:12;:22::i;:::-;41638:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;41715:18;;:::i;:::-;41758:333;;;;;;;:::i;:::-;;;;;;;;;;;;;41744:1;41746;41744:4;;;;;;;:::i;:::-;;;;;:348;;;;42109:9;42105:421;42127:10;:17;;;;42124:1;:20;42105:421;;;42165:19;42187:10;42198:1;42187:13;;;;;;;;:::i;:::-;;;;;;;;;42165:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42264:1;42266;42264:4;;;;;;;:::i;:::-;;;;;;42311:5;42355;42438;42483;42229:284;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42215:1;42217;42215:4;;;;;;;:::i;:::-;;;;;:299;;;;42150:376;42146:3;;;;;:::i;:::-;;;;42105:421;;;;42538:78;;;;;;;;;;;;;;;;;:1;42540;42538:4;;;;;;;:::i;:::-;;;;;:78;;;;42637:16;42656:37;42673:19;42683:8;42673:9;:19::i;:::-;42656:16;:37::i;:::-;42637:56;;42704:16;42723:39;42741:19;42751:8;42741:9;:19::i;:::-;42723:16;:39::i;:::-;42704:58;;42827:2;42841;42787:100;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42773:1;42775;42773:4;;;;;;;:::i;:::-;;;;;:115;;;;42905:9;42917:1;42905:13;;42901:387;42925:3;42920:1;:8;42901:387;;42969:11;42952:28;;;;;;;;:::i;:::-;;:10;:13;42963:1;42952:13;;;;;;;;;;;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;42949:43;;;42982:8;;42949:43;43006:17;43026:11;:26;43038:10;:13;43049:1;43038:13;;;;;;;;;;;;;;;;;;;;;43026:26;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43006:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43067:15;43085:30;43102:12;43112:1;43102:9;:12::i;:::-;43085:16;:30::i;:::-;43067:48;;43130:15;43148:30;43165:12;43175:1;43165:9;:12::i;:::-;43148:16;:30::i;:::-;43130:48;;43224:1;43226;43224:4;;;;;;;:::i;:::-;;;;;;43244:3;43256:1;43267;43207:68;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43193:1;43195;43193:4;;;;;;;:::i;:::-;;;;;:83;;;;42934:354;;;42901:387;42930:3;;;;;:::i;:::-;;;;42901:387;;;;43482:26;43499:8;43482:16;:26::i;:::-;43589:14;:24;43604:8;43589:24;;;;;;;;;;;43314:340;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43300:1;43302;43300:4;;;;;;;:::i;:::-;;;;;:355;;;;43666:17;43710:1;43712;43710:4;;;;;;;:::i;:::-;;;;;;43716:1;43718;43716:4;;;;;;;:::i;:::-;;;;;;43722:1;43724;43722:4;;;;;;;:::i;:::-;;;;;;43728:1;43730;43728:4;;;;;;;:::i;:::-;;;;;;43734:1;43736;43734:4;;;;;;;:::i;:::-;;;;;;43740:1;43742;43740:4;;;;;;;:::i;:::-;;;;;;43693:52;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43666:80;;43767:18;43874:26;43891:8;43874:16;:26::i;:::-;44046:11;:33;44058:10;:20;44069:8;44058:20;;;;;;;;;;;;;;;;;;;;;44046:33;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43795:369;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43767:398;;44176:18;44197:85;44241:4;44247:25;44267:3;44247:13;:25::i;:::-;44224:55;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44197:13;:85::i;:::-;44176:106;;44293:20;44373:4;44323:55;;;;;;;;:::i;:::-;;;;;;;;;;;;;44293:86;;44397:6;44390:13;;;;;;;;;41546:2865;;;:::o;40143:97::-;40203:29;40210:11;40223:8;40203:6;:29::i;:::-;40143:97;:::o;39721:212::-;39834:10;39813:31;;:17;39821:8;39813:7;:17::i;:::-;:31;;;39805:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;39915:10;39888:14;:24;39903:8;39888:24;;;;;;;;;;;:37;;;;;;;;;;;;:::i;:::-;;39721:212;;:::o;39254:129::-;39327:7;39354:11;:21;39366:8;39354:21;;;;;;;;;;;;;;;;39347:28;;39254:129;;;:::o;27837:164::-;27934:4;27958:18;:25;27977:5;27958:25;;;;;;;;;;;;;;;:35;27984:8;27958:35;;;;;;;;;;;;;;;;;;;;;;;;;27951:42;;27837:164;;;;:::o;18007:201::-;16987:13;:11;:13::i;:::-;18116:1:::1;18096:22;;:8;:22;;;;18088:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18172:28;18191:8;18172:18;:28::i;:::-;18007:201:::0;:::o;40454:95::-;40513:28;40520:10;40532:8;40513:6;:28::i;:::-;40454:95;:::o;16095:157::-;16180:4;16219:25;16204:40;;;:11;:40;;;;16197:47;;16095:157;;;:::o;35343:135::-;35425:16;35433:7;35425;:16::i;:::-;35417:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;35343:135;:::o;16305:98::-;16358:7;16385:10;16378:17;;16305:98;:::o;34622:174::-;34724:2;34697:15;:24;34713:7;34697:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;34780:7;34776:2;34742:46;;34751:23;34766:7;34751:14;:23::i;:::-;34742:46;;;;;;;;;;;;34622:174;;:::o;30855:264::-;30948:4;30965:13;30981:23;30996:7;30981:14;:23::i;:::-;30965:39;;31034:5;31023:16;;:7;:16;;;:52;;;;31043:32;31060:5;31067:7;31043:16;:32::i;:::-;31023:52;:87;;;;31103:7;31079:31;;:20;31091:7;31079:11;:20::i;:::-;:31;;;31023:87;31015:96;;;30855:264;;;;:::o;33878:625::-;34037:4;34010:31;;:23;34025:7;34010:14;:23::i;:::-;:31;;;34002:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;34116:1;34102:16;;:2;:16;;;;34094:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34172:39;34193:4;34199:2;34203:7;34172:20;:39::i;:::-;34276:29;34293:1;34297:7;34276:8;:29::i;:::-;34337:1;34318:9;:15;34328:4;34318:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34366:1;34349:9;:13;34359:2;34349:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34397:2;34378:7;:16;34386:7;34378:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34436:7;34432:2;34417:27;;34426:4;34417:27;;;;;;;;;;;;34457:38;34477:4;34483:2;34487:7;34457:19;:38::i;:::-;33878:625;;;:::o;17266:132::-;17341:12;:10;:12::i;:::-;17330:23;;:7;:5;:7::i;:::-;:23;;;17322:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17266:132::o;40555:592::-;40623:11;40637:10;40623:24;;40666:2;;;;;;;;;;;40658:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;40735:10;;40718:14;;:27;40710:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40809:5;;40790:11;:16;40802:3;40790:16;;;;;;;;;;;;;;;;:24;40782:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;40852:18;40873:17;:15;:17::i;:::-;40852:38;;40901:22;40907:3;40912:10;40901:5;:22::i;:::-;40973:5;40944:14;:26;40959:10;40944:26;;;;;;;;;;;:34;;;;;;;;;;;;:::i;:::-;;41014:6;40989:10;:22;41000:10;40989:22;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;41031:11;:16;41043:3;41031:16;;;;;;;;;;;;;;;;:18;;;;;;;;;:::i;:::-;;;;;;41082:11;:19;41094:6;41082:19;;;;;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41065:44;;;;;;:::i;:::-;;;;;;;;41070:10;41065:44;;;41103:5;41065:44;;;;;;:::i;:::-;;;;;;;;41120:19;:17;:19::i;:::-;40612:535;;40555:592;;:::o;18368:191::-;18442:16;18461:6;;;;;;;;;;;18442:25;;18487:8;18478:6;;:17;;;;;;;;;;;;;;;;;;18542:8;18511:40;;18532:8;18511:40;;;;;;;;;;;;18431:128;18368:191;:::o;34939:315::-;35094:8;35085:17;;:5;:17;;;;35077:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35181:8;35143:18;:25;35162:5;35143:25;;;;;;;;;;;;;;;:35;35169:8;35143:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35227:8;35205:41;;35220:5;35205:41;;;35237:8;35205:41;;;;;;:::i;:::-;;;;;;;;34939:315;;;:::o;29935:313::-;30091:28;30101:4;30107:2;30111:7;30091:9;:28::i;:::-;30138:47;30161:4;30167:2;30171:7;30180:4;30138:22;:47::i;:::-;30130:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;29935:313;;;;:::o;41341:199::-;41403:4;41434:1;41423:8;:12;:41;;;;41456:8;41439:14;;:25;41423:41;41420:60;;;41473:5;41466:12;;;;41420:60;41521:11;41497:35;;;;;;;;:::i;:::-;;:10;:20;41508:8;41497:20;;;;;;;;;;;;;;;;;;;;;:35;;;;;;;;:::i;:::-;;;;41490:42;;41341:199;;;;:::o;38978:131::-;39037:7;39099:2;39094;39089;39084;39079;39074:1;39064:8;:11;;;;:::i;:::-;39063:18;;;;:::i;:::-;:23;;;;:::i;:::-;:28;;;;:::i;:::-;:33;;;;:::i;:::-;:38;;;;:::i;:::-;39056:45;;38978:131;;;:::o;13437:723::-;13493:13;13723:1;13714:5;:10;13710:53;;;13741:10;;;;;;;;;;;;;;;;;;;;;13710:53;13773:12;13788:5;13773:20;;13804:14;13829:78;13844:1;13836:4;:9;13829:78;;13862:8;;;;;:::i;:::-;;;;13893:2;13885:10;;;;;:::i;:::-;;;13829:78;;;13917:19;13949:6;13939:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13917:39;;13967:154;13983:1;13974:5;:10;13967:154;;14011:1;14001:11;;;;;:::i;:::-;;;14078:2;14070:5;:10;;;;:::i;:::-;14057:2;:24;;;;:::i;:::-;14044:39;;14027:6;14034;14027:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;14107:2;14098:11;;;;;:::i;:::-;;;13967:154;;;14145:6;14131:21;;;;;13437:723;;;;:::o;39115:131::-;39174:7;39236:2;39231;39226;39221;39216;39211:1;39201:8;:11;;;;:::i;:::-;39200:18;;;;:::i;:::-;:23;;;;:::i;:::-;:28;;;;:::i;:::-;:33;;;;:::i;:::-;:38;;;;:::i;:::-;39193:45;;39115:131;;;:::o;672:1912::-;730:13;775:1;760:4;:11;:16;756:31;;;778:9;;;;;;;;;;;;;;;;756:31;839:19;861:12;;;;;;;;;;;;;;;;;839:34;;925:18;971:1;966;952:4;:11;:15;;;;:::i;:::-;951:21;;;;:::i;:::-;946:1;:27;;;;:::i;:::-;925:48;;1056:20;1103:2;1090:10;:15;;;;:::i;:::-;1079:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1056:50;;1203:10;1195:6;1188:26;1298:1;1291:5;1287:13;1357:4;1408;1402:11;1393:7;1389:25;1504:2;1496:6;1492:15;1577:754;1596:6;1587:7;1584:19;1577:754;;;1696:1;1687:7;1683:15;1672:26;;1735:7;1729:14;1861:4;1853:5;1849:2;1845:14;1841:25;1831:8;1827:40;1821:47;1810:9;1802:67;1915:1;1904:9;1900:17;1887:30;;1994:4;1986:5;1982:2;1978:14;1974:25;1964:8;1960:40;1954:47;1943:9;1935:67;2048:1;2037:9;2033:17;2020:30;;2127:4;2119:5;2116:1;2111:14;2107:25;2097:8;2093:40;2087:47;2076:9;2068:67;2181:1;2170:9;2166:17;2153:30;;2260:4;2252:5;2240:25;2230:8;2226:40;2220:47;2209:9;2201:67;2314:1;2303:9;2299:17;2286:30;;1620:711;1577:754;;;2404:1;2397:4;2391:11;2387:19;2425:1;2420:54;;;;2493:1;2488:52;;;;2380:160;;2420:54;2464:6;2459:3;2455:16;2451:1;2440:9;2436:17;2429:43;2420:54;;2488:52;2532:4;2527:3;2523:14;2519:1;2508:9;2504:17;2497:41;2380:160;;1128:1423;;;;2570:6;2563:13;;;;;672:1912;;;;:::o;30561:127::-;30626:4;30678:1;30650:30;;:7;:16;30658:7;30650:16;;;;;;;;;;;;;;;;;;;;;:30;;;;30643:37;;30561:127;;;:::o;37467:126::-;;;;:::o;37978:125::-;;;;:::o;41153:100::-;41202:7;41244:1;41229:14;;:16;;;;:::i;:::-;41222:23;;41153:100;:::o;32453:439::-;32547:1;32533:16;;:2;:16;;;;32525:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;32606:16;32614:7;32606;:16::i;:::-;32605:17;32597:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32668:45;32697:1;32701:2;32705:7;32668:20;:45::i;:::-;32743:1;32726:9;:13;32736:2;32726:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32774:2;32755:7;:16;32763:7;32755:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32819:7;32815:2;32794:33;;32811:1;32794:33;;;;;;;;;;;;32840:44;32868:1;32872:2;32876:7;32840:19;:44::i;:::-;32453:439;;:::o;41259:72::-;41307:14;;:16;;;;;;;;;:::i;:::-;;;;;;41259:72::o;36042:853::-;36196:4;36217:15;:2;:13;;;:15::i;:::-;36213:675;;;36269:2;36253:36;;;36290:12;:10;:12::i;:::-;36304:4;36310:7;36319:4;36253:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36249:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36511:1;36494:6;:13;:18;36490:328;;;36537:60;;;;;;;;;;:::i;:::-;;;;;;;;36490:328;36768:6;36762:13;36753:6;36749:2;36745:15;36738:38;36249:584;36385:41;;;36375:51;;;:6;:51;;;;36368:58;;;;;36213:675;36872:4;36865:11;;36042:853;;;;;;;:::o;5863:326::-;5923:4;6180:1;6158:7;:19;;;:23;6151:30;;5863:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:329::-;1933:6;1982:2;1970:9;1961:7;1957:23;1953:32;1950:119;;;1988:79;;:::i;:::-;1950:119;2108:1;2133:53;2178:7;2169:6;2158:9;2154:22;2133:53;:::i;:::-;2123:63;;2079:117;1874:329;;;;:::o;2209:99::-;2261:6;2295:5;2289:12;2279:22;;2209:99;;;:::o;2314:169::-;2398:11;2432:6;2427:3;2420:19;2472:4;2467:3;2463:14;2448:29;;2314:169;;;;:::o;2489:307::-;2557:1;2567:113;2581:6;2578:1;2575:13;2567:113;;;2666:1;2661:3;2657:11;2651:18;2647:1;2642:3;2638:11;2631:39;2603:2;2600:1;2596:10;2591:15;;2567:113;;;2698:6;2695:1;2692:13;2689:101;;;2778:1;2769:6;2764:3;2760:16;2753:27;2689:101;2538:258;2489:307;;;:::o;2802:102::-;2843:6;2894:2;2890:7;2885:2;2878:5;2874:14;2870:28;2860:38;;2802:102;;;:::o;2910:364::-;2998:3;3026:39;3059:5;3026:39;:::i;:::-;3081:71;3145:6;3140:3;3081:71;:::i;:::-;3074:78;;3161:52;3206:6;3201:3;3194:4;3187:5;3183:16;3161:52;:::i;:::-;3238:29;3260:6;3238:29;:::i;:::-;3233:3;3229:39;3222:46;;3002:272;2910:364;;;;:::o;3280:313::-;3393:4;3431:2;3420:9;3416:18;3408:26;;3480:9;3474:4;3470:20;3466:1;3455:9;3451:17;3444:47;3508:78;3581:4;3572:6;3508:78;:::i;:::-;3500:86;;3280:313;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;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:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:619::-;5015:6;5023;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:53;5404:7;5395:6;5384:9;5380:22;5359:53;:::i;:::-;5349:63;;5304:118;5461:2;5487:53;5532:7;5523:6;5512:9;5508:22;5487:53;:::i;:::-;5477:63;;5432:118;4938:619;;;;;:::o;5563:118::-;5650:24;5668:5;5650:24;:::i;:::-;5645:3;5638:37;5563:118;;:::o;5687:222::-;5780:4;5818:2;5807:9;5803:18;5795:26;;5831:71;5899:1;5888:9;5884:17;5875:6;5831:71;:::i;:::-;5687:222;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:329::-;8595:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:119;;;8650:79;;:::i;:::-;8612:119;8770:1;8795:53;8840:7;8831:6;8820:9;8816:22;8795:53;:::i;:::-;8785:63;;8741:117;8536:329;;;;:::o;8871:116::-;8941:21;8956:5;8941:21;:::i;:::-;8934:5;8931:32;8921:60;;8977:1;8974;8967:12;8921:60;8871:116;:::o;8993:133::-;9036:5;9074:6;9061:20;9052:29;;9090:30;9114:5;9090:30;:::i;:::-;8993:133;;;;:::o;9132:323::-;9188:6;9237:2;9225:9;9216:7;9212:23;9208:32;9205:119;;;9243:79;;:::i;:::-;9205:119;9363:1;9388:50;9430:7;9421:6;9410:9;9406:22;9388:50;:::i;:::-;9378:60;;9334:114;9132:323;;;;:::o;9461:468::-;9526:6;9534;9583:2;9571:9;9562:7;9558:23;9554:32;9551:119;;;9589:79;;:::i;:::-;9551:119;9709:1;9734:53;9779:7;9770:6;9759:9;9755:22;9734:53;:::i;:::-;9724:63;;9680:117;9836:2;9862:50;9904:7;9895:6;9884:9;9880:22;9862:50;:::i;:::-;9852:60;;9807:115;9461:468;;;;;:::o;9935:307::-;9996:4;10086:18;10078:6;10075:30;10072:56;;;10108:18;;:::i;:::-;10072:56;10146:29;10168:6;10146:29;:::i;:::-;10138:37;;10230:4;10224;10220:15;10212:23;;9935:307;;;:::o;10248:410::-;10325:5;10350:65;10366:48;10407:6;10366:48;:::i;:::-;10350:65;:::i;:::-;10341:74;;10438:6;10431:5;10424:21;10476:4;10469:5;10465:16;10514:3;10505:6;10500:3;10496:16;10493:25;10490:112;;;10521:79;;:::i;:::-;10490:112;10611:41;10645:6;10640:3;10635;10611:41;:::i;:::-;10331:327;10248:410;;;;;:::o;10677:338::-;10732:5;10781:3;10774:4;10766:6;10762:17;10758:27;10748:122;;10789:79;;:::i;:::-;10748:122;10906:6;10893:20;10931:78;11005:3;10997:6;10990:4;10982:6;10978:17;10931:78;:::i;:::-;10922:87;;10738:277;10677:338;;;;:::o;11021:943::-;11116:6;11124;11132;11140;11189:3;11177:9;11168:7;11164:23;11160:33;11157:120;;;11196:79;;:::i;:::-;11157:120;11316:1;11341:53;11386:7;11377:6;11366:9;11362:22;11341:53;:::i;:::-;11331:63;;11287:117;11443:2;11469:53;11514:7;11505:6;11494:9;11490:22;11469:53;:::i;:::-;11459:63;;11414:118;11571:2;11597:53;11642:7;11633:6;11622:9;11618:22;11597:53;:::i;:::-;11587:63;;11542:118;11727:2;11716:9;11712:18;11699:32;11758:18;11750:6;11747:30;11744:117;;;11780:79;;:::i;:::-;11744:117;11885:62;11939:7;11930:6;11919:9;11915:22;11885:62;:::i;:::-;11875:72;;11670:287;11021:943;;;;;;;:::o;11970:654::-;12048:6;12056;12105:2;12093:9;12084:7;12080:23;12076:32;12073:119;;;12111:79;;:::i;:::-;12073:119;12231:1;12256:53;12301:7;12292:6;12281:9;12277:22;12256:53;:::i;:::-;12246:63;;12202:117;12386:2;12375:9;12371:18;12358:32;12417:18;12409:6;12406:30;12403:117;;;12439:79;;:::i;:::-;12403:117;12544:63;12599:7;12590:6;12579:9;12575:22;12544:63;:::i;:::-;12534:73;;12329:288;11970:654;;;;;:::o;12630:474::-;12698:6;12706;12755:2;12743:9;12734:7;12730:23;12726:32;12723:119;;;12761:79;;:::i;:::-;12723:119;12881:1;12906:53;12951:7;12942:6;12931:9;12927:22;12906:53;:::i;:::-;12896:63;;12852:117;13008:2;13034:53;13079:7;13070:6;13059:9;13055:22;13034:53;:::i;:::-;13024:63;;12979:118;12630:474;;;;;:::o;13110:180::-;13158:77;13155:1;13148:88;13255:4;13252:1;13245:15;13279:4;13276:1;13269:15;13296:320;13340:6;13377:1;13371:4;13367:12;13357:22;;13424:1;13418:4;13414:12;13445:18;13435:81;;13501:4;13493:6;13489:17;13479:27;;13435:81;13563:2;13555:6;13552:14;13532:18;13529:38;13526:84;;;13582:18;;:::i;:::-;13526:84;13347:269;13296:320;;;:::o;13622:220::-;13762:34;13758:1;13750:6;13746:14;13739:58;13831:3;13826:2;13818:6;13814:15;13807:28;13622:220;:::o;13848:366::-;13990:3;14011:67;14075:2;14070:3;14011:67;:::i;:::-;14004:74;;14087:93;14176:3;14087:93;:::i;:::-;14205:2;14200:3;14196:12;14189:19;;13848:366;;;:::o;14220:419::-;14386:4;14424:2;14413:9;14409:18;14401:26;;14473:9;14467:4;14463:20;14459:1;14448:9;14444:17;14437:47;14501:131;14627:4;14501:131;:::i;:::-;14493:139;;14220:419;;;:::o;14645:249::-;14785:34;14781:1;14773:6;14769:14;14762:58;14854:32;14849:2;14841:6;14837:15;14830:57;14645:249;:::o;14900:366::-;15042:3;15063:67;15127:2;15122:3;15063:67;:::i;:::-;15056:74;;15139:93;15228:3;15139:93;:::i;:::-;15257:2;15252:3;15248:12;15241:19;;14900:366;;;:::o;15272:419::-;15438:4;15476:2;15465:9;15461:18;15453:26;;15525:9;15519:4;15515:20;15511:1;15500:9;15496:17;15489:47;15553:131;15679:4;15553:131;:::i;:::-;15545:139;;15272:419;;;:::o;15697:233::-;15837:34;15833:1;15825:6;15821:14;15814:58;15906:16;15901:2;15893:6;15889:15;15882:41;15697:233;:::o;15936:366::-;16078:3;16099:67;16163:2;16158:3;16099:67;:::i;:::-;16092:74;;16175:93;16264:3;16175:93;:::i;:::-;16293:2;16288:3;16284:12;16277:19;;15936:366;;;:::o;16308:419::-;16474:4;16512:2;16501:9;16497:18;16489:26;;16561:9;16555:4;16551:20;16547:1;16536:9;16532:17;16525:47;16589:131;16715:4;16589:131;:::i;:::-;16581:139;;16308:419;;;:::o;16733:174::-;16873:26;16869:1;16861:6;16857:14;16850:50;16733:174;:::o;16913:366::-;17055:3;17076:67;17140:2;17135:3;17076:67;:::i;:::-;17069:74;;17152:93;17241:3;17152:93;:::i;:::-;17270:2;17265:3;17261:12;17254:19;;16913:366;;;:::o;17285:419::-;17451:4;17489:2;17478:9;17474:18;17466:26;;17538:9;17532:4;17528:20;17524:1;17513:9;17509:17;17502:47;17566:131;17692:4;17566:131;:::i;:::-;17558:139;;17285:419;;;:::o;17710:228::-;17850:34;17846:1;17838:6;17834:14;17827:58;17919:11;17914:2;17906:6;17902:15;17895:36;17710:228;:::o;17944:366::-;18086:3;18107:67;18171:2;18166:3;18107:67;:::i;:::-;18100:74;;18183:93;18272:3;18183:93;:::i;:::-;18301:2;18296:3;18292:12;18285:19;;17944:366;;;:::o;18316:419::-;18482:4;18520:2;18509:9;18505:18;18497:26;;18569:9;18563:4;18559:20;18555:1;18544:9;18540:17;18533:47;18597:131;18723:4;18597:131;:::i;:::-;18589:139;;18316:419;;;:::o;18741:171::-;18881:23;18877:1;18869:6;18865:14;18858:47;18741:171;:::o;18918:366::-;19060:3;19081:67;19145:2;19140:3;19081:67;:::i;:::-;19074:74;;19157:93;19246:3;19157:93;:::i;:::-;19275:2;19270:3;19266:12;19259:19;;18918:366;;;:::o;19290:419::-;19456:4;19494:2;19483:9;19479:18;19471:26;;19543:9;19537:4;19533:20;19529:1;19518:9;19514:17;19507:47;19571:131;19697:4;19571:131;:::i;:::-;19563:139;;19290:419;;;:::o;19715:148::-;19817:11;19854:3;19839:18;;19715:148;;;;:::o;19869:517::-;20009:66;20005:1;19997:6;19993:14;19986:90;20110:66;20105:2;20097:6;20093:15;20086:91;20211:66;20206:2;20198:6;20194:15;20187:91;20312:66;20307:2;20299:6;20295:15;20288:91;19869:517;:::o;20392:402::-;20552:3;20573:85;20655:2;20650:3;20573:85;:::i;:::-;20566:92;;20667:93;20756:3;20667:93;:::i;:::-;20785:2;20780:3;20776:12;20769:19;;20392:402;;;:::o;20800:301::-;20940:34;20936:1;20928:6;20924:14;20917:58;21013:34;21008:2;21000:6;20996:15;20989:59;21082:11;21077:2;21069:6;21065:15;21058:36;20800:301;:::o;21107:402::-;21267:3;21288:85;21370:2;21365:3;21288:85;:::i;:::-;21281:92;;21382:93;21471:3;21382:93;:::i;:::-;21500:2;21495:3;21491:12;21484:19;;21107:402;;;:::o;21515:416::-;21655:66;21651:1;21643:6;21639:14;21632:90;21756:66;21751:2;21743:6;21739:15;21732:91;21857:66;21852:2;21844:6;21840:15;21833:91;21515:416;:::o;21937:402::-;22097:3;22118:85;22200:2;22195:3;22118:85;:::i;:::-;22111:92;;22212:93;22301:3;22212:93;:::i;:::-;22330:2;22325:3;22321:12;22314:19;;21937:402;;;:::o;22345:913::-;22732:3;22754:148;22898:3;22754:148;:::i;:::-;22747:155;;22919:148;23063:3;22919:148;:::i;:::-;22912:155;;23084:148;23228:3;23084:148;:::i;:::-;23077:155;;23249:3;23242:10;;22345:913;;;:::o;23264:180::-;23312:77;23309:1;23302:88;23409:4;23406:1;23399:15;23433:4;23430:1;23423:15;23450:377;23556:3;23584:39;23617:5;23584:39;:::i;:::-;23639:89;23721:6;23716:3;23639:89;:::i;:::-;23632:96;;23737:52;23782:6;23777:3;23770:4;23763:5;23759:16;23737:52;:::i;:::-;23814:6;23809:3;23805:16;23798:23;;23560:267;23450:377;;;;:::o;23833:214::-;23973:66;23969:1;23961:6;23957:14;23950:90;23833:214;:::o;24053:402::-;24213:3;24234:85;24316:2;24311:3;24234:85;:::i;:::-;24227:92;;24328:93;24417:3;24328:93;:::i;:::-;24446:2;24441:3;24437:12;24430:19;;24053:402;;;:::o;24461:315::-;24601:66;24597:1;24589:6;24585:14;24578:90;24702:66;24697:2;24689:6;24685:15;24678:91;24461:315;:::o;24782:402::-;24942:3;24963:85;25045:2;25040:3;24963:85;:::i;:::-;24956:92;;25057:93;25146:3;25057:93;:::i;:::-;25175:2;25170:3;25166:12;25159:19;;24782:402;;;:::o;25190:214::-;25330:66;25326:1;25318:6;25314:14;25307:90;25190:214;:::o;25410:402::-;25570:3;25591:85;25673:2;25668:3;25591:85;:::i;:::-;25584:92;;25685:93;25774:3;25685:93;:::i;:::-;25803:2;25798:3;25794:12;25787:19;;25410:402;;;:::o;25818:214::-;25958:66;25954:1;25946:6;25942:14;25935:90;25818:214;:::o;26038:402::-;26198:3;26219:85;26301:2;26296:3;26219:85;:::i;:::-;26212:92;;26313:93;26402:3;26313:93;:::i;:::-;26431:2;26426:3;26422:12;26415:19;;26038:402;;;:::o;26446:257::-;26586:66;26582:1;26574:6;26570:14;26563:90;26687:4;26682:2;26674:6;26670:15;26663:29;26446:257;:::o;26713:418::-;26873:3;26898:85;26980:2;26975:3;26898:85;:::i;:::-;26891:92;;26996:93;27085:3;26996:93;:::i;:::-;27118:2;27113:3;27109:12;27102:19;;26713:418;;;:::o;27141:222::-;27285:66;27281:1;27273:6;27269:14;27262:90;27141:222;:::o;27373:416::-;27533:3;27558:84;27640:1;27635:3;27558:84;:::i;:::-;27551:91;;27655:93;27744:3;27655:93;:::i;:::-;27777:1;27772:3;27768:11;27761:18;;27373:416;;;:::o;27799:2563::-;28729:3;28755:95;28846:3;28837:6;28755:95;:::i;:::-;28748:102;;28871:148;29015:3;28871:148;:::i;:::-;28864:155;;29040:95;29131:3;29122:6;29040:95;:::i;:::-;29033:102;;29156:148;29300:3;29156:148;:::i;:::-;29149:155;;29325:95;29416:3;29407:6;29325:95;:::i;:::-;29318:102;;29441:148;29585:3;29441:148;:::i;:::-;29434:155;;29610:148;29754:3;29610:148;:::i;:::-;29603:155;;29779:95;29870:3;29861:6;29779:95;:::i;:::-;29772:102;;29895:148;30039:3;29895:148;:::i;:::-;29888:155;;30064:95;30155:3;30146:6;30064:95;:::i;:::-;30057:102;;30180:148;30324:3;30180:148;:::i;:::-;30173:155;;30349:3;30342:10;;27799:2563;;;;;;;;:::o;30372:196::-;30424:77;30421:1;30414:88;30525:4;30522:1;30515:15;30553:4;30550:1;30543:15;30578:249;30617:3;30644:24;30662:5;30644:24;:::i;:::-;30635:33;;30694:66;30687:5;30684:77;30681:103;;;30764:18;;:::i;:::-;30681:103;30815:1;30808:5;30804:13;30797:20;;30578:249;;;:::o;30837:222::-;30981:66;30977:1;30969:6;30965:14;30958:90;30837:222;:::o;31069:418::-;31229:3;31254:85;31336:2;31331:3;31254:85;:::i;:::-;31247:92;;31352:93;31441:3;31352:93;:::i;:::-;31474:2;31469:3;31465:12;31458:19;;31069:418;;;:::o;31497:222::-;31641:66;31637:1;31629:6;31625:14;31618:90;31497:222;:::o;31729:416::-;31889:3;31914:84;31996:1;31991:3;31914:84;:::i;:::-;31907:91;;32011:93;32100:3;32011:93;:::i;:::-;32133:1;32128:3;32124:11;32117:18;;31729:416;;;:::o;32155:327::-;32299:66;32295:1;32287:6;32283:14;32276:90;32404:66;32399:2;32391:6;32387:15;32380:91;32155:327;:::o;32492:418::-;32652:3;32677:85;32759:2;32754:3;32677:85;:::i;:::-;32670:92;;32775:93;32864:3;32775:93;:::i;:::-;32897:2;32892:3;32888:12;32881:19;;32492:418;;;:::o;32920:1261::-;33403:3;33429:148;33573:3;33429:148;:::i;:::-;33422:155;;33598:95;33689:3;33680:6;33598:95;:::i;:::-;33591:102;;33714:148;33858:3;33714:148;:::i;:::-;33707:155;;33883:95;33974:3;33965:6;33883:95;:::i;:::-;33876:102;;33999:148;34143:3;33999:148;:::i;:::-;33992:155;;34168:3;34161:10;;32920:1261;;;;;:::o;34191:196::-;34243:77;34240:1;34233:88;34344:4;34341:1;34334:15;34372:4;34369:1;34362:15;34397:222;34541:66;34537:1;34529:6;34525:14;34518:90;34397:222;:::o;34629:418::-;34789:3;34814:85;34896:2;34891:3;34814:85;:::i;:::-;34807:92;;34912:93;35001:3;34912:93;:::i;:::-;35034:2;35029:3;35025:12;35018:19;;34629:418;;;:::o;35057:222::-;35201:66;35197:1;35189:6;35185:14;35178:90;35057:222;:::o;35289:416::-;35449:3;35474:84;35556:1;35551:3;35474:84;:::i;:::-;35467:91;;35571:93;35660:3;35571:93;:::i;:::-;35693:1;35688:3;35684:11;35677:18;;35289:416;;;:::o;35715:222::-;35859:66;35855:1;35847:6;35843:14;35836:90;35715:222;:::o;35947:416::-;36107:3;36132:84;36214:1;36209:3;36132:84;:::i;:::-;36125:91;;36229:93;36318:3;36229:93;:::i;:::-;36351:1;36346:3;36342:11;36335:18;;35947:416;;;:::o;36373:222::-;36517:66;36513:1;36505:6;36501:14;36494:90;36373:222;:::o;36605:416::-;36765:3;36790:84;36872:1;36867:3;36790:84;:::i;:::-;36783:91;;36887:93;36976:3;36887:93;:::i;:::-;37009:1;37004:3;37000:11;36993:18;;36605:416;;;:::o;37031:1859::-;37711:3;37737:95;37828:3;37819:6;37737:95;:::i;:::-;37730:102;;37853:148;37997:3;37853:148;:::i;:::-;37846:155;;38022:95;38113:3;38104:6;38022:95;:::i;:::-;38015:102;;38138:148;38282:3;38138:148;:::i;:::-;38131:155;;38307:95;38398:3;38389:6;38307:95;:::i;:::-;38300:102;;38423:148;38567:3;38423:148;:::i;:::-;38416:155;;38592:95;38683:3;38674:6;38592:95;:::i;:::-;38585:102;;38708:148;38852:3;38708:148;:::i;:::-;38701:155;;38877:3;38870:10;;37031:1859;;;;;;;:::o;38900:338::-;39044:66;39040:1;39032:6;39028:14;39021:90;39149:34;39144:2;39136:6;39132:15;39125:59;39222:4;39217:2;39209:6;39205:15;39198:29;38900:338;:::o;39248:418::-;39408:3;39433:85;39515:2;39510:3;39433:85;:::i;:::-;39426:92;;39531:93;39620:3;39531:93;:::i;:::-;39653:2;39648:3;39644:12;39637:19;;39248:418;;;:::o;39676:268::-;39820:66;39816:1;39808:6;39804:14;39797:90;39925:7;39920:2;39912:6;39908:15;39901:32;39676:268;:::o;39954:418::-;40114:3;40139:85;40221:2;40216:3;40139:85;:::i;:::-;40132:92;;40237:93;40326:3;40237:93;:::i;:::-;40359:2;40354:3;40350:12;40343:19;;39954:418;;;:::o;40382:327::-;40526:66;40522:1;40514:6;40510:14;40503:90;40631:66;40626:2;40618:6;40614:15;40607:91;40382:327;:::o;40719:418::-;40879:3;40904:85;40986:2;40981:3;40904:85;:::i;:::-;40897:92;;41002:93;41091:3;41002:93;:::i;:::-;41124:2;41119:3;41115:12;41108:19;;40719:418;;;:::o;41147:157::-;41196:4;41223:3;41215:11;;41250:3;41247:1;41240:14;41288:4;41285:1;41275:18;41267:26;;41147:157;;;:::o;41342:925::-;41445:3;41486:5;41480:12;41519:36;41545:9;41519:36;:::i;:::-;41575:89;41657:6;41652:3;41575:89;:::i;:::-;41568:96;;41699:1;41688:9;41684:17;41719:1;41714:153;;;;41885:1;41880:377;;;;41677:580;;41714:153;41806:4;41802:9;41791;41787:25;41782:3;41775:38;41846:6;41841:3;41837:16;41830:23;;41714:153;;41880:377;41955:38;41987:5;41955:38;:::i;:::-;42019:1;42037:166;42051:6;42048:1;42045:13;42037:166;;;42129:7;42123:14;42119:1;42114:3;42110:11;42103:35;42183:1;42174:7;42170:15;42159:26;;42073:4;42070:1;42066:12;42061:17;;42037:166;;;42236:6;42231:3;42227:16;42220:23;;41887:370;;41677:580;;41449:818;;41342:925;;;;:::o;42277:171::-;42421:15;42417:1;42409:6;42405:14;42398:39;42277:171;:::o;42458:418::-;42618:3;42643:85;42725:2;42720:3;42643:85;:::i;:::-;42636:92;;42741:93;42830:3;42741:93;:::i;:::-;42863:2;42858:3;42854:12;42847:19;;42458:418;;;:::o;42886:1525::-;43467:3;43493:148;43637:3;43493:148;:::i;:::-;43486:155;;43662:148;43806:3;43662:148;:::i;:::-;43655:155;;43831:95;43922:3;43913:6;43831:95;:::i;:::-;43824:102;;43947:148;44091:3;43947:148;:::i;:::-;43940:155;;44116:92;44204:3;44195:6;44116:92;:::i;:::-;44109:99;;44229:148;44373:3;44229:148;:::i;:::-;44222:155;;44398:3;44391:10;;42886:1525;;;;;:::o;44421:1107::-;44793:3;44819:95;44910:3;44901:6;44819:95;:::i;:::-;44812:102;;44935:95;45026:3;45017:6;44935:95;:::i;:::-;44928:102;;45051:95;45142:3;45133:6;45051:95;:::i;:::-;45044:102;;45167:95;45258:3;45249:6;45167:95;:::i;:::-;45160:102;;45283:95;45374:3;45365:6;45283:95;:::i;:::-;45276:102;;45399:95;45490:3;45481:6;45399:95;:::i;:::-;45392:102;;45515:3;45508:10;;44421:1107;;;;;;;;;:::o;45538:222::-;45682:66;45678:1;45670:6;45666:14;45659:90;45538:222;:::o;45770:418::-;45930:3;45955:85;46037:2;46032:3;45955:85;:::i;:::-;45948:92;;46053:93;46142:3;46053:93;:::i;:::-;46175:2;46170:3;46166:12;46159:19;;45770:418;;;:::o;46198:327::-;46342:66;46338:1;46330:6;46326:14;46319:90;46447:66;46442:2;46434:6;46430:15;46423:91;46198:327;:::o;46535:418::-;46695:3;46720:85;46802:2;46797:3;46720:85;:::i;:::-;46713:92;;46818:93;46907:3;46818:93;:::i;:::-;46940:2;46935:3;46931:12;46924:19;;46535:418;;;:::o;46963:327::-;47107:66;47103:1;47095:6;47091:14;47084:90;47212:66;47207:2;47199:6;47195:15;47188:91;46963:327;:::o;47300:418::-;47460:3;47485:85;47567:2;47562:3;47485:85;:::i;:::-;47478:92;;47583:93;47672:3;47583:93;:::i;:::-;47705:2;47700:3;47696:12;47689:19;;47300:418;;;:::o;47728:222::-;47872:66;47868:1;47860:6;47856:14;47849:90;47728:222;:::o;47960:416::-;48120:3;48145:84;48227:1;48222:3;48145:84;:::i;:::-;48138:91;;48242:93;48331:3;48242:93;:::i;:::-;48364:1;48359:3;48355:11;48348:18;;47960:416;;;:::o;48386:267::-;48530:66;48526:1;48518:6;48514:14;48507:90;48635:6;48630:2;48622:6;48618:15;48611:31;48386:267;:::o;48663:418::-;48823:3;48848:85;48930:2;48925:3;48848:85;:::i;:::-;48841:92;;48946:93;49035:3;48946:93;:::i;:::-;49068:2;49063:3;49059:12;49052:19;;48663:418;;;:::o;49091:1795::-;49773:3;49799:148;49943:3;49799:148;:::i;:::-;49792:155;;49968:95;50059:3;50050:6;49968:95;:::i;:::-;49961:102;;50084:148;50228:3;50084:148;:::i;:::-;50077:155;;50253:148;50397:3;50253:148;:::i;:::-;50246:155;;50422:92;50510:3;50501:6;50422:92;:::i;:::-;50415:99;;50535:148;50679:3;50535:148;:::i;:::-;50528:155;;50704:148;50848:3;50704:148;:::i;:::-;50697:155;;50873:3;50866:10;;49091:1795;;;;;:::o;50896:222::-;51040:66;51036:1;51028:6;51024:14;51017:90;50896:222;:::o;51128:416::-;51288:3;51313:84;51395:1;51390:3;51313:84;:::i;:::-;51306:91;;51410:93;51499:3;51410:93;:::i;:::-;51532:1;51527:3;51523:11;51516:18;;51128:416;;;:::o;51554:721::-;51835:3;51861:95;51952:3;51943:6;51861:95;:::i;:::-;51854:102;;51977:95;52068:3;52059:6;51977:95;:::i;:::-;51970:102;;52093:148;52237:3;52093:148;:::i;:::-;52086:155;;52262:3;52255:10;;51554:721;;;;;:::o;52285:187::-;52429:31;52425:1;52417:6;52413:14;52406:55;52285:187;:::o;52482:418::-;52642:3;52667:85;52749:2;52744:3;52667:85;:::i;:::-;52660:92;;52765:93;52854:3;52765:93;:::i;:::-;52887:2;52882:3;52878:12;52871:19;;52482:418;;;:::o;52910:557::-;53143:3;53169:148;53313:3;53169:148;:::i;:::-;53162:155;;53338:95;53429:3;53420:6;53338:95;:::i;:::-;53331:102;;53454:3;53447:10;;52910:557;;;;:::o;53477:186::-;53621:30;53617:1;53609:6;53605:14;53598:54;53477:186;:::o;53673:382::-;53815:3;53840:67;53904:2;53899:3;53840:67;:::i;:::-;53833:74;;53920:93;54009:3;53920:93;:::i;:::-;54042:2;54037:3;54033:12;54026:19;;53673:382;;;:::o;54065:435::-;54231:4;54273:2;54262:9;54258:18;54250:26;;54326:9;54320:4;54316:20;54312:1;54301:9;54297:17;54290:47;54358:131;54484:4;54358:131;:::i;:::-;54350:139;;54065:435;;;:::o;54510:237::-;54654:34;54650:1;54642:6;54638:14;54631:58;54727:8;54722:2;54714:6;54710:15;54703:33;54510:237;:::o;54757:382::-;54899:3;54924:67;54988:2;54983:3;54924:67;:::i;:::-;54917:74;;55004:93;55093:3;55004:93;:::i;:::-;55126:2;55121:3;55117:12;55110:19;;54757:382;;;:::o;55149:435::-;55315:4;55357:2;55346:9;55342:18;55334:26;;55410:9;55404:4;55400:20;55396:1;55385:9;55381:17;55374:47;55442:131;55568:4;55442:131;:::i;:::-;55434:139;;55149:435;;;:::o;55594:236::-;55738:34;55734:1;55726:6;55722:14;55715:58;55811:7;55806:2;55798:6;55794:15;55787:32;55594:236;:::o;55840:382::-;55982:3;56007:67;56071:2;56066:3;56007:67;:::i;:::-;56000:74;;56087:93;56176:3;56087:93;:::i;:::-;56209:2;56204:3;56200:12;56193:19;;55840:382;;;:::o;56232:435::-;56398:4;56440:2;56429:9;56425:18;56417:26;;56493:9;56487:4;56483:20;56479:1;56468:9;56464:17;56457:47;56525:131;56651:4;56525:131;:::i;:::-;56517:139;;56232:435;;;:::o;56677:235::-;56821:34;56817:1;56809:6;56805:14;56798:58;56894:6;56889:2;56881:6;56877:15;56870:31;56677:235;:::o;56922:382::-;57064:3;57089:67;57153:2;57148:3;57089:67;:::i;:::-;57082:74;;57169:93;57258:3;57169:93;:::i;:::-;57291:2;57286:3;57282:12;57275:19;;56922:382;;;:::o;57314:435::-;57480:4;57522:2;57511:9;57507:18;57499:26;;57575:9;57569:4;57565:20;57561:1;57550:9;57546:17;57539:47;57607:131;57733:4;57607:131;:::i;:::-;57599:139;;57314:435;;;:::o;57759:211::-;57799:4;57823:20;57841:1;57823:20;:::i;:::-;57818:25;;57861:20;57879:1;57861:20;:::i;:::-;57856:25;;57904:1;57901;57898:8;57895:34;;;57909:18;;:::i;:::-;57895:34;57958:1;57955;57951:9;57943:17;;57759:211;;;;:::o;57980:329::-;58020:3;58043:20;58061:1;58043:20;:::i;:::-;58038:25;;58081:20;58099:1;58081:20;:::i;:::-;58076:25;;58243:1;58175:66;58171:74;58168:1;58165:81;58162:107;;;58249:18;;:::i;:::-;58162:107;58297:1;58294;58290:9;58283:16;;57980:329;;;;:::o;58319:190::-;58463:34;58459:1;58451:6;58447:14;58440:58;58319:190;:::o;58519:382::-;58661:3;58686:67;58750:2;58745:3;58686:67;:::i;:::-;58679:74;;58766:93;58855:3;58766:93;:::i;:::-;58888:2;58883:3;58879:12;58872:19;;58519:382;;;:::o;58911:435::-;59077:4;59119:2;59108:9;59104:18;59096:26;;59172:9;59166:4;59162:20;59158:1;59147:9;59143:17;59136:47;59204:131;59330:4;59204:131;:::i;:::-;59196:139;;58911:435;;;:::o;59356:184::-;59500:28;59496:1;59488:6;59484:14;59477:52;59356:184;:::o;59550:382::-;59692:3;59717:67;59781:2;59776:3;59717:67;:::i;:::-;59710:74;;59797:93;59886:3;59797:93;:::i;:::-;59919:2;59914:3;59910:12;59903:19;;59550:382;;;:::o;59942:435::-;60108:4;60150:2;60139:9;60135:18;60127:26;;60203:9;60197:4;60193:20;60189:1;60178:9;60174:17;60167:47;60235:131;60361:4;60235:131;:::i;:::-;60227:139;;59942:435;;;:::o;60387:171::-;60527:23;60523:1;60515:6;60511:14;60504:47;60387:171;:::o;60564:366::-;60706:3;60727:67;60791:2;60786:3;60727:67;:::i;:::-;60720:74;;60803:93;60892:3;60803:93;:::i;:::-;60921:2;60916:3;60912:12;60905:19;;60564:366;;;:::o;60936:419::-;61102:4;61140:2;61129:9;61125:18;61117:26;;61189:9;61183:4;61179:20;61175:1;61164:9;61160:17;61153:47;61217:131;61343:4;61217:131;:::i;:::-;61209:139;;60936:419;;;:::o;61361:172::-;61501:24;61497:1;61489:6;61485:14;61478:48;61361:172;:::o;61539:366::-;61681:3;61702:67;61766:2;61761:3;61702:67;:::i;:::-;61695:74;;61778:93;61867:3;61778:93;:::i;:::-;61896:2;61891:3;61887:12;61880:19;;61539:366;;;:::o;61911:419::-;62077:4;62115:2;62104:9;62100:18;62092:26;;62164:9;62158:4;62154:20;62150:1;62139:9;62135:17;62128:47;62192:131;62318:4;62192:131;:::i;:::-;62184:139;;61911:419;;;:::o;62336:269::-;62465:3;62487:92;62575:3;62566:6;62487:92;:::i;:::-;62480:99;;62596:3;62589:10;;62336:269;;;;:::o;62611:175::-;62751:27;62747:1;62739:6;62735:14;62728:51;62611:175;:::o;62792:366::-;62934:3;62955:67;63019:2;63014:3;62955:67;:::i;:::-;62948:74;;63031:93;63120:3;63031:93;:::i;:::-;63149:2;63144:3;63140:12;63133:19;;62792:366;;;:::o;63164:419::-;63330:4;63368:2;63357:9;63353:18;63345:26;;63417:9;63411:4;63407:20;63403:1;63392:9;63388:17;63381:47;63445:131;63571:4;63445:131;:::i;:::-;63437:139;;63164:419;;;:::o;63589:237::-;63729:34;63725:1;63717:6;63713:14;63706:58;63798:20;63793:2;63785:6;63781:15;63774:45;63589:237;:::o;63832:366::-;63974:3;63995:67;64059:2;64054:3;63995:67;:::i;:::-;63988:74;;64071:93;64160:3;64071:93;:::i;:::-;64189:2;64184:3;64180:12;64173:19;;63832:366;;;:::o;64204:419::-;64370:4;64408:2;64397:9;64393:18;64385:26;;64457:9;64451:4;64447:20;64443:1;64432:9;64428:17;64421:47;64485:131;64611:4;64485:131;:::i;:::-;64477:139;;64204:419;;;:::o;64629:180::-;64677:77;64674:1;64667:88;64774:4;64771:1;64764:15;64798:4;64795:1;64788:15;64815:176;64847:1;64864:20;64882:1;64864:20;:::i;:::-;64859:25;;64898:20;64916:1;64898:20;:::i;:::-;64893:25;;64937:1;64927:35;;64942:18;;:::i;:::-;64927:35;64983:1;64980;64976:9;64971:14;;64815:176;;;;:::o;64997:348::-;65037:7;65060:20;65078:1;65060:20;:::i;:::-;65055:25;;65094:20;65112:1;65094:20;:::i;:::-;65089:25;;65282:1;65214:66;65210:74;65207:1;65204:81;65199:1;65192:9;65185:17;65181:105;65178:131;;;65289:18;;:::i;:::-;65178:131;65337:1;65334;65330:9;65319:20;;64997:348;;;;:::o;65351:185::-;65391:1;65408:20;65426:1;65408:20;:::i;:::-;65403:25;;65442:20;65460:1;65442:20;:::i;:::-;65437:25;;65481:1;65471:35;;65486:18;;:::i;:::-;65471:35;65528:1;65525;65521:9;65516:14;;65351:185;;;;:::o;65542:182::-;65682:34;65678:1;65670:6;65666:14;65659:58;65542:182;:::o;65730:366::-;65872:3;65893:67;65957:2;65952:3;65893:67;:::i;:::-;65886:74;;65969:93;66058:3;65969:93;:::i;:::-;66087:2;66082:3;66078:12;66071:19;;65730:366;;;:::o;66102:419::-;66268:4;66306:2;66295:9;66291:18;66283:26;;66355:9;66349:4;66345:20;66341:1;66330:9;66326:17;66319:47;66383:131;66509:4;66383:131;:::i;:::-;66375:139;;66102:419;;;:::o;66527:178::-;66667:30;66663:1;66655:6;66651:14;66644:54;66527:178;:::o;66711:366::-;66853:3;66874:67;66938:2;66933:3;66874:67;:::i;:::-;66867:74;;66950:93;67039:3;66950:93;:::i;:::-;67068:2;67063:3;67059:12;67052:19;;66711:366;;;:::o;67083:419::-;67249:4;67287:2;67276:9;67272:18;67264:26;;67336:9;67330:4;67326:20;67322:1;67311:9;67307:17;67300:47;67364:131;67490:4;67364:131;:::i;:::-;67356:139;;67083:419;;;:::o;67508:98::-;67559:6;67593:5;67587:12;67577:22;;67508:98;;;:::o;67612:168::-;67695:11;67729:6;67724:3;67717:19;67769:4;67764:3;67760:14;67745:29;;67612:168;;;;:::o;67786:360::-;67872:3;67900:38;67932:5;67900:38;:::i;:::-;67954:70;68017:6;68012:3;67954:70;:::i;:::-;67947:77;;68033:52;68078:6;68073:3;68066:4;68059:5;68055:16;68033:52;:::i;:::-;68110:29;68132:6;68110:29;:::i;:::-;68105:3;68101:39;68094:46;;67876:270;67786:360;;;;:::o;68152:640::-;68347:4;68385:3;68374:9;68370:19;68362:27;;68399:71;68467:1;68456:9;68452:17;68443:6;68399:71;:::i;:::-;68480:72;68548:2;68537:9;68533:18;68524:6;68480:72;:::i;:::-;68562;68630:2;68619:9;68615:18;68606:6;68562:72;:::i;:::-;68681:9;68675:4;68671:20;68666:2;68655:9;68651:18;68644:48;68709:76;68780:4;68771:6;68709:76;:::i;:::-;68701:84;;68152:640;;;;;;;:::o;68798:141::-;68854:5;68885:6;68879:13;68870:22;;68901:32;68927:5;68901:32;:::i;:::-;68798:141;;;;:::o;68945:349::-;69014:6;69063:2;69051:9;69042:7;69038:23;69034:32;69031:119;;;69069:79;;:::i;:::-;69031:119;69189:1;69214:63;69269:7;69260:6;69249:9;69245:22;69214:63;:::i;:::-;69204:73;;69160:127;68945:349;;;;:::o

Swarm Source

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