ETH Price: $2,525.88 (+0.13%)

Token

BPASS (BERC20 PASS)
 

Overview

Max Total Supply

24 BERC20 PASS

Holders

24

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x3d43c9553da483e69e2bd3175b4b899b30c877ed
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:
BPASS

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-06-05
*/

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

interface IAccessControl {
    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {AccessControl-_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) external;

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) external;
}

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


library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        address[] memory addrs,
        bytes32 root,
        address sender
    ) internal pure returns (bool) {
        bool isIN = false;
        for (uint256 i = 0; i < addrs.length; i++) {
            if (addrs[i] == sender) {
                isIN = true;
                break;
            }
        }
        return isIN ? keccak256(abi.encodePacked(addrs)) == root : false;
    }
}

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

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

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

interface IERC2981 is IERC165 {
    /**
     * @dev Returns how much royalty is owed and to whom, based on a sale price that may be denominated in any unit of
     * exchange. The royalty amount is denominated and should be payed in that same unit of exchange.
     */
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}



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

abstract contract ERC2981 is IERC2981, ERC165 {
    struct RoyaltyInfo {
        address receiver;
        uint96 royaltyFraction;
    }

    RoyaltyInfo private _defaultRoyaltyInfo;
    mapping(uint256 => RoyaltyInfo) private _tokenRoyaltyInfo;

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

    /**
     * @inheritdoc IERC2981
     */
    function royaltyInfo(uint256 _tokenId, uint256 _salePrice)
        external
        view
        virtual
        override
        returns (address, uint256)
    {
        RoyaltyInfo memory royalty = _tokenRoyaltyInfo[_tokenId];

        if (royalty.receiver == address(0)) {
            royalty = _defaultRoyaltyInfo;
        }

        uint256 royaltyAmount = (_salePrice * royalty.royaltyFraction) / _feeDenominator();

        return (royalty.receiver, royaltyAmount);
    }

    /**
     * @dev The denominator with which to interpret the fee set in {_setTokenRoyalty} and {_setDefaultRoyalty} as a
     * fraction of the sale price. Defaults to 10000 so fees are expressed in basis points, but may be customized by an
     * override.
     */
    function _feeDenominator() internal pure virtual returns (uint96) {
        return 10000;
    }

    /**
     * @dev Sets the royalty information that all ids in this contract will default to.
     *
     * Requirements:
     *
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setDefaultRoyalty(address receiver, uint96 feeNumerator) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: invalid receiver");

        _defaultRoyaltyInfo = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Removes default royalty information.
     */
    function _deleteDefaultRoyalty() internal virtual {
        delete _defaultRoyaltyInfo;
    }

    /**
     * @dev Sets the royalty information for a specific token id, overriding the global default.
     *
     * Requirements:
     *
     * - `tokenId` must be already minted.
     * - `receiver` cannot be the zero address.
     * - `feeNumerator` cannot be greater than the fee denominator.
     */
    function _setTokenRoyalty(
        uint256 tokenId,
        address receiver,
        uint96 feeNumerator
    ) internal virtual {
        require(feeNumerator <= _feeDenominator(), "ERC2981: royalty fee will exceed salePrice");
        require(receiver != address(0), "ERC2981: Invalid parameters");

        _tokenRoyaltyInfo[tokenId] = RoyaltyInfo(receiver, feeNumerator);
    }

    /**
     * @dev Resets royalty information for the token id back to the global default.
     */
    function _resetTokenRoyalty(uint256 tokenId) internal virtual {
        delete _tokenRoyaltyInfo[tokenId];
    }
}

interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must be have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

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

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


contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

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

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

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

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: balance query for the zero address");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

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

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

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: transfer caller is not owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, _asSingletonArray(id), _asSingletonArray(amount), data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, _asSingletonArray(id), _asSingletonArray(amount), data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), _asSingletonArray(id), _asSingletonArray(amount), "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits a {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}


abstract contract ERC1155Supply is ERC1155 {
    mapping(uint256 => uint256) private _totalSupply;

    /**
     * @dev Total amount of tokens in with a given id.
     */
    function totalSupply(uint256 id) public view virtual returns (uint256) {
        return _totalSupply[id];
    }

    /**
     * @dev Indicates whether any token exist with a given id, or not.
     */
    function exists(uint256 id) public view virtual returns (bool) {
        return ERC1155Supply.totalSupply(id) > 0;
    }

    /**
     * @dev See {ERC1155-_beforeTokenTransfer}.
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual override {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);

        if (from == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] += amounts[i];
            }
        }

        if (to == address(0)) {
            for (uint256 i = 0; i < ids.length; ++i) {
                _totalSupply[ids[i]] -= amounts[i];
            }
        }
    }
}

abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

    function burnBatch(
        address account,
        uint256[] memory ids,
        uint256[] memory values
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burnBatch(account, ids, values);
    }
}


abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping(address => bool) members;
        bytes32 adminRole;
    }

    mapping(bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

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

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view virtual {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been revoked `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     *
     * NOTE: This function is deprecated in favor of {_grantRole}.
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, adminRole);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * Internal function without access restriction.
     */
    function _grantRole(bytes32 role, address account) internal virtual {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * Internal function without access restriction.
     */
    function _revokeRole(bytes32 role, address account) internal virtual {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract BPASS is
    ERC1155,
    ERC1155Burnable,
    ERC1155Supply,
    AccessControl,
    ERC2981,
    Ownable
{
    struct User {
        uint256 count;
        uint256 mintedTime;
    }

    using Address for address;

    using MerkleProof for bytes32[];

    uint256 public constant DD = 0;

    uint256 public maxSupply = 10000;

    uint256 public mintPrice = 30000000000000000;

    uint256 public tokenCount = 2000;

    uint256 public hadMints = 0;

    address public tokendAddress = 0xbC8E35221904F61b4200Ca44a08e4daC387Ac83A;

    string private _name;

    string private _symbol;

    bool private _publicActive;

    address private _ddAddress;

    mapping(address => bool) public addressFlags;



    constructor(
        string memory uri_
    ) ERC1155(uri_) {
        _name = 'BPASS';
        _symbol = 'BERC20 PASS';
        _publicActive = false;
        _ddAddress = _msgSender();
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());
        _setDefaultRoyalty(_msgSender(), 10000);
    }

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

    function mint() external payable {
        require(_publicActive, "Not yet started");
        require(msg.value>=mintPrice,"Incorrect payment amount");
        require(totalSupply(DD) + 1 <= maxSupply, "Exceeded max supply");
        require(!addressFlags[msg.sender], "HadMinted!");
        IERC20 token = IERC20(tokendAddress);
        uint256 tokenBalance = token.balanceOf(msg.sender);
        require(tokenBalance > tokenCount, "Insufficient token balance");
        _mint(_msgSender(), DD, 1, "");
        addressFlags[msg.sender] = true;
        hadMints += 1;
    }

    function setBaseData(uint256 newPrice, string memory newURI, uint256 newMaxSupply)  external
        onlyRole(DEFAULT_ADMIN_ROLE){
        maxSupply = newMaxSupply;
        mintPrice = newPrice;
        _setURI(newURI);
    }

    function setTokens(address token,uint256 count) external onlyOwner {
        tokenCount = count;
        tokendAddress = token;
    }


    function setActive(bool newActive)
        external
        onlyRole(DEFAULT_ADMIN_ROLE)
    {
        _publicActive = newActive;
    }

    function burn(address account, uint256 amount) external {
        require(_msgSender() == _ddAddress, "Invalid address");
        _burn(account, DD, amount);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    // The following functions are overrides required by Solidity.
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal override(ERC1155, ERC1155Supply) {
        super._beforeTokenTransfer(operator, from, to, ids, amounts, data);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC1155, ERC2981, AccessControl)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"uri_","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"DD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressFlags","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"hadMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newActive","type":"bool"}],"name":"setActive","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":"newPrice","type":"uint256"},{"internalType":"string","name":"newURI","type":"string"},{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setBaseData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"count","type":"uint256"}],"name":"setTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokendAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052612710600855666a94d74f4300006009556107d0600a556000600b5573bc8e35221904f61b4200ca44a08e4dac387ac83a600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008257600080fd5b5060405162006352380380620063528339818101604052810190620000a89190620007b8565b80620000ba816200022260201b60201c565b50620000db620000cf6200023760201b60201c565b6200023f60201b60201c565b6040518060400160405280600581526020017f4250415353000000000000000000000000000000000000000000000000000000815250600d908162000121919062000a54565b506040518060400160405280600b81526020017f4245524332302050415353000000000000000000000000000000000000000000815250600e908162000168919062000a54565b506000600f60006101000a81548160ff021916908315150217905550620001946200023760201b60201c565b600f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001f86000801b620001ec6200023760201b60201c565b6200030560201b60201c565b6200021b6200020c6200023760201b60201c565b6127106200031b60201b60201c565b5062000c56565b806002908162000233919062000a54565b5050565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003178282620004be60201b60201c565b5050565b6200032b620005b060201b60201c565b6bffffffffffffffffffffffff16816bffffffffffffffffffffffff1611156200038c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003839062000bc2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620003fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003f59062000c34565b60405180910390fd5b60405180604001604052808373ffffffffffffffffffffffffffffffffffffffff168152602001826bffffffffffffffffffffffff16815250600560008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055509050505050565b620004d08282620005ba60201b60201c565b620005ac5760016004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005516200023760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000612710905090565b60006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200068e8262000643565b810181811067ffffffffffffffff82111715620006b057620006af62000654565b5b80604052505050565b6000620006c562000625565b9050620006d3828262000683565b919050565b600067ffffffffffffffff821115620006f657620006f562000654565b5b620007018262000643565b9050602081019050919050565b60005b838110156200072e57808201518184015260208101905062000711565b60008484015250505050565b6000620007516200074b84620006d8565b620006b9565b90508281526020810184848401111562000770576200076f6200063e565b5b6200077d8482856200070e565b509392505050565b600082601f8301126200079d576200079c62000639565b5b8151620007af8482602086016200073a565b91505092915050565b600060208284031215620007d157620007d06200062f565b5b600082015167ffffffffffffffff811115620007f257620007f162000634565b5b620008008482850162000785565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200085c57607f821691505b60208210810362000872576200087162000814565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620008dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200089d565b620008e886836200089d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009356200092f620009298462000900565b6200090a565b62000900565b9050919050565b6000819050919050565b620009518362000914565b6200096962000960826200093c565b848454620008aa565b825550505050565b600090565b6200098062000971565b6200098d81848462000946565b505050565b5b81811015620009b557620009a960008262000976565b60018101905062000993565b5050565b601f82111562000a0457620009ce8162000878565b620009d9846200088d565b81016020851015620009e9578190505b62000a01620009f8856200088d565b83018262000992565b50505b505050565b600082821c905092915050565b600062000a296000198460080262000a09565b1980831691505092915050565b600062000a44838362000a16565b9150826002028217905092915050565b62000a5f8262000809565b67ffffffffffffffff81111562000a7b5762000a7a62000654565b5b62000a87825462000843565b62000a94828285620009b9565b600060209050601f83116001811462000acc576000841562000ab7578287015190505b62000ac3858262000a36565b86555062000b33565b601f19841662000adc8662000878565b60005b8281101562000b065784890151825560018201915060208501945060208101905062000adf565b8683101562000b26578489015162000b22601f89168262000a16565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f455243323938313a20726f79616c7479206665652077696c6c2065786365656460008201527f2073616c65507269636500000000000000000000000000000000000000000000602082015250565b600062000baa602a8362000b3b565b915062000bb78262000b4c565b604082019050919050565b6000602082019050818103600083015262000bdd8162000b9b565b9050919050565b7f455243323938313a20696e76616c696420726563656976657200000000000000600082015250565b600062000c1c60198362000b3b565b915062000c298262000be4565b602082019050919050565b6000602082019050818103600083015262000c4f8162000c0d565b9050919050565b6156ec8062000c666000396000f3fe6080604052600436106102195760003560e01c806391d1485411610123578063bac79651116100ab578063e985e9c51161006f578063e985e9c5146107e8578063eccc32f214610825578063f242432a14610850578063f2fde38b14610879578063f5298aca146108a257610219565b8063bac79651146106f1578063bd85b0391461071a578063cb4c100514610757578063d547741f14610794578063d5abeb01146107bd57610219565b8063a217fddf116100f2578063a217fddf1461061e578063a22cb46514610649578063a69d469e14610672578063acec338a1461069d578063b5f7fb0d146106c657610219565b806391d148541461056257806395d89b411461059f5780639dc29fac146105ca5780639f181b5e146105f357610219565b806336568abe116101a65780635b343c05116101755780635b343c05146104a35780636817c76c146104cc5780636b20c454146104f7578063715018a6146105205780638da5cb5b1461053757610219565b806336568abe146103d75780634e1273f4146104005780634f558e791461043d57806351cff8d91461047a57610219565b80631249c58b116101ed5780631249c58b14610300578063248a9ca31461030a5780632a55205a146103475780632eb2c2d6146103855780632f2ff15d146103ae57610219565b8062fdd58e1461021e57806301ffc9a71461025b57806306fdde03146102985780630e89341c146102c3575b600080fd5b34801561022a57600080fd5b5061024560048036038101906102409190613673565b6108cb565b60405161025291906136c2565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613735565b610993565b60405161028f919061377d565b60405180910390f35b3480156102a457600080fd5b506102ad6109a5565b6040516102ba9190613828565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061384a565b610a37565b6040516102f79190613828565b60405180910390f35b610308610acb565b005b34801561031657600080fd5b50610331600480360381019061032c91906138ad565b610dc9565b60405161033e91906138e9565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190613904565b610de9565b60405161037c929190613953565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190613b79565b610fd3565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190613c48565b611074565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190613c48565b61109d565b005b34801561040c57600080fd5b5061042760048036038101906104229190613d4b565b611120565b6040516104349190613e81565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f919061384a565b611239565b604051610471919061377d565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613ea3565b61124d565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613f71565b611313565b005b3480156104d857600080fd5b506104e1611345565b6040516104ee91906136c2565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190613fe0565b61134b565b005b34801561052c57600080fd5b506105356113e8565b005b34801561054357600080fd5b5061054c611470565b604051610559919061406b565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190613c48565b61149a565b604051610596919061377d565b60405180910390f35b3480156105ab57600080fd5b506105b4611505565b6040516105c19190613828565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613673565b611597565b005b3480156105ff57600080fd5b5061060861163e565b60405161061591906136c2565b60405180910390f35b34801561062a57600080fd5b50610633611644565b60405161064091906138e9565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b91906140b2565b61164b565b005b34801561067e57600080fd5b50610687611661565b604051610694919061406b565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906140f2565b611687565b005b3480156106d257600080fd5b506106db6116ba565b6040516106e891906136c2565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190613673565b6116c0565b005b34801561072657600080fd5b50610741600480360381019061073c919061384a565b611788565b60405161074e91906136c2565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613ea3565b6117a5565b60405161078b919061377d565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613c48565b6117c5565b005b3480156107c957600080fd5b506107d26117ee565b6040516107df91906136c2565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a919061411f565b6117f4565b60405161081c919061377d565b60405180910390f35b34801561083157600080fd5b5061083a611888565b60405161084791906136c2565b60405180910390f35b34801561085c57600080fd5b506108776004803603810190610872919061415f565b61188d565b005b34801561088557600080fd5b506108a0600480360381019061089b9190613ea3565b61192e565b005b3480156108ae57600080fd5b506108c960048036038101906108c491906141f6565b611a25565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361093b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610932906142bb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061099e82611ac2565b9050919050565b6060600d80546109b49061430a565b80601f01602080910402602001604051908101604052809291908181526020018280546109e09061430a565b8015610a2d5780601f10610a0257610100808354040283529160200191610a2d565b820191906000526020600020905b815481529060010190602001808311610a1057829003601f168201915b5050505050905090565b606060028054610a469061430a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a729061430a565b8015610abf5780601f10610a9457610100808354040283529160200191610abf565b820191906000526020600020905b815481529060010190602001808311610aa257829003601f168201915b50505050509050919050565b600f60009054906101000a900460ff16610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190614387565b60405180910390fd5b600954341015610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b56906143f3565b60405180910390fd5b6008546001610b6e6000611788565b610b789190614442565b1115610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb0906144c2565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d9061452e565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610ca8919061406b565b602060405180830381865afa158015610cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190614563565b9050600a548111610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906145dc565b60405180910390fd5b610d53610d3a611b3c565b6000600160405180602001604052806000815250611b44565b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000828254610dbe9190614442565b925050819055505050565b600060046000838152602001908152602001600020600101549050919050565b6000806000600660008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610f7e5760056040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610f88611cd9565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610fb491906145fc565b610fbe919061466d565b90508160000151819350935050509250929050565b610fdb611b3c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061102157506110208561101b611b3c565b6117f4565b5b611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790614710565b60405180910390fd5b61106d8585858585611ce3565b5050505050565b61107d82610dc9565b61108e81611089611b3c565b611ff6565b6110988383612093565b505050565b6110a5611b3c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906147a2565b60405180910390fd5b61111c8282612174565b5050565b60608151835114611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614834565b60405180910390fd5b6000835167ffffffffffffffff81111561118357611182613981565b5b6040519080825280602002602001820160405280156111b15781602001602082028036833780820191505090505b50905060005b845181101561122e576111fe8582815181106111d6576111d5614854565b5b60200260200101518583815181106111f1576111f0614854565b5b60200260200101516108cb565b82828151811061121157611210614854565b5b6020026020010181815250508061122790614883565b90506111b7565b508091505092915050565b60008061124583611788565b119050919050565b611255611b3c565b73ffffffffffffffffffffffffffffffffffffffff16611273611470565b73ffffffffffffffffffffffffffffffffffffffff16146112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090614917565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561130f573d6000803e3d6000fd5b5050565b6000801b61132881611323611b3c565b611ff6565b816008819055508360098190555061133f83612256565b50505050565b60095481565b611353611b3c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611399575061139883611393611b3c565b6117f4565b5b6113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf906149a9565b60405180910390fd5b6113e3838383612269565b505050565b6113f0611b3c565b73ffffffffffffffffffffffffffffffffffffffff1661140e611470565b73ffffffffffffffffffffffffffffffffffffffff1614611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90614917565b60405180910390fd5b61146e6000612519565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600e80546115149061430a565b80601f01602080910402602001604051908101604052809291908181526020018280546115409061430a565b801561158d5780601f106115625761010080835404028352916020019161158d565b820191906000526020600020905b81548152906001019060200180831161157057829003601f168201915b5050505050905090565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115d8611b3c565b73ffffffffffffffffffffffffffffffffffffffff161461162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162590614a15565b60405180910390fd5b61163a826000836125df565b5050565b600a5481565b6000801b81565b61165d611656611b3c565b83836127fb565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000801b61169c81611697611b3c565b611ff6565b81600f60006101000a81548160ff0219169083151502179055505050565b600b5481565b6116c8611b3c565b73ffffffffffffffffffffffffffffffffffffffff166116e6611470565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614917565b60405180910390fd5b80600a8190555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600060036000838152602001908152602001600020549050919050565b60106020528060005260406000206000915054906101000a900460ff1681565b6117ce82610dc9565b6117df816117da611b3c565b611ff6565b6117e98383612174565b505050565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081565b611895611b3c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806118db57506118da856118d5611b3c565b6117f4565b5b61191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906149a9565b60405180910390fd5b6119278585858585612967565b5050505050565b611936611b3c565b73ffffffffffffffffffffffffffffffffffffffff16611954611470565b73ffffffffffffffffffffffffffffffffffffffff16146119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190614917565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614aa7565b60405180910390fd5b611a2281612519565b50565b611a2d611b3c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611a735750611a7283611a6d611b3c565b6117f4565b5b611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa9906149a9565b60405180910390fd5b611abd8383836125df565b505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b355750611b3482612be8565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90614b39565b60405180910390fd5b6000611bbd611b3c565b9050611bde81600087611bcf88612c62565b611bd888612c62565b87612cdc565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d9190614442565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611cbb929190614b59565b60405180910390a4611cd281600087878787612cf2565b5050505050565b6000612710905090565b8151835114611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90614bf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90614c86565b60405180910390fd5b6000611da0611b3c565b9050611db0818787878787612cdc565b60005b8451811015611f61576000858281518110611dd157611dd0614854565b5b602002602001015190506000858381518110611df057611def614854565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890614d18565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f469190614442565b9250508190555050505080611f5a90614883565b9050611db3565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611fd8929190614d38565b60405180910390a4611fee818787878787612ec9565b505050505050565b612000828261149a565b61208f576120258173ffffffffffffffffffffffffffffffffffffffff1660146130a0565b6120338360001c60206130a0565b604051602001612044929190614e43565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120869190613828565b60405180910390fd5b5050565b61209d828261149a565b6121705760016004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612115611b3c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61217e828261149a565b156122525760006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506121f7611b3c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b80600290816122659190615029565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf9061516d565b60405180910390fd5b805182511461231c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231390614bf4565b60405180910390fd5b6000612326611b3c565b905061234681856000868660405180602001604052806000815250612cdc565b60005b835181101561249357600084828151811061236757612366614854565b5b60200260200101519050600084838151811061238657612385614854565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e906151ff565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061248b90614883565b915050612349565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161250b929190614d38565b60405180910390a450505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361264e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126459061516d565b60405180910390fd5b6000612658611b3c565b90506126888185600061266a87612c62565b61267387612c62565b60405180602001604052806000815250612cdc565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561271f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612716906151ff565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516127ec929190614b59565b60405180910390a45050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286090615291565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161295a919061377d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90614c86565b60405180910390fd5b60006129e0611b3c565b9050612a008187876129f188612c62565b6129fa88612c62565b87612cdc565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e90614d18565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4c9190614442565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612bc9929190614b59565b60405180910390a4612bdf828888888888612cf2565b50505050505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c5b5750612c5a826132dc565b5b9050919050565b60606000600167ffffffffffffffff811115612c8157612c80613981565b5b604051908082528060200260200182016040528015612caf5781602001602082028036833780820191505090505b5090508281600081518110612cc757612cc6614854565b5b60200260200101818152505080915050919050565b612cea8686868686866133be565b505050505050565b612d118473ffffffffffffffffffffffffffffffffffffffff16613536565b15612ec1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612d57959493929190615306565b6020604051808303816000875af1925050508015612d9357506040513d601f19601f82011682018060405250810190612d909190615375565b60015b612e3857612d9f6153af565b806308c379a003612dfb5750612db36153d1565b80612dbe5750612dfd565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df29190613828565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2f906154d3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb690615565565b60405180910390fd5b505b505050505050565b612ee88473ffffffffffffffffffffffffffffffffffffffff16613536565b15613098578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612f2e959493929190615585565b6020604051808303816000875af1925050508015612f6a57506040513d601f19601f82011682018060405250810190612f679190615375565b60015b61300f57612f766153af565b806308c379a003612fd25750612f8a6153d1565b80612f955750612fd4565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc99190613828565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613006906154d3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308d90615565565b60405180910390fd5b505b505050505050565b6060600060028360026130b391906145fc565b6130bd9190614442565b67ffffffffffffffff8111156130d6576130d5613981565b5b6040519080825280601f01601f1916602001820160405280156131085781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106131405761313f614854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106131a4576131a3614854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026131e491906145fc565b6131ee9190614442565b90505b600181111561328e577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106132305761322f614854565b5b1a60f81b82828151811061324757613246614854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080613287906155ed565b90506131f1565b50600084146132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c990615662565b60405180910390fd5b8091505092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806133a757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806133b757506133b682613559565b5b9050919050565b6133cc8686868686866135c3565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361347d5760005b835181101561347b5782818151811061341f5761341e614854565b5b60200260200101516003600086848151811061343e5761343d614854565b5b6020026020010151815260200190815260200160002060008282546134639190614442565b925050819055508061347490614883565b9050613403565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361352e5760005b835181101561352c578281815181106134d0576134cf614854565b5b6020026020010151600360008684815181106134ef576134ee614854565b5b6020026020010151815260200190815260200160002060008282546135149190615682565b925050819055508061352590614883565b90506134b4565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061360a826135df565b9050919050565b61361a816135ff565b811461362557600080fd5b50565b60008135905061363781613611565b92915050565b6000819050919050565b6136508161363d565b811461365b57600080fd5b50565b60008135905061366d81613647565b92915050565b6000806040838503121561368a576136896135d5565b5b600061369885828601613628565b92505060206136a98582860161365e565b9150509250929050565b6136bc8161363d565b82525050565b60006020820190506136d760008301846136b3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613712816136dd565b811461371d57600080fd5b50565b60008135905061372f81613709565b92915050565b60006020828403121561374b5761374a6135d5565b5b600061375984828501613720565b91505092915050565b60008115159050919050565b61377781613762565b82525050565b6000602082019050613792600083018461376e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137d25780820151818401526020810190506137b7565b60008484015250505050565b6000601f19601f8301169050919050565b60006137fa82613798565b61380481856137a3565b93506138148185602086016137b4565b61381d816137de565b840191505092915050565b6000602082019050818103600083015261384281846137ef565b905092915050565b6000602082840312156138605761385f6135d5565b5b600061386e8482850161365e565b91505092915050565b6000819050919050565b61388a81613877565b811461389557600080fd5b50565b6000813590506138a781613881565b92915050565b6000602082840312156138c3576138c26135d5565b5b60006138d184828501613898565b91505092915050565b6138e381613877565b82525050565b60006020820190506138fe60008301846138da565b92915050565b6000806040838503121561391b5761391a6135d5565b5b60006139298582860161365e565b925050602061393a8582860161365e565b9150509250929050565b61394d816135ff565b82525050565b60006040820190506139686000830185613944565b61397560208301846136b3565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139b9826137de565b810181811067ffffffffffffffff821117156139d8576139d7613981565b5b80604052505050565b60006139eb6135cb565b90506139f782826139b0565b919050565b600067ffffffffffffffff821115613a1757613a16613981565b5b602082029050602081019050919050565b600080fd5b6000613a40613a3b846139fc565b6139e1565b90508083825260208201905060208402830185811115613a6357613a62613a28565b5b835b81811015613a8c5780613a78888261365e565b845260208401935050602081019050613a65565b5050509392505050565b600082601f830112613aab57613aaa61397c565b5b8135613abb848260208601613a2d565b91505092915050565b600080fd5b600067ffffffffffffffff821115613ae457613ae3613981565b5b613aed826137de565b9050602081019050919050565b82818337600083830152505050565b6000613b1c613b1784613ac9565b6139e1565b905082815260208101848484011115613b3857613b37613ac4565b5b613b43848285613afa565b509392505050565b600082601f830112613b6057613b5f61397c565b5b8135613b70848260208601613b09565b91505092915050565b600080600080600060a08688031215613b9557613b946135d5565b5b6000613ba388828901613628565b9550506020613bb488828901613628565b945050604086013567ffffffffffffffff811115613bd557613bd46135da565b5b613be188828901613a96565b935050606086013567ffffffffffffffff811115613c0257613c016135da565b5b613c0e88828901613a96565b925050608086013567ffffffffffffffff811115613c2f57613c2e6135da565b5b613c3b88828901613b4b565b9150509295509295909350565b60008060408385031215613c5f57613c5e6135d5565b5b6000613c6d85828601613898565b9250506020613c7e85828601613628565b9150509250929050565b600067ffffffffffffffff821115613ca357613ca2613981565b5b602082029050602081019050919050565b6000613cc7613cc284613c88565b6139e1565b90508083825260208201905060208402830185811115613cea57613ce9613a28565b5b835b81811015613d135780613cff8882613628565b845260208401935050602081019050613cec565b5050509392505050565b600082601f830112613d3257613d3161397c565b5b8135613d42848260208601613cb4565b91505092915050565b60008060408385031215613d6257613d616135d5565b5b600083013567ffffffffffffffff811115613d8057613d7f6135da565b5b613d8c85828601613d1d565b925050602083013567ffffffffffffffff811115613dad57613dac6135da565b5b613db985828601613a96565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613df88161363d565b82525050565b6000613e0a8383613def565b60208301905092915050565b6000602082019050919050565b6000613e2e82613dc3565b613e388185613dce565b9350613e4383613ddf565b8060005b83811015613e74578151613e5b8882613dfe565b9750613e6683613e16565b925050600181019050613e47565b5085935050505092915050565b60006020820190508181036000830152613e9b8184613e23565b905092915050565b600060208284031215613eb957613eb86135d5565b5b6000613ec784828501613628565b91505092915050565b600067ffffffffffffffff821115613eeb57613eea613981565b5b613ef4826137de565b9050602081019050919050565b6000613f14613f0f84613ed0565b6139e1565b905082815260208101848484011115613f3057613f2f613ac4565b5b613f3b848285613afa565b509392505050565b600082601f830112613f5857613f5761397c565b5b8135613f68848260208601613f01565b91505092915050565b600080600060608486031215613f8a57613f896135d5565b5b6000613f988682870161365e565b935050602084013567ffffffffffffffff811115613fb957613fb86135da565b5b613fc586828701613f43565b9250506040613fd68682870161365e565b9150509250925092565b600080600060608486031215613ff957613ff86135d5565b5b600061400786828701613628565b935050602084013567ffffffffffffffff811115614028576140276135da565b5b61403486828701613a96565b925050604084013567ffffffffffffffff811115614055576140546135da565b5b61406186828701613a96565b9150509250925092565b60006020820190506140806000830184613944565b92915050565b61408f81613762565b811461409a57600080fd5b50565b6000813590506140ac81614086565b92915050565b600080604083850312156140c9576140c86135d5565b5b60006140d785828601613628565b92505060206140e88582860161409d565b9150509250929050565b600060208284031215614108576141076135d5565b5b60006141168482850161409d565b91505092915050565b60008060408385031215614136576141356135d5565b5b600061414485828601613628565b925050602061415585828601613628565b9150509250929050565b600080600080600060a0868803121561417b5761417a6135d5565b5b600061418988828901613628565b955050602061419a88828901613628565b94505060406141ab8882890161365e565b93505060606141bc8882890161365e565b925050608086013567ffffffffffffffff8111156141dd576141dc6135da565b5b6141e988828901613b4b565b9150509295509295909350565b60008060006060848603121561420f5761420e6135d5565b5b600061421d86828701613628565b935050602061422e8682870161365e565b925050604061423f8682870161365e565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006142a5602b836137a3565b91506142b082614249565b604082019050919050565b600060208201905081810360008301526142d481614298565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061432257607f821691505b602082108103614335576143346142db565b5b50919050565b7f4e6f742079657420737461727465640000000000000000000000000000000000600082015250565b6000614371600f836137a3565b915061437c8261433b565b602082019050919050565b600060208201905081810360008301526143a081614364565b9050919050565b7f496e636f7272656374207061796d656e7420616d6f756e740000000000000000600082015250565b60006143dd6018836137a3565b91506143e8826143a7565b602082019050919050565b6000602082019050818103600083015261440c816143d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061444d8261363d565b91506144588361363d565b92508282019050808211156144705761446f614413565b5b92915050565b7f4578636565646564206d617820737570706c7900000000000000000000000000600082015250565b60006144ac6013836137a3565b91506144b782614476565b602082019050919050565b600060208201905081810360008301526144db8161449f565b9050919050565b7f4861644d696e7465642100000000000000000000000000000000000000000000600082015250565b6000614518600a836137a3565b9150614523826144e2565b602082019050919050565b600060208201905081810360008301526145478161450b565b9050919050565b60008151905061455d81613647565b92915050565b600060208284031215614579576145786135d5565b5b60006145878482850161454e565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000600082015250565b60006145c6601a836137a3565b91506145d182614590565b602082019050919050565b600060208201905081810360008301526145f5816145b9565b9050919050565b60006146078261363d565b91506146128361363d565b92508282026146208161363d565b9150828204841483151761463757614636614413565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146788261363d565b91506146838361363d565b9250826146935761469261463e565b5b828204905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006146fa6032836137a3565b91506147058261469e565b604082019050919050565b60006020820190508181036000830152614729816146ed565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061478c602f836137a3565b915061479782614730565b604082019050919050565b600060208201905081810360008301526147bb8161477f565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061481e6029836137a3565b9150614829826147c2565b604082019050919050565b6000602082019050818103600083015261484d81614811565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061488e8261363d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148c0576148bf614413565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149016020836137a3565b915061490c826148cb565b602082019050919050565b60006020820190508181036000830152614930816148f4565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006149936029836137a3565b915061499e82614937565b604082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b60006149ff600f836137a3565b9150614a0a826149c9565b602082019050919050565b60006020820190508181036000830152614a2e816149f2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a916026836137a3565b9150614a9c82614a35565b604082019050919050565b60006020820190508181036000830152614ac081614a84565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b236021836137a3565b9150614b2e82614ac7565b604082019050919050565b60006020820190508181036000830152614b5281614b16565b9050919050565b6000604082019050614b6e60008301856136b3565b614b7b60208301846136b3565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614bde6028836137a3565b9150614be982614b82565b604082019050919050565b60006020820190508181036000830152614c0d81614bd1565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c706025836137a3565b9150614c7b82614c14565b604082019050919050565b60006020820190508181036000830152614c9f81614c63565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614d02602a836137a3565b9150614d0d82614ca6565b604082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b60006040820190508181036000830152614d528185613e23565b90508181036020830152614d668184613e23565b90509392505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614db0601783614d6f565b9150614dbb82614d7a565b601782019050919050565b6000614dd182613798565b614ddb8185614d6f565b9350614deb8185602086016137b4565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614e2d601183614d6f565b9150614e3882614df7565b601182019050919050565b6000614e4e82614da3565b9150614e5a8285614dc6565b9150614e6582614e20565b9150614e718284614dc6565b91508190509392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614edf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614ea2565b614ee98683614ea2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614f26614f21614f1c8461363d565b614f01565b61363d565b9050919050565b6000819050919050565b614f4083614f0b565b614f54614f4c82614f2d565b848454614eaf565b825550505050565b600090565b614f69614f5c565b614f74818484614f37565b505050565b5b81811015614f9857614f8d600082614f61565b600181019050614f7a565b5050565b601f821115614fdd57614fae81614e7d565b614fb784614e92565b81016020851015614fc6578190505b614fda614fd285614e92565b830182614f79565b50505b505050565b600082821c905092915050565b600061500060001984600802614fe2565b1980831691505092915050565b60006150198383614fef565b9150826002028217905092915050565b61503282613798565b67ffffffffffffffff81111561504b5761504a613981565b5b615055825461430a565b615060828285614f9c565b600060209050601f8311600181146150935760008415615081578287015190505b61508b858261500d565b8655506150f3565b601f1984166150a186614e7d565b60005b828110156150c9578489015182556001820191506020850194506020810190506150a4565b868310156150e657848901516150e2601f891682614fef565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151576023836137a3565b9150615162826150fb565b604082019050919050565b600060208201905081810360008301526151868161514a565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006151e96024836137a3565b91506151f48261518d565b604082019050919050565b60006020820190508181036000830152615218816151dc565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061527b6029836137a3565b91506152868261521f565b604082019050919050565b600060208201905081810360008301526152aa8161526e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006152d8826152b1565b6152e281856152bc565b93506152f28185602086016137b4565b6152fb816137de565b840191505092915050565b600060a08201905061531b6000830188613944565b6153286020830187613944565b61533560408301866136b3565b61534260608301856136b3565b818103608083015261535481846152cd565b90509695505050505050565b60008151905061536f81613709565b92915050565b60006020828403121561538b5761538a6135d5565b5b600061539984828501615360565b91505092915050565b60008160e01c9050919050565b600060033d11156153ce5760046000803e6153cb6000516153a2565b90505b90565b600060443d1061545e576153e36135cb565b60043d036004823e80513d602482011167ffffffffffffffff8211171561540b57505061545e565b808201805167ffffffffffffffff811115615429575050505061545e565b80602083010160043d03850181111561544657505050505061545e565b615455826020018501866139b0565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006154bd6034836137a3565b91506154c882615461565b604082019050919050565b600060208201905081810360008301526154ec816154b0565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061554f6028836137a3565b915061555a826154f3565b604082019050919050565b6000602082019050818103600083015261557e81615542565b9050919050565b600060a08201905061559a6000830188613944565b6155a76020830187613944565b81810360408301526155b98186613e23565b905081810360608301526155cd8185613e23565b905081810360808301526155e181846152cd565b90509695505050505050565b60006155f88261363d565b91506000820361560b5761560a614413565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061564c6020836137a3565b915061565782615616565b602082019050919050565b6000602082019050818103600083015261567b8161563f565b9050919050565b600061568d8261363d565b91506156988361363d565b92508282039050818111156156b0576156af614413565b5b9291505056fea2646970667358221220e2fc0a2cb3fe0f2c0ff55e455cf7cbc750adbcd7976cea9d0439da611681971264736f6c634300081200330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002e516d58684457393950385274594d6870316a564d6951346f39547a4567566f776478465946724c4b7a7a41626264000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102195760003560e01c806391d1485411610123578063bac79651116100ab578063e985e9c51161006f578063e985e9c5146107e8578063eccc32f214610825578063f242432a14610850578063f2fde38b14610879578063f5298aca146108a257610219565b8063bac79651146106f1578063bd85b0391461071a578063cb4c100514610757578063d547741f14610794578063d5abeb01146107bd57610219565b8063a217fddf116100f2578063a217fddf1461061e578063a22cb46514610649578063a69d469e14610672578063acec338a1461069d578063b5f7fb0d146106c657610219565b806391d148541461056257806395d89b411461059f5780639dc29fac146105ca5780639f181b5e146105f357610219565b806336568abe116101a65780635b343c05116101755780635b343c05146104a35780636817c76c146104cc5780636b20c454146104f7578063715018a6146105205780638da5cb5b1461053757610219565b806336568abe146103d75780634e1273f4146104005780634f558e791461043d57806351cff8d91461047a57610219565b80631249c58b116101ed5780631249c58b14610300578063248a9ca31461030a5780632a55205a146103475780632eb2c2d6146103855780632f2ff15d146103ae57610219565b8062fdd58e1461021e57806301ffc9a71461025b57806306fdde03146102985780630e89341c146102c3575b600080fd5b34801561022a57600080fd5b5061024560048036038101906102409190613673565b6108cb565b60405161025291906136c2565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613735565b610993565b60405161028f919061377d565b60405180910390f35b3480156102a457600080fd5b506102ad6109a5565b6040516102ba9190613828565b60405180910390f35b3480156102cf57600080fd5b506102ea60048036038101906102e5919061384a565b610a37565b6040516102f79190613828565b60405180910390f35b610308610acb565b005b34801561031657600080fd5b50610331600480360381019061032c91906138ad565b610dc9565b60405161033e91906138e9565b60405180910390f35b34801561035357600080fd5b5061036e60048036038101906103699190613904565b610de9565b60405161037c929190613953565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190613b79565b610fd3565b005b3480156103ba57600080fd5b506103d560048036038101906103d09190613c48565b611074565b005b3480156103e357600080fd5b506103fe60048036038101906103f99190613c48565b61109d565b005b34801561040c57600080fd5b5061042760048036038101906104229190613d4b565b611120565b6040516104349190613e81565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f919061384a565b611239565b604051610471919061377d565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613ea3565b61124d565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613f71565b611313565b005b3480156104d857600080fd5b506104e1611345565b6040516104ee91906136c2565b60405180910390f35b34801561050357600080fd5b5061051e60048036038101906105199190613fe0565b61134b565b005b34801561052c57600080fd5b506105356113e8565b005b34801561054357600080fd5b5061054c611470565b604051610559919061406b565b60405180910390f35b34801561056e57600080fd5b5061058960048036038101906105849190613c48565b61149a565b604051610596919061377d565b60405180910390f35b3480156105ab57600080fd5b506105b4611505565b6040516105c19190613828565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613673565b611597565b005b3480156105ff57600080fd5b5061060861163e565b60405161061591906136c2565b60405180910390f35b34801561062a57600080fd5b50610633611644565b60405161064091906138e9565b60405180910390f35b34801561065557600080fd5b50610670600480360381019061066b91906140b2565b61164b565b005b34801561067e57600080fd5b50610687611661565b604051610694919061406b565b60405180910390f35b3480156106a957600080fd5b506106c460048036038101906106bf91906140f2565b611687565b005b3480156106d257600080fd5b506106db6116ba565b6040516106e891906136c2565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190613673565b6116c0565b005b34801561072657600080fd5b50610741600480360381019061073c919061384a565b611788565b60405161074e91906136c2565b60405180910390f35b34801561076357600080fd5b5061077e60048036038101906107799190613ea3565b6117a5565b60405161078b919061377d565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613c48565b6117c5565b005b3480156107c957600080fd5b506107d26117ee565b6040516107df91906136c2565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a919061411f565b6117f4565b60405161081c919061377d565b60405180910390f35b34801561083157600080fd5b5061083a611888565b60405161084791906136c2565b60405180910390f35b34801561085c57600080fd5b506108776004803603810190610872919061415f565b61188d565b005b34801561088557600080fd5b506108a0600480360381019061089b9190613ea3565b61192e565b005b3480156108ae57600080fd5b506108c960048036038101906108c491906141f6565b611a25565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361093b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610932906142bb565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600061099e82611ac2565b9050919050565b6060600d80546109b49061430a565b80601f01602080910402602001604051908101604052809291908181526020018280546109e09061430a565b8015610a2d5780601f10610a0257610100808354040283529160200191610a2d565b820191906000526020600020905b815481529060010190602001808311610a1057829003601f168201915b5050505050905090565b606060028054610a469061430a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a729061430a565b8015610abf5780601f10610a9457610100808354040283529160200191610abf565b820191906000526020600020905b815481529060010190602001808311610aa257829003601f168201915b50505050509050919050565b600f60009054906101000a900460ff16610b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1190614387565b60405180910390fd5b600954341015610b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b56906143f3565b60405180910390fd5b6008546001610b6e6000611788565b610b789190614442565b1115610bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb0906144c2565b60405180910390fd5b601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610c46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3d9061452e565b60405180910390fd5b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401610ca8919061406b565b602060405180830381865afa158015610cc5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce99190614563565b9050600a548111610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d26906145dc565b60405180910390fd5b610d53610d3a611b3c565b6000600160405180602001604052806000815250611b44565b6001601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000828254610dbe9190614442565b925050819055505050565b600060046000838152602001908152602001600020600101549050919050565b6000806000600660008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610f7e5760056040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610f88611cd9565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610fb491906145fc565b610fbe919061466d565b90508160000151819350935050509250929050565b610fdb611b3c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061102157506110208561101b611b3c565b6117f4565b5b611060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105790614710565b60405180910390fd5b61106d8585858585611ce3565b5050505050565b61107d82610dc9565b61108e81611089611b3c565b611ff6565b6110988383612093565b505050565b6110a5611b3c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906147a2565b60405180910390fd5b61111c8282612174565b5050565b60608151835114611166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115d90614834565b60405180910390fd5b6000835167ffffffffffffffff81111561118357611182613981565b5b6040519080825280602002602001820160405280156111b15781602001602082028036833780820191505090505b50905060005b845181101561122e576111fe8582815181106111d6576111d5614854565b5b60200260200101518583815181106111f1576111f0614854565b5b60200260200101516108cb565b82828151811061121157611210614854565b5b6020026020010181815250508061122790614883565b90506111b7565b508091505092915050565b60008061124583611788565b119050919050565b611255611b3c565b73ffffffffffffffffffffffffffffffffffffffff16611273611470565b73ffffffffffffffffffffffffffffffffffffffff16146112c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112c090614917565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561130f573d6000803e3d6000fd5b5050565b6000801b61132881611323611b3c565b611ff6565b816008819055508360098190555061133f83612256565b50505050565b60095481565b611353611b3c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611399575061139883611393611b3c565b6117f4565b5b6113d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113cf906149a9565b60405180910390fd5b6113e3838383612269565b505050565b6113f0611b3c565b73ffffffffffffffffffffffffffffffffffffffff1661140e611470565b73ffffffffffffffffffffffffffffffffffffffff1614611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b90614917565b60405180910390fd5b61146e6000612519565b565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600e80546115149061430a565b80601f01602080910402602001604051908101604052809291908181526020018280546115409061430a565b801561158d5780601f106115625761010080835404028352916020019161158d565b820191906000526020600020905b81548152906001019060200180831161157057829003601f168201915b5050505050905090565b600f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166115d8611b3c565b73ffffffffffffffffffffffffffffffffffffffff161461162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162590614a15565b60405180910390fd5b61163a826000836125df565b5050565b600a5481565b6000801b81565b61165d611656611b3c565b83836127fb565b5050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000801b61169c81611697611b3c565b611ff6565b81600f60006101000a81548160ff0219169083151502179055505050565b600b5481565b6116c8611b3c565b73ffffffffffffffffffffffffffffffffffffffff166116e6611470565b73ffffffffffffffffffffffffffffffffffffffff161461173c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173390614917565b60405180910390fd5b80600a8190555081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600060036000838152602001908152602001600020549050919050565b60106020528060005260406000206000915054906101000a900460ff1681565b6117ce82610dc9565b6117df816117da611b3c565b611ff6565b6117e98383612174565b505050565b60085481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600081565b611895611b3c565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806118db57506118da856118d5611b3c565b6117f4565b5b61191a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611911906149a9565b60405180910390fd5b6119278585858585612967565b5050505050565b611936611b3c565b73ffffffffffffffffffffffffffffffffffffffff16611954611470565b73ffffffffffffffffffffffffffffffffffffffff16146119aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a190614917565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1090614aa7565b60405180910390fd5b611a2281612519565b50565b611a2d611b3c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480611a735750611a7283611a6d611b3c565b6117f4565b5b611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa9906149a9565b60405180910390fd5b611abd8383836125df565b505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611b355750611b3482612be8565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611baa90614b39565b60405180910390fd5b6000611bbd611b3c565b9050611bde81600087611bcf88612c62565b611bd888612c62565b87612cdc565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c3d9190614442565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611cbb929190614b59565b60405180910390a4611cd281600087878787612cf2565b5050505050565b6000612710905090565b8151835114611d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1e90614bf4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d90614c86565b60405180910390fd5b6000611da0611b3c565b9050611db0818787878787612cdc565b60005b8451811015611f61576000858281518110611dd157611dd0614854565b5b602002602001015190506000858381518110611df057611def614854565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8890614d18565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f469190614442565b9250508190555050505080611f5a90614883565b9050611db3565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611fd8929190614d38565b60405180910390a4611fee818787878787612ec9565b505050505050565b612000828261149a565b61208f576120258173ffffffffffffffffffffffffffffffffffffffff1660146130a0565b6120338360001c60206130a0565b604051602001612044929190614e43565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120869190613828565b60405180910390fd5b5050565b61209d828261149a565b6121705760016004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550612115611b3c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b61217e828261149a565b156122525760006004600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506121f7611b3c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b80600290816122659190615029565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122cf9061516d565b60405180910390fd5b805182511461231c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231390614bf4565b60405180910390fd5b6000612326611b3c565b905061234681856000868660405180602001604052806000815250612cdc565b60005b835181101561249357600084828151811061236757612366614854565b5b60200260200101519050600084838151811061238657612385614854565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612427576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241e906151ff565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050808061248b90614883565b915050612349565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb868660405161250b929190614d38565b60405180910390a450505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361264e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126459061516d565b60405180910390fd5b6000612658611b3c565b90506126888185600061266a87612c62565b61267387612c62565b60405180602001604052806000815250612cdc565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561271f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612716906151ff565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516127ec929190614b59565b60405180910390a45050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612869576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286090615291565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161295a919061377d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036129d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129cd90614c86565b60405180910390fd5b60006129e0611b3c565b9050612a008187876129f188612c62565b6129fa88612c62565b87612cdc565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015612a97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8e90614d18565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612b4c9190614442565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051612bc9929190614b59565b60405180910390a4612bdf828888888888612cf2565b50505050505050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612c5b5750612c5a826132dc565b5b9050919050565b60606000600167ffffffffffffffff811115612c8157612c80613981565b5b604051908082528060200260200182016040528015612caf5781602001602082028036833780820191505090505b5090508281600081518110612cc757612cc6614854565b5b60200260200101818152505080915050919050565b612cea8686868686866133be565b505050505050565b612d118473ffffffffffffffffffffffffffffffffffffffff16613536565b15612ec1578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612d57959493929190615306565b6020604051808303816000875af1925050508015612d9357506040513d601f19601f82011682018060405250810190612d909190615375565b60015b612e3857612d9f6153af565b806308c379a003612dfb5750612db36153d1565b80612dbe5750612dfd565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df29190613828565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2f906154d3565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612ebf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eb690615565565b60405180910390fd5b505b505050505050565b612ee88473ffffffffffffffffffffffffffffffffffffffff16613536565b15613098578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612f2e959493929190615585565b6020604051808303816000875af1925050508015612f6a57506040513d601f19601f82011682018060405250810190612f679190615375565b60015b61300f57612f766153af565b806308c379a003612fd25750612f8a6153d1565b80612f955750612fd4565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fc99190613828565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613006906154d3565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161308d90615565565b60405180910390fd5b505b505050505050565b6060600060028360026130b391906145fc565b6130bd9190614442565b67ffffffffffffffff8111156130d6576130d5613981565b5b6040519080825280601f01601f1916602001820160405280156131085781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106131405761313f614854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f7800000000000000000000000000000000000000000000000000000000000000816001815181106131a4576131a3614854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026131e491906145fc565b6131ee9190614442565b90505b600181111561328e577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106132305761322f614854565b5b1a60f81b82828151811061324757613246614854565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080613287906155ed565b90506131f1565b50600084146132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c990615662565b60405180910390fd5b8091505092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806133a757507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806133b757506133b682613559565b5b9050919050565b6133cc8686868686866135c3565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361347d5760005b835181101561347b5782818151811061341f5761341e614854565b5b60200260200101516003600086848151811061343e5761343d614854565b5b6020026020010151815260200190815260200160002060008282546134639190614442565b925050819055508061347490614883565b9050613403565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361352e5760005b835181101561352c578281815181106134d0576134cf614854565b5b6020026020010151600360008684815181106134ef576134ee614854565b5b6020026020010151815260200190815260200160002060008282546135149190615682565b925050819055508061352590614883565b90506134b4565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061360a826135df565b9050919050565b61361a816135ff565b811461362557600080fd5b50565b60008135905061363781613611565b92915050565b6000819050919050565b6136508161363d565b811461365b57600080fd5b50565b60008135905061366d81613647565b92915050565b6000806040838503121561368a576136896135d5565b5b600061369885828601613628565b92505060206136a98582860161365e565b9150509250929050565b6136bc8161363d565b82525050565b60006020820190506136d760008301846136b3565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613712816136dd565b811461371d57600080fd5b50565b60008135905061372f81613709565b92915050565b60006020828403121561374b5761374a6135d5565b5b600061375984828501613720565b91505092915050565b60008115159050919050565b61377781613762565b82525050565b6000602082019050613792600083018461376e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137d25780820151818401526020810190506137b7565b60008484015250505050565b6000601f19601f8301169050919050565b60006137fa82613798565b61380481856137a3565b93506138148185602086016137b4565b61381d816137de565b840191505092915050565b6000602082019050818103600083015261384281846137ef565b905092915050565b6000602082840312156138605761385f6135d5565b5b600061386e8482850161365e565b91505092915050565b6000819050919050565b61388a81613877565b811461389557600080fd5b50565b6000813590506138a781613881565b92915050565b6000602082840312156138c3576138c26135d5565b5b60006138d184828501613898565b91505092915050565b6138e381613877565b82525050565b60006020820190506138fe60008301846138da565b92915050565b6000806040838503121561391b5761391a6135d5565b5b60006139298582860161365e565b925050602061393a8582860161365e565b9150509250929050565b61394d816135ff565b82525050565b60006040820190506139686000830185613944565b61397560208301846136b3565b9392505050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139b9826137de565b810181811067ffffffffffffffff821117156139d8576139d7613981565b5b80604052505050565b60006139eb6135cb565b90506139f782826139b0565b919050565b600067ffffffffffffffff821115613a1757613a16613981565b5b602082029050602081019050919050565b600080fd5b6000613a40613a3b846139fc565b6139e1565b90508083825260208201905060208402830185811115613a6357613a62613a28565b5b835b81811015613a8c5780613a78888261365e565b845260208401935050602081019050613a65565b5050509392505050565b600082601f830112613aab57613aaa61397c565b5b8135613abb848260208601613a2d565b91505092915050565b600080fd5b600067ffffffffffffffff821115613ae457613ae3613981565b5b613aed826137de565b9050602081019050919050565b82818337600083830152505050565b6000613b1c613b1784613ac9565b6139e1565b905082815260208101848484011115613b3857613b37613ac4565b5b613b43848285613afa565b509392505050565b600082601f830112613b6057613b5f61397c565b5b8135613b70848260208601613b09565b91505092915050565b600080600080600060a08688031215613b9557613b946135d5565b5b6000613ba388828901613628565b9550506020613bb488828901613628565b945050604086013567ffffffffffffffff811115613bd557613bd46135da565b5b613be188828901613a96565b935050606086013567ffffffffffffffff811115613c0257613c016135da565b5b613c0e88828901613a96565b925050608086013567ffffffffffffffff811115613c2f57613c2e6135da565b5b613c3b88828901613b4b565b9150509295509295909350565b60008060408385031215613c5f57613c5e6135d5565b5b6000613c6d85828601613898565b9250506020613c7e85828601613628565b9150509250929050565b600067ffffffffffffffff821115613ca357613ca2613981565b5b602082029050602081019050919050565b6000613cc7613cc284613c88565b6139e1565b90508083825260208201905060208402830185811115613cea57613ce9613a28565b5b835b81811015613d135780613cff8882613628565b845260208401935050602081019050613cec565b5050509392505050565b600082601f830112613d3257613d3161397c565b5b8135613d42848260208601613cb4565b91505092915050565b60008060408385031215613d6257613d616135d5565b5b600083013567ffffffffffffffff811115613d8057613d7f6135da565b5b613d8c85828601613d1d565b925050602083013567ffffffffffffffff811115613dad57613dac6135da565b5b613db985828601613a96565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613df88161363d565b82525050565b6000613e0a8383613def565b60208301905092915050565b6000602082019050919050565b6000613e2e82613dc3565b613e388185613dce565b9350613e4383613ddf565b8060005b83811015613e74578151613e5b8882613dfe565b9750613e6683613e16565b925050600181019050613e47565b5085935050505092915050565b60006020820190508181036000830152613e9b8184613e23565b905092915050565b600060208284031215613eb957613eb86135d5565b5b6000613ec784828501613628565b91505092915050565b600067ffffffffffffffff821115613eeb57613eea613981565b5b613ef4826137de565b9050602081019050919050565b6000613f14613f0f84613ed0565b6139e1565b905082815260208101848484011115613f3057613f2f613ac4565b5b613f3b848285613afa565b509392505050565b600082601f830112613f5857613f5761397c565b5b8135613f68848260208601613f01565b91505092915050565b600080600060608486031215613f8a57613f896135d5565b5b6000613f988682870161365e565b935050602084013567ffffffffffffffff811115613fb957613fb86135da565b5b613fc586828701613f43565b9250506040613fd68682870161365e565b9150509250925092565b600080600060608486031215613ff957613ff86135d5565b5b600061400786828701613628565b935050602084013567ffffffffffffffff811115614028576140276135da565b5b61403486828701613a96565b925050604084013567ffffffffffffffff811115614055576140546135da565b5b61406186828701613a96565b9150509250925092565b60006020820190506140806000830184613944565b92915050565b61408f81613762565b811461409a57600080fd5b50565b6000813590506140ac81614086565b92915050565b600080604083850312156140c9576140c86135d5565b5b60006140d785828601613628565b92505060206140e88582860161409d565b9150509250929050565b600060208284031215614108576141076135d5565b5b60006141168482850161409d565b91505092915050565b60008060408385031215614136576141356135d5565b5b600061414485828601613628565b925050602061415585828601613628565b9150509250929050565b600080600080600060a0868803121561417b5761417a6135d5565b5b600061418988828901613628565b955050602061419a88828901613628565b94505060406141ab8882890161365e565b93505060606141bc8882890161365e565b925050608086013567ffffffffffffffff8111156141dd576141dc6135da565b5b6141e988828901613b4b565b9150509295509295909350565b60008060006060848603121561420f5761420e6135d5565b5b600061421d86828701613628565b935050602061422e8682870161365e565b925050604061423f8682870161365e565b9150509250925092565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b60006142a5602b836137a3565b91506142b082614249565b604082019050919050565b600060208201905081810360008301526142d481614298565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061432257607f821691505b602082108103614335576143346142db565b5b50919050565b7f4e6f742079657420737461727465640000000000000000000000000000000000600082015250565b6000614371600f836137a3565b915061437c8261433b565b602082019050919050565b600060208201905081810360008301526143a081614364565b9050919050565b7f496e636f7272656374207061796d656e7420616d6f756e740000000000000000600082015250565b60006143dd6018836137a3565b91506143e8826143a7565b602082019050919050565b6000602082019050818103600083015261440c816143d0565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061444d8261363d565b91506144588361363d565b92508282019050808211156144705761446f614413565b5b92915050565b7f4578636565646564206d617820737570706c7900000000000000000000000000600082015250565b60006144ac6013836137a3565b91506144b782614476565b602082019050919050565b600060208201905081810360008301526144db8161449f565b9050919050565b7f4861644d696e7465642100000000000000000000000000000000000000000000600082015250565b6000614518600a836137a3565b9150614523826144e2565b602082019050919050565b600060208201905081810360008301526145478161450b565b9050919050565b60008151905061455d81613647565b92915050565b600060208284031215614579576145786135d5565b5b60006145878482850161454e565b91505092915050565b7f496e73756666696369656e7420746f6b656e2062616c616e6365000000000000600082015250565b60006145c6601a836137a3565b91506145d182614590565b602082019050919050565b600060208201905081810360008301526145f5816145b9565b9050919050565b60006146078261363d565b91506146128361363d565b92508282026146208161363d565b9150828204841483151761463757614636614413565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146788261363d565b91506146838361363d565b9250826146935761469261463e565b5b828204905092915050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006146fa6032836137a3565b91506147058261469e565b604082019050919050565b60006020820190508181036000830152614729816146ed565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b600061478c602f836137a3565b915061479782614730565b604082019050919050565b600060208201905081810360008301526147bb8161477f565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061481e6029836137a3565b9150614829826147c2565b604082019050919050565b6000602082019050818103600083015261484d81614811565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061488e8261363d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036148c0576148bf614413565b5b600182019050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006149016020836137a3565b915061490c826148cb565b602082019050919050565b60006020820190508181036000830152614930816148f4565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b60006149936029836137a3565b915061499e82614937565b604082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b60006149ff600f836137a3565b9150614a0a826149c9565b602082019050919050565b60006020820190508181036000830152614a2e816149f2565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a916026836137a3565b9150614a9c82614a35565b604082019050919050565b60006020820190508181036000830152614ac081614a84565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b236021836137a3565b9150614b2e82614ac7565b604082019050919050565b60006020820190508181036000830152614b5281614b16565b9050919050565b6000604082019050614b6e60008301856136b3565b614b7b60208301846136b3565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000614bde6028836137a3565b9150614be982614b82565b604082019050919050565b60006020820190508181036000830152614c0d81614bd1565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c706025836137a3565b9150614c7b82614c14565b604082019050919050565b60006020820190508181036000830152614c9f81614c63565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000614d02602a836137a3565b9150614d0d82614ca6565b604082019050919050565b60006020820190508181036000830152614d3181614cf5565b9050919050565b60006040820190508181036000830152614d528185613e23565b90508181036020830152614d668184613e23565b90509392505050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614db0601783614d6f565b9150614dbb82614d7a565b601782019050919050565b6000614dd182613798565b614ddb8185614d6f565b9350614deb8185602086016137b4565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614e2d601183614d6f565b9150614e3882614df7565b601182019050919050565b6000614e4e82614da3565b9150614e5a8285614dc6565b9150614e6582614e20565b9150614e718284614dc6565b91508190509392505050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614edf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614ea2565b614ee98683614ea2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614f26614f21614f1c8461363d565b614f01565b61363d565b9050919050565b6000819050919050565b614f4083614f0b565b614f54614f4c82614f2d565b848454614eaf565b825550505050565b600090565b614f69614f5c565b614f74818484614f37565b505050565b5b81811015614f9857614f8d600082614f61565b600181019050614f7a565b5050565b601f821115614fdd57614fae81614e7d565b614fb784614e92565b81016020851015614fc6578190505b614fda614fd285614e92565b830182614f79565b50505b505050565b600082821c905092915050565b600061500060001984600802614fe2565b1980831691505092915050565b60006150198383614fef565b9150826002028217905092915050565b61503282613798565b67ffffffffffffffff81111561504b5761504a613981565b5b615055825461430a565b615060828285614f9c565b600060209050601f8311600181146150935760008415615081578287015190505b61508b858261500d565b8655506150f3565b601f1984166150a186614e7d565b60005b828110156150c9578489015182556001820191506020850194506020810190506150a4565b868310156150e657848901516150e2601f891682614fef565b8355505b6001600288020188555050505b505050505050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151576023836137a3565b9150615162826150fb565b604082019050919050565b600060208201905081810360008301526151868161514a565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b60006151e96024836137a3565b91506151f48261518d565b604082019050919050565b60006020820190508181036000830152615218816151dc565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b600061527b6029836137a3565b91506152868261521f565b604082019050919050565b600060208201905081810360008301526152aa8161526e565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006152d8826152b1565b6152e281856152bc565b93506152f28185602086016137b4565b6152fb816137de565b840191505092915050565b600060a08201905061531b6000830188613944565b6153286020830187613944565b61533560408301866136b3565b61534260608301856136b3565b818103608083015261535481846152cd565b90509695505050505050565b60008151905061536f81613709565b92915050565b60006020828403121561538b5761538a6135d5565b5b600061539984828501615360565b91505092915050565b60008160e01c9050919050565b600060033d11156153ce5760046000803e6153cb6000516153a2565b90505b90565b600060443d1061545e576153e36135cb565b60043d036004823e80513d602482011167ffffffffffffffff8211171561540b57505061545e565b808201805167ffffffffffffffff811115615429575050505061545e565b80602083010160043d03850181111561544657505050505061545e565b615455826020018501866139b0565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006154bd6034836137a3565b91506154c882615461565b604082019050919050565b600060208201905081810360008301526154ec816154b0565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061554f6028836137a3565b915061555a826154f3565b604082019050919050565b6000602082019050818103600083015261557e81615542565b9050919050565b600060a08201905061559a6000830188613944565b6155a76020830187613944565b81810360408301526155b98186613e23565b905081810360608301526155cd8185613e23565b905081810360808301526155e181846152cd565b90509695505050505050565b60006155f88261363d565b91506000820361560b5761560a614413565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b600061564c6020836137a3565b915061565782615616565b602082019050919050565b6000602082019050818103600083015261567b8161563f565b9050919050565b600061568d8261363d565b91506156988361363d565b92508282039050818111156156b0576156af614413565b5b9291505056fea2646970667358221220e2fc0a2cb3fe0f2c0ff55e455cf7cbc750adbcd7976cea9d0439da611681971264736f6c63430008120033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002e516d58684457393950385274594d6870316a564d6951346f39547a4567566f776478465946724c4b7a7a41626264000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : uri_ (string): QmXhDW99P8RtYMhp1jVMiQ4o9TzEgVowdxFYFrLKzzAbbd

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000002e
Arg [2] : 516d58684457393950385274594d6870316a564d6951346f39547a4567566f77
Arg [3] : 6478465946724c4b7a7a41626264000000000000000000000000000000000000


Deployed Bytecode Sourcemap

51102:3308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29099:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54188:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53597:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28843:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52299:584;;;:::i;:::-;;46867:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12398:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;31038:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47260:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48308:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29496:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42996:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52176:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52891:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51466:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44236:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7959:103;;;;;;;;;;;;;:::i;:::-;;7308:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45736:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53688:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53423:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51519:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44827:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30093:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51596:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53275:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51560:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53129:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42785:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51808:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47652:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51425:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30320:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51386:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30560:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8217:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43907:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29099:231;29185:7;29232:1;29213:21;;:7;:21;;;29205:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;29300:9;:13;29310:2;29300:13;;;;;;;;;;;:22;29314:7;29300:22;;;;;;;;;;;;;;;;29293:29;;29099:231;;;;:::o;54188:219::-;54334:4;54363:36;54387:11;54363:23;:36::i;:::-;54356:43;;54188:219;;;:::o;53597:83::-;53634:13;53667:5;53660:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53597:83;:::o;28843:105::-;28903:13;28936:4;28929:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28843:105;;;:::o;52299:584::-;52351:13;;;;;;;;;;;52343:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52414:9;;52403;:20;;52395:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;52493:9;;52488:1;52470:15;51415:1;52470:11;:15::i;:::-;:19;;;;:::i;:::-;:32;;52462:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;52546:12;:24;52559:10;52546:24;;;;;;;;;;;;;;;;;;;;;;;;;52545:25;52537:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;52596:12;52618:13;;;;;;;;;;;52596:36;;52643:20;52666:5;:15;;;52682:10;52666:27;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52643:50;;52727:10;;52712:12;:25;52704:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;52779:30;52785:12;:10;:12::i;:::-;51415:1;52803;52779:30;;;;;;;;;;;;:5;:30::i;:::-;52847:4;52820:12;:24;52833:10;52820:24;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;52874:1;52862:8;;:13;;;;;;;:::i;:::-;;;;;;;;52332:551;;52299:584::o;46867:131::-;46941:7;46968:6;:12;46975:4;46968:12;;;;;;;;;;;:22;;;46961:29;;46867:131;;;:::o;12398:494::-;12542:7;12551;12576:26;12605:17;:27;12623:8;12605:27;;;;;;;;;;;12576:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12677:1;12649:30;;:7;:16;;;:30;;;12645:92;;12706:19;12696:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12645:92;12749:21;12814:17;:15;:17::i;:::-;12773:58;;12787:7;:23;;;12774:36;;:10;:36;;;;:::i;:::-;12773:58;;;;:::i;:::-;12749:82;;12852:7;:16;;;12870:13;12844:40;;;;;;12398:494;;;;;:::o;31038:442::-;31279:12;:10;:12::i;:::-;31271:20;;:4;:20;;;:60;;;;31295:36;31312:4;31318:12;:10;:12::i;:::-;31295:16;:36::i;:::-;31271:60;31249:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;31420:52;31443:4;31449:2;31453:3;31458:7;31467:4;31420:22;:52::i;:::-;31038:442;;;;;:::o;47260:147::-;47343:18;47356:4;47343:12;:18::i;:::-;45318:30;45329:4;45335:12;:10;:12::i;:::-;45318:10;:30::i;:::-;47374:25:::1;47385:4;47391:7;47374:10;:25::i;:::-;47260:147:::0;;;:::o;48308:218::-;48415:12;:10;:12::i;:::-;48404:23;;:7;:23;;;48396:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;48492:26;48504:4;48510:7;48492:11;:26::i;:::-;48308:218;;:::o;29496:524::-;29652:16;29713:3;:10;29694:8;:15;:29;29686:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;29782:30;29829:8;:15;29815:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29782:63;;29863:9;29858:122;29882:8;:15;29878:1;:19;29858:122;;;29938:30;29948:8;29957:1;29948:11;;;;;;;;:::i;:::-;;;;;;;;29961:3;29965:1;29961:6;;;;;;;;:::i;:::-;;;;;;;;29938:9;:30::i;:::-;29919:13;29933:1;29919:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;29899:3;;;;:::i;:::-;;;29858:122;;;;29999:13;29992:20;;;29496:524;;;;:::o;42996:122::-;43053:4;43109:1;43077:29;43103:2;43077:25;:29::i;:::-;:33;43070:40;;42996:122;;;:::o;52176:115::-;7539:12;:10;:12::i;:::-;7528:23;;:7;:5;:7::i;:::-;:23;;;7520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52246:4:::1;52238:22;;:45;52261:21;52238:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52176:115:::0;:::o;52891:230::-;44872:4;53002:18;;45318:30;45329:4;45335:12;:10;:12::i;:::-;45318:10;:30::i;:::-;53044:12:::1;53032:9;:24;;;;53079:8;53067:9;:20;;;;53098:15;53106:6;53098:7;:15::i;:::-;52891:230:::0;;;;:::o;51466:44::-;;;;:::o;44236:353::-;44412:12;:10;:12::i;:::-;44401:23;;:7;:23;;;:66;;;;44428:39;44445:7;44454:12;:10;:12::i;:::-;44428:16;:39::i;:::-;44401:66;44379:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;44549:32;44560:7;44569:3;44574:6;44549:10;:32::i;:::-;44236:353;;;:::o;7959:103::-;7539:12;:10;:12::i;:::-;7528:23;;:7;:5;:7::i;:::-;:23;;;7520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8024:30:::1;8051:1;8024:18;:30::i;:::-;7959:103::o:0;7308:87::-;7354:7;7381:6;;;;;;;;;;;7374:13;;7308:87;:::o;45736:147::-;45822:4;45846:6;:12;45853:4;45846:12;;;;;;;;;;;:20;;:29;45867:7;45846:29;;;;;;;;;;;;;;;;;;;;;;;;;45839:36;;45736:147;;;;:::o;53688:87::-;53727:13;53760:7;53753:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53688:87;:::o;53423:166::-;53514:10;;;;;;;;;;;53498:26;;:12;:10;:12::i;:::-;:26;;;53490:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;53555:26;53561:7;51415:1;53574:6;53555:5;:26::i;:::-;53423:166;;:::o;51519:32::-;;;;:::o;44827:49::-;44872:4;44827:49;;;:::o;30093:155::-;30188:52;30207:12;:10;:12::i;:::-;30221:8;30231;30188:18;:52::i;:::-;30093:155;;:::o;51596:73::-;;;;;;;;;;;;;:::o;53275:140::-;44872:4;53346:18;;45318:30;45329:4;45335:12;:10;:12::i;:::-;45318:10;:30::i;:::-;53398:9:::1;53382:13;;:25;;;;;;;;;;;;;;;;;;53275:140:::0;;:::o;51560:27::-;;;;:::o;53129:136::-;7539:12;:10;:12::i;:::-;7528:23;;:7;:5;:7::i;:::-;:23;;;7520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53220:5:::1;53207:10;:18;;;;53252:5;53236:13;;:21;;;;;;;;;;;;;;;;;;53129:136:::0;;:::o;42785:113::-;42847:7;42874:12;:16;42887:2;42874:16;;;;;;;;;;;;42867:23;;42785:113;;;:::o;51808:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;47652:149::-;47736:18;47749:4;47736:12;:18::i;:::-;45318:30;45329:4;45335:12;:10;:12::i;:::-;45318:10;:30::i;:::-;47767:26:::1;47779:4;47785:7;47767:11;:26::i;:::-;47652:149:::0;;;:::o;51425:32::-;;;;:::o;30320:168::-;30419:4;30443:18;:27;30462:7;30443:27;;;;;;;;;;;;;;;:37;30471:8;30443:37;;;;;;;;;;;;;;;;;;;;;;;;;30436:44;;30320:168;;;;:::o;51386:30::-;51415:1;51386:30;:::o;30560:401::-;30776:12;:10;:12::i;:::-;30768:20;;:4;:20;;;:60;;;;30792:36;30809:4;30815:12;:10;:12::i;:::-;30792:16;:36::i;:::-;30768:60;30746:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;30908:45;30926:4;30932:2;30936;30940:6;30948:4;30908:17;:45::i;:::-;30560:401;;;;;:::o;8217:201::-;7539:12;:10;:12::i;:::-;7528:23;;:7;:5;:7::i;:::-;:23;;;7520:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8326:1:::1;8306:22;;:8;:22;;::::0;8298:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8382:28;8401:8;8382:18;:28::i;:::-;8217:201:::0;:::o;43907:321::-;44058:12;:10;:12::i;:::-;44047:23;;:7;:23;;;:66;;;;44074:39;44091:7;44100:12;:10;:12::i;:::-;44074:16;:39::i;:::-;44047:66;44025:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;44195:25;44201:7;44210:2;44214:5;44195;:25::i;:::-;43907:321;;;:::o;12128:215::-;12230:4;12269:26;12254:41;;;:11;:41;;;;:81;;;;12299:36;12323:11;12299:23;:36::i;:::-;12254:81;12247:88;;12128:215;;;:::o;2641:98::-;2694:7;2721:10;2714:17;;2641:98;:::o;35514:569::-;35681:1;35667:16;;:2;:16;;;35659:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;35734:16;35753:12;:10;:12::i;:::-;35734:31;;35778:102;35799:8;35817:1;35821:2;35825:21;35843:2;35825:17;:21::i;:::-;35848:25;35866:6;35848:17;:25::i;:::-;35875:4;35778:20;:102::i;:::-;35914:6;35893:9;:13;35903:2;35893:13;;;;;;;;;;;:17;35907:2;35893:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;35973:2;35936:52;;35969:1;35936:52;;35951:8;35936:52;;;35977:2;35981:6;35936:52;;;;;;;:::i;:::-;;;;;;;;36001:74;36032:8;36050:1;36054:2;36058;36062:6;36070:4;36001:30;:74::i;:::-;35648:435;35514:569;;;;:::o;13174:97::-;13232:6;13258:5;13251:12;;13174:97;:::o;33122:1074::-;33349:7;:14;33335:3;:10;:28;33327:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;33441:1;33427:16;;:2;:16;;;33419:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33498:16;33517:12;:10;:12::i;:::-;33498:31;;33542:60;33563:8;33573:4;33579:2;33583:3;33588:7;33597:4;33542:20;:60::i;:::-;33620:9;33615:421;33639:3;:10;33635:1;:14;33615:421;;;33671:10;33684:3;33688:1;33684:6;;;;;;;;:::i;:::-;;;;;;;;33671:19;;33705:14;33722:7;33730:1;33722:10;;;;;;;;:::i;:::-;;;;;;;;33705:27;;33749:19;33771:9;:13;33781:2;33771:13;;;;;;;;;;;:19;33785:4;33771:19;;;;;;;;;;;;;;;;33749:41;;33828:6;33813:11;:21;;33805:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;33961:6;33947:11;:20;33925:9;:13;33935:2;33925:13;;;;;;;;;;;:19;33939:4;33925:19;;;;;;;;;;;;;;;:42;;;;34018:6;33997:9;:13;34007:2;33997:13;;;;;;;;;;;:17;34011:2;33997:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;33656:380;;;33651:3;;;;:::i;:::-;;;33615:421;;;;34083:2;34053:47;;34077:4;34053:47;;34067:8;34053:47;;;34087:3;34092:7;34053:47;;;;;;;:::i;:::-;;;;;;;;34113:75;34149:8;34159:4;34165:2;34169:3;34174:7;34183:4;34113:35;:75::i;:::-;33316:880;33122:1074;;;;;:::o;46173:505::-;46262:22;46270:4;46276:7;46262;:22::i;:::-;46257:414;;46450:41;46478:7;46450:41;;46488:2;46450:19;:41::i;:::-;46564:38;46592:4;46584:13;;46599:2;46564:19;:38::i;:::-;46355:270;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46301:358;;;;;;;;;;;:::i;:::-;;;;;;;;46257:414;46173:505;;:::o;49809:238::-;49893:22;49901:4;49907:7;49893;:22::i;:::-;49888:152;;49964:4;49932:6;:12;49939:4;49932:12;;;;;;;;;;;:20;;:29;49953:7;49932:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;50015:12;:10;:12::i;:::-;49988:40;;50006:7;49988:40;;50000:4;49988:40;;;;;;;;;;49888:152;49809:238;;:::o;50179:239::-;50263:22;50271:4;50277:7;50263;:22::i;:::-;50259:152;;;50334:5;50302:6;:12;50309:4;50302:12;;;;;;;;;;;:20;;:29;50323:7;50302:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;50386:12;:10;:12::i;:::-;50359:40;;50377:7;50359:40;;50371:4;50359:40;;;;;;;;;;50259:152;50179:239;;:::o;35040:88::-;35114:6;35107:4;:13;;;;;;:::i;:::-;;35040:88;:::o;38275:891::-;38443:1;38427:18;;:4;:18;;;38419:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;38518:7;:14;38504:3;:10;:28;38496:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38590:16;38609:12;:10;:12::i;:::-;38590:31;;38634:66;38655:8;38665:4;38679:1;38683:3;38688:7;38634:66;;;;;;;;;;;;:20;:66::i;:::-;38718:9;38713:373;38737:3;:10;38733:1;:14;38713:373;;;38769:10;38782:3;38786:1;38782:6;;;;;;;;:::i;:::-;;;;;;;;38769:19;;38803:14;38820:7;38828:1;38820:10;;;;;;;;:::i;:::-;;;;;;;;38803:27;;38847:19;38869:9;:13;38879:2;38869:13;;;;;;;;;;;:19;38883:4;38869:19;;;;;;;;;;;;;;;;38847:41;;38926:6;38911:11;:21;;38903:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;39053:6;39039:11;:20;39017:9;:13;39027:2;39017:13;;;;;;;;;;;:19;39031:4;39017:19;;;;;;;;;;;;;;;:42;;;;38754:332;;;38749:3;;;;;:::i;:::-;;;;38713:373;;;;39141:1;39103:55;;39127:4;39103:55;;39117:8;39103:55;;;39145:3;39150:7;39103:55;;;;;;;:::i;:::-;;;;;;;;38408:758;38275:891;;;:::o;8578:191::-;8652:16;8671:6;;;;;;;;;;;8652:25;;8697:8;8688:6;;:17;;;;;;;;;;;;;;;;;;8752:8;8721:40;;8742:8;8721:40;;;;;;;;;;;;8641:128;8578:191;:::o;37424:648::-;37567:1;37551:18;;:4;:18;;;37543:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;37622:16;37641:12;:10;:12::i;:::-;37622:31;;37666:102;37687:8;37697:4;37711:1;37715:21;37733:2;37715:17;:21::i;:::-;37738:25;37756:6;37738:17;:25::i;:::-;37666:102;;;;;;;;;;;;:20;:102::i;:::-;37781:19;37803:9;:13;37813:2;37803:13;;;;;;;;;;;:19;37817:4;37803:19;;;;;;;;;;;;;;;;37781:41;;37856:6;37841:11;:21;;37833:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;37975:6;37961:11;:20;37939:9;:13;37949:2;37939:13;;;;;;;;;;;:19;37953:4;37939:19;;;;;;;;;;;;;;;:42;;;;38049:1;38010:54;;38035:4;38010:54;;38025:8;38010:54;;;38053:2;38057:6;38010:54;;;;;;;:::i;:::-;;;;;;;;37532:540;;37424:648;;;:::o;39308:331::-;39463:8;39454:17;;:5;:17;;;39446:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39566:8;39528:18;:25;39547:5;39528:25;;;;;;;;;;;;;;;:35;39554:8;39528:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39612:8;39590:41;;39605:5;39590:41;;;39622:8;39590:41;;;;;;:::i;:::-;;;;;;;;39308:331;;;:::o;31944:820::-;32146:1;32132:16;;:2;:16;;;32124:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32203:16;32222:12;:10;:12::i;:::-;32203:31;;32247:96;32268:8;32278:4;32284:2;32288:21;32306:2;32288:17;:21::i;:::-;32311:25;32329:6;32311:17;:25::i;:::-;32338:4;32247:20;:96::i;:::-;32356:19;32378:9;:13;32388:2;32378:13;;;;;;;;;;;:19;32392:4;32378:19;;;;;;;;;;;;;;;;32356:41;;32431:6;32416:11;:21;;32408:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;32556:6;32542:11;:20;32520:9;:13;32530:2;32520:13;;;;;;;;;;;:19;32534:4;32520:19;;;;;;;;;;;;;;;:42;;;;32605:6;32584:9;:13;32594:2;32584:13;;;;;;;;;;;:17;32598:2;32584:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;32660:2;32629:46;;32654:4;32629:46;;32644:8;32629:46;;;32664:2;32668:6;32629:46;;;;;;;:::i;:::-;;;;;;;;32688:68;32719:8;32729:4;32735:2;32739;32743:6;32751:4;32688:30;:68::i;:::-;32113:651;;31944:820;;;;;:::o;45440:204::-;45525:4;45564:32;45549:47;;;:11;:47;;;;:87;;;;45600:36;45624:11;45600:23;:36::i;:::-;45549:87;45542:94;;45440:204;;;:::o;42397:198::-;42463:16;42492:22;42531:1;42517:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42492:41;;42555:7;42544:5;42550:1;42544:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;42582:5;42575:12;;;42397:198;;;:::o;53851:329::-;54106:66;54133:8;54143:4;54149:2;54153:3;54158:7;54167:4;54106:26;:66::i;:::-;53851:329;;;;;;:::o;40824:744::-;41039:15;:2;:13;;;:15::i;:::-;41035:526;;;41092:2;41075:38;;;41114:8;41124:4;41130:2;41134:6;41142:4;41075:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41071:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;41423:6;41416:14;;;;;;;;;;;:::i;:::-;;;;;;;;41071:479;;;41472:62;;;;;;;;;;:::i;:::-;;;;;;;;41071:479;41209:43;;;41197:55;;;:8;:55;;;;41193:154;;41277:50;;;;;;;;;;:::i;:::-;;;;;;;;41193:154;41148:214;41035:526;40824:744;;;;;;:::o;41576:813::-;41816:15;:2;:13;;;:15::i;:::-;41812:570;;;41869:2;41852:43;;;41896:8;41906:4;41912:3;41917:7;41926:4;41852:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41848:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;42244:6;42237:14;;;;;;;;;;;:::i;:::-;;;;;;;;41848:523;;;42293:62;;;;;;;;;;:::i;:::-;;;;;;;;41848:523;42025:48;;;42013:60;;;:8;:60;;;;42009:159;;42098:50;;;;;;;;;;:::i;:::-;;;;;;;;42009:159;41932:251;41812:570;41576:813;;;;;;:::o;1643:451::-;1718:13;1744:19;1789:1;1780:6;1776:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1766:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1744:47;;1802:15;:6;1809:1;1802:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1828;:6;1835:1;1828:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;1859:9;1884:1;1875:6;1871:1;:10;;;;:::i;:::-;:14;;;;:::i;:::-;1859:26;;1854:135;1891:1;1887;:5;1854:135;;;1926:12;1947:3;1939:5;:11;1926:25;;;;;;;:::i;:::-;;;;;1914:6;1921:1;1914:9;;;;;;;;:::i;:::-;;;;;:37;;;;;;;;;;;1976:1;1966:11;;;;;1894:3;;;;:::i;:::-;;;1854:135;;;;2016:1;2007:5;:10;1999:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;2079:6;2065:21;;;1643:451;;;;:::o;28122:310::-;28224:4;28276:26;28261:41;;;:11;:41;;;;:110;;;;28334:37;28319:52;;;:11;:52;;;;28261:110;:163;;;;28388:36;28412:11;28388:23;:36::i;:::-;28261:163;28241:183;;28122:310;;;:::o;43193:655::-;43432:66;43459:8;43469:4;43475:2;43479:3;43484:7;43493:4;43432:26;:66::i;:::-;43531:1;43515:18;;:4;:18;;;43511:160;;43555:9;43550:110;43574:3;:10;43570:1;:14;43550:110;;;43634:7;43642:1;43634:10;;;;;;;;:::i;:::-;;;;;;;;43610:12;:20;43623:3;43627:1;43623:6;;;;;;;;:::i;:::-;;;;;;;;43610:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;43586:3;;;;:::i;:::-;;;43550:110;;;;43511:160;43701:1;43687:16;;:2;:16;;;43683:158;;43725:9;43720:110;43744:3;:10;43740:1;:14;43720:110;;;43804:7;43812:1;43804:10;;;;;;;;:::i;:::-;;;;;;;;43780:12;:20;43793:3;43797:1;43793:6;;;;;;;;:::i;:::-;;;;;;;;43780:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;43756:3;;;;:::i;:::-;;;43720:110;;;;43683:158;43193:655;;;;;;:::o;20162:326::-;20222:4;20479:1;20457:7;:19;;;:23;20450:30;;20162:326;;;:::o;11640:157::-;11725:4;11764:25;11749:40;;;:11;:40;;;;11742:47;;11640:157;;;:::o;40595:221::-;;;;;;;:::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:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:77::-;4927:7;4956:5;4945:16;;4890:77;;;:::o;4973:122::-;5046:24;5064:5;5046:24;:::i;:::-;5039:5;5036:35;5026:63;;5085:1;5082;5075:12;5026:63;4973:122;:::o;5101:139::-;5147:5;5185:6;5172:20;5163:29;;5201:33;5228:5;5201:33;:::i;:::-;5101:139;;;;:::o;5246:329::-;5305:6;5354:2;5342:9;5333:7;5329:23;5325:32;5322:119;;;5360:79;;:::i;:::-;5322:119;5480:1;5505:53;5550:7;5541:6;5530:9;5526:22;5505:53;:::i;:::-;5495:63;;5451:117;5246:329;;;;:::o;5581:118::-;5668:24;5686:5;5668:24;:::i;:::-;5663:3;5656:37;5581:118;;:::o;5705:222::-;5798:4;5836:2;5825:9;5821:18;5813:26;;5849:71;5917:1;5906:9;5902:17;5893:6;5849:71;:::i;:::-;5705:222;;;;:::o;5933:474::-;6001:6;6009;6058:2;6046:9;6037:7;6033:23;6029:32;6026:119;;;6064:79;;:::i;:::-;6026:119;6184:1;6209:53;6254:7;6245:6;6234:9;6230:22;6209:53;:::i;:::-;6199:63;;6155:117;6311:2;6337:53;6382:7;6373:6;6362:9;6358:22;6337:53;:::i;:::-;6327:63;;6282:118;5933:474;;;;;:::o;6413:118::-;6500:24;6518:5;6500:24;:::i;:::-;6495:3;6488:37;6413:118;;:::o;6537:332::-;6658:4;6696:2;6685:9;6681:18;6673:26;;6709:71;6777:1;6766:9;6762:17;6753:6;6709:71;:::i;:::-;6790:72;6858:2;6847:9;6843:18;6834:6;6790:72;:::i;:::-;6537:332;;;;;:::o;6875:117::-;6984:1;6981;6974:12;6998:180;7046:77;7043:1;7036:88;7143:4;7140:1;7133:15;7167:4;7164:1;7157:15;7184:281;7267:27;7289:4;7267:27;:::i;:::-;7259:6;7255:40;7397:6;7385:10;7382:22;7361:18;7349:10;7346:34;7343:62;7340:88;;;7408:18;;:::i;:::-;7340:88;7448:10;7444:2;7437:22;7227:238;7184:281;;:::o;7471:129::-;7505:6;7532:20;;:::i;:::-;7522:30;;7561:33;7589:4;7581:6;7561:33;:::i;:::-;7471:129;;;:::o;7606:311::-;7683:4;7773:18;7765:6;7762:30;7759:56;;;7795:18;;:::i;:::-;7759:56;7845:4;7837:6;7833:17;7825:25;;7905:4;7899;7895:15;7887:23;;7606:311;;;:::o;7923:117::-;8032:1;8029;8022:12;8063:710;8159:5;8184:81;8200:64;8257:6;8200:64;:::i;:::-;8184:81;:::i;:::-;8175:90;;8285:5;8314:6;8307:5;8300:21;8348:4;8341:5;8337:16;8330:23;;8401:4;8393:6;8389:17;8381:6;8377:30;8430:3;8422:6;8419:15;8416:122;;;8449:79;;:::i;:::-;8416:122;8564:6;8547:220;8581:6;8576:3;8573:15;8547:220;;;8656:3;8685:37;8718:3;8706:10;8685:37;:::i;:::-;8680:3;8673:50;8752:4;8747:3;8743:14;8736:21;;8623:144;8607:4;8602:3;8598:14;8591:21;;8547:220;;;8551:21;8165:608;;8063:710;;;;;:::o;8796:370::-;8867:5;8916:3;8909:4;8901:6;8897:17;8893:27;8883:122;;8924:79;;:::i;:::-;8883:122;9041:6;9028:20;9066:94;9156:3;9148:6;9141:4;9133:6;9129:17;9066:94;:::i;:::-;9057:103;;8873:293;8796:370;;;;:::o;9172:117::-;9281:1;9278;9271:12;9295:307;9356:4;9446:18;9438:6;9435:30;9432:56;;;9468:18;;:::i;:::-;9432:56;9506:29;9528:6;9506:29;:::i;:::-;9498:37;;9590:4;9584;9580:15;9572:23;;9295:307;;;:::o;9608:146::-;9705:6;9700:3;9695;9682:30;9746:1;9737:6;9732:3;9728:16;9721:27;9608:146;;;:::o;9760:423::-;9837:5;9862:65;9878:48;9919:6;9878:48;:::i;:::-;9862:65;:::i;:::-;9853:74;;9950:6;9943:5;9936:21;9988:4;9981:5;9977:16;10026:3;10017:6;10012:3;10008:16;10005:25;10002:112;;;10033:79;;:::i;:::-;10002:112;10123:54;10170:6;10165:3;10160;10123:54;:::i;:::-;9843:340;9760:423;;;;;:::o;10202:338::-;10257:5;10306:3;10299:4;10291:6;10287:17;10283:27;10273:122;;10314:79;;:::i;:::-;10273:122;10431:6;10418:20;10456:78;10530:3;10522:6;10515:4;10507:6;10503:17;10456:78;:::i;:::-;10447:87;;10263:277;10202:338;;;;:::o;10546:1509::-;10700:6;10708;10716;10724;10732;10781:3;10769:9;10760:7;10756:23;10752:33;10749:120;;;10788:79;;:::i;:::-;10749:120;10908:1;10933:53;10978:7;10969:6;10958:9;10954:22;10933:53;:::i;:::-;10923:63;;10879:117;11035:2;11061:53;11106:7;11097:6;11086:9;11082:22;11061:53;:::i;:::-;11051:63;;11006:118;11191:2;11180:9;11176:18;11163:32;11222:18;11214:6;11211:30;11208:117;;;11244:79;;:::i;:::-;11208:117;11349:78;11419:7;11410:6;11399:9;11395:22;11349:78;:::i;:::-;11339:88;;11134:303;11504:2;11493:9;11489:18;11476:32;11535:18;11527:6;11524:30;11521:117;;;11557:79;;:::i;:::-;11521:117;11662:78;11732:7;11723:6;11712:9;11708:22;11662:78;:::i;:::-;11652:88;;11447:303;11817:3;11806:9;11802:19;11789:33;11849:18;11841:6;11838:30;11835:117;;;11871:79;;:::i;:::-;11835:117;11976:62;12030:7;12021:6;12010:9;12006:22;11976:62;:::i;:::-;11966:72;;11760:288;10546:1509;;;;;;;;:::o;12061:474::-;12129:6;12137;12186:2;12174:9;12165:7;12161:23;12157:32;12154:119;;;12192:79;;:::i;:::-;12154:119;12312:1;12337:53;12382:7;12373:6;12362:9;12358:22;12337:53;:::i;:::-;12327:63;;12283:117;12439:2;12465:53;12510:7;12501:6;12490:9;12486:22;12465:53;:::i;:::-;12455:63;;12410:118;12061:474;;;;;:::o;12541:311::-;12618:4;12708:18;12700:6;12697:30;12694:56;;;12730:18;;:::i;:::-;12694:56;12780:4;12772:6;12768:17;12760:25;;12840:4;12834;12830:15;12822:23;;12541:311;;;:::o;12875:710::-;12971:5;12996:81;13012:64;13069:6;13012:64;:::i;:::-;12996:81;:::i;:::-;12987:90;;13097:5;13126:6;13119:5;13112:21;13160:4;13153:5;13149:16;13142:23;;13213:4;13205:6;13201:17;13193:6;13189:30;13242:3;13234:6;13231:15;13228:122;;;13261:79;;:::i;:::-;13228:122;13376:6;13359:220;13393:6;13388:3;13385:15;13359:220;;;13468:3;13497:37;13530:3;13518:10;13497:37;:::i;:::-;13492:3;13485:50;13564:4;13559:3;13555:14;13548:21;;13435:144;13419:4;13414:3;13410:14;13403:21;;13359:220;;;13363:21;12977:608;;12875:710;;;;;:::o;13608:370::-;13679:5;13728:3;13721:4;13713:6;13709:17;13705:27;13695:122;;13736:79;;:::i;:::-;13695:122;13853:6;13840:20;13878:94;13968:3;13960:6;13953:4;13945:6;13941:17;13878:94;:::i;:::-;13869:103;;13685:293;13608:370;;;;:::o;13984:894::-;14102:6;14110;14159:2;14147:9;14138:7;14134:23;14130:32;14127:119;;;14165:79;;:::i;:::-;14127:119;14313:1;14302:9;14298:17;14285:31;14343:18;14335:6;14332:30;14329:117;;;14365:79;;:::i;:::-;14329:117;14470:78;14540:7;14531:6;14520:9;14516:22;14470:78;:::i;:::-;14460:88;;14256:302;14625:2;14614:9;14610:18;14597:32;14656:18;14648:6;14645:30;14642:117;;;14678:79;;:::i;:::-;14642:117;14783:78;14853:7;14844:6;14833:9;14829:22;14783:78;:::i;:::-;14773:88;;14568:303;13984:894;;;;;:::o;14884:114::-;14951:6;14985:5;14979:12;14969:22;;14884:114;;;:::o;15004:184::-;15103:11;15137:6;15132:3;15125:19;15177:4;15172:3;15168:14;15153:29;;15004:184;;;;:::o;15194:132::-;15261:4;15284:3;15276:11;;15314:4;15309:3;15305:14;15297:22;;15194:132;;;:::o;15332:108::-;15409:24;15427:5;15409:24;:::i;:::-;15404:3;15397:37;15332:108;;:::o;15446:179::-;15515:10;15536:46;15578:3;15570:6;15536:46;:::i;:::-;15614:4;15609:3;15605:14;15591:28;;15446:179;;;;:::o;15631:113::-;15701:4;15733;15728:3;15724:14;15716:22;;15631:113;;;:::o;15780:732::-;15899:3;15928:54;15976:5;15928:54;:::i;:::-;15998:86;16077:6;16072:3;15998:86;:::i;:::-;15991:93;;16108:56;16158:5;16108:56;:::i;:::-;16187:7;16218:1;16203:284;16228:6;16225:1;16222:13;16203:284;;;16304:6;16298:13;16331:63;16390:3;16375:13;16331:63;:::i;:::-;16324:70;;16417:60;16470:6;16417:60;:::i;:::-;16407:70;;16263:224;16250:1;16247;16243:9;16238:14;;16203:284;;;16207:14;16503:3;16496:10;;15904:608;;;15780:732;;;;:::o;16518:373::-;16661:4;16699:2;16688:9;16684:18;16676:26;;16748:9;16742:4;16738:20;16734:1;16723:9;16719:17;16712:47;16776:108;16879:4;16870:6;16776:108;:::i;:::-;16768:116;;16518:373;;;;:::o;16897:329::-;16956:6;17005:2;16993:9;16984:7;16980:23;16976:32;16973:119;;;17011:79;;:::i;:::-;16973:119;17131:1;17156:53;17201:7;17192:6;17181:9;17177:22;17156:53;:::i;:::-;17146:63;;17102:117;16897:329;;;;:::o;17232:308::-;17294:4;17384:18;17376:6;17373:30;17370:56;;;17406:18;;:::i;:::-;17370:56;17444:29;17466:6;17444:29;:::i;:::-;17436:37;;17528:4;17522;17518:15;17510:23;;17232:308;;;:::o;17546:425::-;17624:5;17649:66;17665:49;17707:6;17665:49;:::i;:::-;17649:66;:::i;:::-;17640:75;;17738:6;17731:5;17724:21;17776:4;17769:5;17765:16;17814:3;17805:6;17800:3;17796:16;17793:25;17790:112;;;17821:79;;:::i;:::-;17790:112;17911:54;17958:6;17953:3;17948;17911:54;:::i;:::-;17630:341;17546:425;;;;;:::o;17991:340::-;18047:5;18096:3;18089:4;18081:6;18077:17;18073:27;18063:122;;18104:79;;:::i;:::-;18063:122;18221:6;18208:20;18246:79;18321:3;18313:6;18306:4;18298:6;18294:17;18246:79;:::i;:::-;18237:88;;18053:278;17991:340;;;;:::o;18337:799::-;18424:6;18432;18440;18489:2;18477:9;18468:7;18464:23;18460:32;18457:119;;;18495:79;;:::i;:::-;18457:119;18615:1;18640:53;18685:7;18676:6;18665:9;18661:22;18640:53;:::i;:::-;18630:63;;18586:117;18770:2;18759:9;18755:18;18742:32;18801:18;18793:6;18790:30;18787:117;;;18823:79;;:::i;:::-;18787:117;18928:63;18983:7;18974:6;18963:9;18959:22;18928:63;:::i;:::-;18918:73;;18713:288;19040:2;19066:53;19111:7;19102:6;19091:9;19087:22;19066:53;:::i;:::-;19056:63;;19011:118;18337:799;;;;;:::o;19142:1039::-;19269:6;19277;19285;19334:2;19322:9;19313:7;19309:23;19305:32;19302:119;;;19340:79;;:::i;:::-;19302:119;19460:1;19485:53;19530:7;19521:6;19510:9;19506:22;19485:53;:::i;:::-;19475:63;;19431:117;19615:2;19604:9;19600:18;19587:32;19646:18;19638:6;19635:30;19632:117;;;19668:79;;:::i;:::-;19632:117;19773:78;19843:7;19834:6;19823:9;19819:22;19773:78;:::i;:::-;19763:88;;19558:303;19928:2;19917:9;19913:18;19900:32;19959:18;19951:6;19948:30;19945:117;;;19981:79;;:::i;:::-;19945:117;20086:78;20156:7;20147:6;20136:9;20132:22;20086:78;:::i;:::-;20076:88;;19871:303;19142:1039;;;;;:::o;20187:222::-;20280:4;20318:2;20307:9;20303:18;20295:26;;20331:71;20399:1;20388:9;20384:17;20375:6;20331:71;:::i;:::-;20187:222;;;;:::o;20415:116::-;20485:21;20500:5;20485:21;:::i;:::-;20478:5;20475:32;20465:60;;20521:1;20518;20511:12;20465:60;20415:116;:::o;20537:133::-;20580:5;20618:6;20605:20;20596:29;;20634:30;20658:5;20634:30;:::i;:::-;20537:133;;;;:::o;20676:468::-;20741:6;20749;20798:2;20786:9;20777:7;20773:23;20769:32;20766:119;;;20804:79;;:::i;:::-;20766:119;20924:1;20949:53;20994:7;20985:6;20974:9;20970:22;20949:53;:::i;:::-;20939:63;;20895:117;21051:2;21077:50;21119:7;21110:6;21099:9;21095:22;21077:50;:::i;:::-;21067:60;;21022:115;20676:468;;;;;:::o;21150:323::-;21206:6;21255:2;21243:9;21234:7;21230:23;21226:32;21223:119;;;21261:79;;:::i;:::-;21223:119;21381:1;21406:50;21448:7;21439:6;21428:9;21424:22;21406:50;:::i;:::-;21396:60;;21352:114;21150:323;;;;:::o;21479:474::-;21547:6;21555;21604:2;21592:9;21583:7;21579:23;21575:32;21572:119;;;21610:79;;:::i;:::-;21572:119;21730:1;21755:53;21800:7;21791:6;21780:9;21776:22;21755:53;:::i;:::-;21745:63;;21701:117;21857:2;21883:53;21928:7;21919:6;21908:9;21904:22;21883:53;:::i;:::-;21873:63;;21828:118;21479:474;;;;;:::o;21959:1089::-;22063:6;22071;22079;22087;22095;22144:3;22132:9;22123:7;22119:23;22115:33;22112:120;;;22151:79;;:::i;:::-;22112:120;22271:1;22296:53;22341:7;22332:6;22321:9;22317:22;22296:53;:::i;:::-;22286:63;;22242:117;22398:2;22424:53;22469:7;22460:6;22449:9;22445:22;22424:53;:::i;:::-;22414:63;;22369:118;22526:2;22552:53;22597:7;22588:6;22577:9;22573:22;22552:53;:::i;:::-;22542:63;;22497:118;22654:2;22680:53;22725:7;22716:6;22705:9;22701:22;22680:53;:::i;:::-;22670:63;;22625:118;22810:3;22799:9;22795:19;22782:33;22842:18;22834:6;22831:30;22828:117;;;22864:79;;:::i;:::-;22828:117;22969:62;23023:7;23014:6;23003:9;22999:22;22969:62;:::i;:::-;22959:72;;22753:288;21959:1089;;;;;;;;:::o;23054:619::-;23131:6;23139;23147;23196:2;23184:9;23175:7;23171:23;23167:32;23164:119;;;23202:79;;:::i;:::-;23164:119;23322:1;23347:53;23392:7;23383:6;23372:9;23368:22;23347:53;:::i;:::-;23337:63;;23293:117;23449:2;23475:53;23520:7;23511:6;23500:9;23496:22;23475:53;:::i;:::-;23465:63;;23420:118;23577:2;23603:53;23648:7;23639:6;23628:9;23624:22;23603:53;:::i;:::-;23593:63;;23548:118;23054:619;;;;;:::o;23679:230::-;23819:34;23815:1;23807:6;23803:14;23796:58;23888:13;23883:2;23875:6;23871:15;23864:38;23679:230;:::o;23915:366::-;24057:3;24078:67;24142:2;24137:3;24078:67;:::i;:::-;24071:74;;24154:93;24243:3;24154:93;:::i;:::-;24272:2;24267:3;24263:12;24256:19;;23915:366;;;:::o;24287:419::-;24453:4;24491:2;24480:9;24476:18;24468:26;;24540:9;24534:4;24530:20;24526:1;24515:9;24511:17;24504:47;24568:131;24694:4;24568:131;:::i;:::-;24560:139;;24287:419;;;:::o;24712:180::-;24760:77;24757:1;24750:88;24857:4;24854:1;24847:15;24881:4;24878:1;24871:15;24898:320;24942:6;24979:1;24973:4;24969:12;24959:22;;25026:1;25020:4;25016:12;25047:18;25037:81;;25103:4;25095:6;25091:17;25081:27;;25037:81;25165:2;25157:6;25154:14;25134:18;25131:38;25128:84;;25184:18;;:::i;:::-;25128:84;24949:269;24898:320;;;:::o;25224:165::-;25364:17;25360:1;25352:6;25348:14;25341:41;25224:165;:::o;25395:366::-;25537:3;25558:67;25622:2;25617:3;25558:67;:::i;:::-;25551:74;;25634:93;25723:3;25634:93;:::i;:::-;25752:2;25747:3;25743:12;25736:19;;25395:366;;;:::o;25767:419::-;25933:4;25971:2;25960:9;25956:18;25948:26;;26020:9;26014:4;26010:20;26006:1;25995:9;25991:17;25984:47;26048:131;26174:4;26048:131;:::i;:::-;26040:139;;25767:419;;;:::o;26192:174::-;26332:26;26328:1;26320:6;26316:14;26309:50;26192:174;:::o;26372:366::-;26514:3;26535:67;26599:2;26594:3;26535:67;:::i;:::-;26528:74;;26611:93;26700:3;26611:93;:::i;:::-;26729:2;26724:3;26720:12;26713:19;;26372:366;;;:::o;26744:419::-;26910:4;26948:2;26937:9;26933:18;26925:26;;26997:9;26991:4;26987:20;26983:1;26972:9;26968:17;26961:47;27025:131;27151:4;27025:131;:::i;:::-;27017:139;;26744:419;;;:::o;27169:180::-;27217:77;27214:1;27207:88;27314:4;27311:1;27304:15;27338:4;27335:1;27328:15;27355:191;27395:3;27414:20;27432:1;27414:20;:::i;:::-;27409:25;;27448:20;27466:1;27448:20;:::i;:::-;27443:25;;27491:1;27488;27484:9;27477:16;;27512:3;27509:1;27506:10;27503:36;;;27519:18;;:::i;:::-;27503:36;27355:191;;;;:::o;27552:169::-;27692:21;27688:1;27680:6;27676:14;27669:45;27552:169;:::o;27727:366::-;27869:3;27890:67;27954:2;27949:3;27890:67;:::i;:::-;27883:74;;27966:93;28055:3;27966:93;:::i;:::-;28084:2;28079:3;28075:12;28068:19;;27727:366;;;:::o;28099:419::-;28265:4;28303:2;28292:9;28288:18;28280:26;;28352:9;28346:4;28342:20;28338:1;28327:9;28323:17;28316:47;28380:131;28506:4;28380:131;:::i;:::-;28372:139;;28099:419;;;:::o;28524:160::-;28664:12;28660:1;28652:6;28648:14;28641:36;28524:160;:::o;28690:366::-;28832:3;28853:67;28917:2;28912:3;28853:67;:::i;:::-;28846:74;;28929:93;29018:3;28929:93;:::i;:::-;29047:2;29042:3;29038:12;29031:19;;28690:366;;;:::o;29062:419::-;29228:4;29266:2;29255:9;29251:18;29243:26;;29315:9;29309:4;29305:20;29301:1;29290:9;29286:17;29279:47;29343:131;29469:4;29343:131;:::i;:::-;29335:139;;29062:419;;;:::o;29487:143::-;29544:5;29575:6;29569:13;29560:22;;29591:33;29618:5;29591:33;:::i;:::-;29487:143;;;;:::o;29636:351::-;29706:6;29755:2;29743:9;29734:7;29730:23;29726:32;29723:119;;;29761:79;;:::i;:::-;29723:119;29881:1;29906:64;29962:7;29953:6;29942:9;29938:22;29906:64;:::i;:::-;29896:74;;29852:128;29636:351;;;;:::o;29993:176::-;30133:28;30129:1;30121:6;30117:14;30110:52;29993:176;:::o;30175:366::-;30317:3;30338:67;30402:2;30397:3;30338:67;:::i;:::-;30331:74;;30414:93;30503:3;30414:93;:::i;:::-;30532:2;30527:3;30523:12;30516:19;;30175:366;;;:::o;30547:419::-;30713:4;30751:2;30740:9;30736:18;30728:26;;30800:9;30794:4;30790:20;30786:1;30775:9;30771:17;30764:47;30828:131;30954:4;30828:131;:::i;:::-;30820:139;;30547:419;;;:::o;30972:410::-;31012:7;31035:20;31053:1;31035:20;:::i;:::-;31030:25;;31069:20;31087:1;31069:20;:::i;:::-;31064:25;;31124:1;31121;31117:9;31146:30;31164:11;31146:30;:::i;:::-;31135:41;;31325:1;31316:7;31312:15;31309:1;31306:22;31286:1;31279:9;31259:83;31236:139;;31355:18;;:::i;:::-;31236:139;31020:362;30972:410;;;;:::o;31388:180::-;31436:77;31433:1;31426:88;31533:4;31530:1;31523:15;31557:4;31554:1;31547:15;31574:185;31614:1;31631:20;31649:1;31631:20;:::i;:::-;31626:25;;31665:20;31683:1;31665:20;:::i;:::-;31660:25;;31704:1;31694:35;;31709:18;;:::i;:::-;31694:35;31751:1;31748;31744:9;31739:14;;31574:185;;;;:::o;31765:237::-;31905:34;31901:1;31893:6;31889:14;31882:58;31974:20;31969:2;31961:6;31957:15;31950:45;31765:237;:::o;32008:366::-;32150:3;32171:67;32235:2;32230:3;32171:67;:::i;:::-;32164:74;;32247:93;32336:3;32247:93;:::i;:::-;32365:2;32360:3;32356:12;32349:19;;32008:366;;;:::o;32380:419::-;32546:4;32584:2;32573:9;32569:18;32561:26;;32633:9;32627:4;32623:20;32619:1;32608:9;32604:17;32597:47;32661:131;32787:4;32661:131;:::i;:::-;32653:139;;32380:419;;;:::o;32805:234::-;32945:34;32941:1;32933:6;32929:14;32922:58;33014:17;33009:2;33001:6;32997:15;32990:42;32805:234;:::o;33045:366::-;33187:3;33208:67;33272:2;33267:3;33208:67;:::i;:::-;33201:74;;33284:93;33373:3;33284:93;:::i;:::-;33402:2;33397:3;33393:12;33386:19;;33045:366;;;:::o;33417:419::-;33583:4;33621:2;33610:9;33606:18;33598:26;;33670:9;33664:4;33660:20;33656:1;33645:9;33641:17;33634:47;33698:131;33824:4;33698:131;:::i;:::-;33690:139;;33417:419;;;:::o;33842:228::-;33982:34;33978:1;33970:6;33966:14;33959:58;34051:11;34046:2;34038:6;34034:15;34027:36;33842:228;:::o;34076:366::-;34218:3;34239:67;34303:2;34298:3;34239:67;:::i;:::-;34232:74;;34315:93;34404:3;34315:93;:::i;:::-;34433:2;34428:3;34424:12;34417:19;;34076:366;;;:::o;34448:419::-;34614:4;34652:2;34641:9;34637:18;34629:26;;34701:9;34695:4;34691:20;34687:1;34676:9;34672:17;34665:47;34729:131;34855:4;34729:131;:::i;:::-;34721:139;;34448:419;;;:::o;34873:180::-;34921:77;34918:1;34911:88;35018:4;35015:1;35008:15;35042:4;35039:1;35032:15;35059:233;35098:3;35121:24;35139:5;35121:24;:::i;:::-;35112:33;;35167:66;35160:5;35157:77;35154:103;;35237:18;;:::i;:::-;35154:103;35284:1;35277:5;35273:13;35266:20;;35059:233;;;:::o;35298:182::-;35438:34;35434:1;35426:6;35422:14;35415:58;35298:182;:::o;35486:366::-;35628:3;35649:67;35713:2;35708:3;35649:67;:::i;:::-;35642:74;;35725:93;35814:3;35725:93;:::i;:::-;35843:2;35838:3;35834:12;35827:19;;35486:366;;;:::o;35858:419::-;36024:4;36062:2;36051:9;36047:18;36039:26;;36111:9;36105:4;36101:20;36097:1;36086:9;36082:17;36075:47;36139:131;36265:4;36139:131;:::i;:::-;36131:139;;35858:419;;;:::o;36283:228::-;36423:34;36419:1;36411:6;36407:14;36400:58;36492:11;36487:2;36479:6;36475:15;36468:36;36283:228;:::o;36517:366::-;36659:3;36680:67;36744:2;36739:3;36680:67;:::i;:::-;36673:74;;36756:93;36845:3;36756:93;:::i;:::-;36874:2;36869:3;36865:12;36858:19;;36517:366;;;:::o;36889:419::-;37055:4;37093:2;37082:9;37078:18;37070:26;;37142:9;37136:4;37132:20;37128:1;37117:9;37113:17;37106:47;37170:131;37296:4;37170:131;:::i;:::-;37162:139;;36889:419;;;:::o;37314:165::-;37454:17;37450:1;37442:6;37438:14;37431:41;37314:165;:::o;37485:366::-;37627:3;37648:67;37712:2;37707:3;37648:67;:::i;:::-;37641:74;;37724:93;37813:3;37724:93;:::i;:::-;37842:2;37837:3;37833:12;37826:19;;37485:366;;;:::o;37857:419::-;38023:4;38061:2;38050:9;38046:18;38038:26;;38110:9;38104:4;38100:20;38096:1;38085:9;38081:17;38074:47;38138:131;38264:4;38138:131;:::i;:::-;38130:139;;37857:419;;;:::o;38282:225::-;38422:34;38418:1;38410:6;38406:14;38399:58;38491:8;38486:2;38478:6;38474:15;38467:33;38282:225;:::o;38513:366::-;38655:3;38676:67;38740:2;38735:3;38676:67;:::i;:::-;38669:74;;38752:93;38841:3;38752:93;:::i;:::-;38870:2;38865:3;38861:12;38854:19;;38513:366;;;:::o;38885:419::-;39051:4;39089:2;39078:9;39074:18;39066:26;;39138:9;39132:4;39128:20;39124:1;39113:9;39109:17;39102:47;39166:131;39292:4;39166:131;:::i;:::-;39158:139;;38885:419;;;:::o;39310:220::-;39450:34;39446:1;39438:6;39434:14;39427:58;39519:3;39514:2;39506:6;39502:15;39495:28;39310:220;:::o;39536:366::-;39678:3;39699:67;39763:2;39758:3;39699:67;:::i;:::-;39692:74;;39775:93;39864:3;39775:93;:::i;:::-;39893:2;39888:3;39884:12;39877:19;;39536:366;;;:::o;39908:419::-;40074:4;40112:2;40101:9;40097:18;40089:26;;40161:9;40155:4;40151:20;40147:1;40136:9;40132:17;40125:47;40189:131;40315:4;40189:131;:::i;:::-;40181:139;;39908:419;;;:::o;40333:332::-;40454:4;40492:2;40481:9;40477:18;40469:26;;40505:71;40573:1;40562:9;40558:17;40549:6;40505:71;:::i;:::-;40586:72;40654:2;40643:9;40639:18;40630:6;40586:72;:::i;:::-;40333:332;;;;;:::o;40671:227::-;40811:34;40807:1;40799:6;40795:14;40788:58;40880:10;40875:2;40867:6;40863:15;40856:35;40671:227;:::o;40904:366::-;41046:3;41067:67;41131:2;41126:3;41067:67;:::i;:::-;41060:74;;41143:93;41232:3;41143:93;:::i;:::-;41261:2;41256:3;41252:12;41245:19;;40904:366;;;:::o;41276:419::-;41442:4;41480:2;41469:9;41465:18;41457:26;;41529:9;41523:4;41519:20;41515:1;41504:9;41500:17;41493:47;41557:131;41683:4;41557:131;:::i;:::-;41549:139;;41276:419;;;:::o;41701:224::-;41841:34;41837:1;41829:6;41825:14;41818:58;41910:7;41905:2;41897:6;41893:15;41886:32;41701:224;:::o;41931:366::-;42073:3;42094:67;42158:2;42153:3;42094:67;:::i;:::-;42087:74;;42170:93;42259:3;42170:93;:::i;:::-;42288:2;42283:3;42279:12;42272:19;;41931:366;;;:::o;42303:419::-;42469:4;42507:2;42496:9;42492:18;42484:26;;42556:9;42550:4;42546:20;42542:1;42531:9;42527:17;42520:47;42584:131;42710:4;42584:131;:::i;:::-;42576:139;;42303:419;;;:::o;42728:229::-;42868:34;42864:1;42856:6;42852:14;42845:58;42937:12;42932:2;42924:6;42920:15;42913:37;42728:229;:::o;42963:366::-;43105:3;43126:67;43190:2;43185:3;43126:67;:::i;:::-;43119:74;;43202:93;43291:3;43202:93;:::i;:::-;43320:2;43315:3;43311:12;43304:19;;42963:366;;;:::o;43335:419::-;43501:4;43539:2;43528:9;43524:18;43516:26;;43588:9;43582:4;43578:20;43574:1;43563:9;43559:17;43552:47;43616:131;43742:4;43616:131;:::i;:::-;43608:139;;43335:419;;;:::o;43760:634::-;43981:4;44019:2;44008:9;44004:18;43996:26;;44068:9;44062:4;44058:20;44054:1;44043:9;44039:17;44032:47;44096:108;44199:4;44190:6;44096:108;:::i;:::-;44088:116;;44251:9;44245:4;44241:20;44236:2;44225:9;44221:18;44214:48;44279:108;44382:4;44373:6;44279:108;:::i;:::-;44271:116;;43760:634;;;;;:::o;44400:148::-;44502:11;44539:3;44524:18;;44400:148;;;;:::o;44554:173::-;44694:25;44690:1;44682:6;44678:14;44671:49;44554:173;:::o;44733:402::-;44893:3;44914:85;44996:2;44991:3;44914:85;:::i;:::-;44907:92;;45008:93;45097:3;45008:93;:::i;:::-;45126:2;45121:3;45117:12;45110:19;;44733:402;;;:::o;45141:390::-;45247:3;45275:39;45308:5;45275:39;:::i;:::-;45330:89;45412:6;45407:3;45330:89;:::i;:::-;45323:96;;45428:65;45486:6;45481:3;45474:4;45467:5;45463:16;45428:65;:::i;:::-;45518:6;45513:3;45509:16;45502:23;;45251:280;45141:390;;;;:::o;45537:167::-;45677:19;45673:1;45665:6;45661:14;45654:43;45537:167;:::o;45710:402::-;45870:3;45891:85;45973:2;45968:3;45891:85;:::i;:::-;45884:92;;45985:93;46074:3;45985:93;:::i;:::-;46103:2;46098:3;46094:12;46087:19;;45710:402;;;:::o;46118:967::-;46500:3;46522:148;46666:3;46522:148;:::i;:::-;46515:155;;46687:95;46778:3;46769:6;46687:95;:::i;:::-;46680:102;;46799:148;46943:3;46799:148;:::i;:::-;46792:155;;46964:95;47055:3;47046:6;46964:95;:::i;:::-;46957:102;;47076:3;47069:10;;46118:967;;;;;:::o;47091:141::-;47140:4;47163:3;47155:11;;47186:3;47183:1;47176:14;47220:4;47217:1;47207:18;47199:26;;47091:141;;;:::o;47238:93::-;47275:6;47322:2;47317;47310:5;47306:14;47302:23;47292:33;;47238:93;;;:::o;47337:107::-;47381:8;47431:5;47425:4;47421:16;47400:37;;47337:107;;;;:::o;47450:393::-;47519:6;47569:1;47557:10;47553:18;47592:97;47622:66;47611:9;47592:97;:::i;:::-;47710:39;47740:8;47729:9;47710:39;:::i;:::-;47698:51;;47782:4;47778:9;47771:5;47767:21;47758:30;;47831:4;47821:8;47817:19;47810:5;47807:30;47797:40;;47526:317;;47450:393;;;;;:::o;47849:60::-;47877:3;47898:5;47891:12;;47849:60;;;:::o;47915:142::-;47965:9;47998:53;48016:34;48025:24;48043:5;48025:24;:::i;:::-;48016:34;:::i;:::-;47998:53;:::i;:::-;47985:66;;47915:142;;;:::o;48063:75::-;48106:3;48127:5;48120:12;;48063:75;;;:::o;48144:269::-;48254:39;48285:7;48254:39;:::i;:::-;48315:91;48364:41;48388:16;48364:41;:::i;:::-;48356:6;48349:4;48343:11;48315:91;:::i;:::-;48309:4;48302:105;48220:193;48144:269;;;:::o;48419:73::-;48464:3;48419:73;:::o;48498:189::-;48575:32;;:::i;:::-;48616:65;48674:6;48666;48660:4;48616:65;:::i;:::-;48551:136;48498:189;;:::o;48693:186::-;48753:120;48770:3;48763:5;48760:14;48753:120;;;48824:39;48861:1;48854:5;48824:39;:::i;:::-;48797:1;48790:5;48786:13;48777:22;;48753:120;;;48693:186;;:::o;48885:543::-;48986:2;48981:3;48978:11;48975:446;;;49020:38;49052:5;49020:38;:::i;:::-;49104:29;49122:10;49104:29;:::i;:::-;49094:8;49090:44;49287:2;49275:10;49272:18;49269:49;;;49308:8;49293:23;;49269:49;49331:80;49387:22;49405:3;49387:22;:::i;:::-;49377:8;49373:37;49360:11;49331:80;:::i;:::-;48990:431;;48975:446;48885:543;;;:::o;49434:117::-;49488:8;49538:5;49532:4;49528:16;49507:37;;49434:117;;;;:::o;49557:169::-;49601:6;49634:51;49682:1;49678:6;49670:5;49667:1;49663:13;49634:51;:::i;:::-;49630:56;49715:4;49709;49705:15;49695:25;;49608:118;49557:169;;;;:::o;49731:295::-;49807:4;49953:29;49978:3;49972:4;49953:29;:::i;:::-;49945:37;;50015:3;50012:1;50008:11;50002:4;49999:21;49991:29;;49731:295;;;;:::o;50031:1395::-;50148:37;50181:3;50148:37;:::i;:::-;50250:18;50242:6;50239:30;50236:56;;;50272:18;;:::i;:::-;50236:56;50316:38;50348:4;50342:11;50316:38;:::i;:::-;50401:67;50461:6;50453;50447:4;50401:67;:::i;:::-;50495:1;50519:4;50506:17;;50551:2;50543:6;50540:14;50568:1;50563:618;;;;51225:1;51242:6;51239:77;;;51291:9;51286:3;51282:19;51276:26;51267:35;;51239:77;51342:67;51402:6;51395:5;51342:67;:::i;:::-;51336:4;51329:81;51198:222;50533:887;;50563:618;50615:4;50611:9;50603:6;50599:22;50649:37;50681:4;50649:37;:::i;:::-;50708:1;50722:208;50736:7;50733:1;50730:14;50722:208;;;50815:9;50810:3;50806:19;50800:26;50792:6;50785:42;50866:1;50858:6;50854:14;50844:24;;50913:2;50902:9;50898:18;50885:31;;50759:4;50756:1;50752:12;50747:17;;50722:208;;;50958:6;50949:7;50946:19;50943:179;;;51016:9;51011:3;51007:19;51001:26;51059:48;51101:4;51093:6;51089:17;51078:9;51059:48;:::i;:::-;51051:6;51044:64;50966:156;50943:179;51168:1;51164;51156:6;51152:14;51148:22;51142:4;51135:36;50570:611;;;50533:887;;50123:1303;;;50031:1395;;:::o;51432:222::-;51572:34;51568:1;51560:6;51556:14;51549:58;51641:5;51636:2;51628:6;51624:15;51617:30;51432:222;:::o;51660:366::-;51802:3;51823:67;51887:2;51882:3;51823:67;:::i;:::-;51816:74;;51899:93;51988:3;51899:93;:::i;:::-;52017:2;52012:3;52008:12;52001:19;;51660:366;;;:::o;52032:419::-;52198:4;52236:2;52225:9;52221:18;52213:26;;52285:9;52279:4;52275:20;52271:1;52260:9;52256:17;52249:47;52313:131;52439:4;52313:131;:::i;:::-;52305:139;;52032:419;;;:::o;52457:223::-;52597:34;52593:1;52585:6;52581:14;52574:58;52666:6;52661:2;52653:6;52649:15;52642:31;52457:223;:::o;52686:366::-;52828:3;52849:67;52913:2;52908:3;52849:67;:::i;:::-;52842:74;;52925:93;53014:3;52925:93;:::i;:::-;53043:2;53038:3;53034:12;53027:19;;52686:366;;;:::o;53058:419::-;53224:4;53262:2;53251:9;53247:18;53239:26;;53311:9;53305:4;53301:20;53297:1;53286:9;53282:17;53275:47;53339:131;53465:4;53339:131;:::i;:::-;53331:139;;53058:419;;;:::o;53483:228::-;53623:34;53619:1;53611:6;53607:14;53600:58;53692:11;53687:2;53679:6;53675:15;53668:36;53483:228;:::o;53717:366::-;53859:3;53880:67;53944:2;53939:3;53880:67;:::i;:::-;53873:74;;53956:93;54045:3;53956:93;:::i;:::-;54074:2;54069:3;54065:12;54058:19;;53717:366;;;:::o;54089:419::-;54255:4;54293:2;54282:9;54278:18;54270:26;;54342:9;54336:4;54332:20;54328:1;54317:9;54313:17;54306:47;54370:131;54496:4;54370:131;:::i;:::-;54362:139;;54089:419;;;:::o;54514:98::-;54565:6;54599:5;54593:12;54583:22;;54514:98;;;:::o;54618:168::-;54701:11;54735:6;54730:3;54723:19;54775:4;54770:3;54766:14;54751:29;;54618:168;;;;:::o;54792:373::-;54878:3;54906:38;54938:5;54906:38;:::i;:::-;54960:70;55023:6;55018:3;54960:70;:::i;:::-;54953:77;;55039:65;55097:6;55092:3;55085:4;55078:5;55074:16;55039:65;:::i;:::-;55129:29;55151:6;55129:29;:::i;:::-;55124:3;55120:39;55113:46;;54882:283;54792:373;;;;:::o;55171:751::-;55394:4;55432:3;55421:9;55417:19;55409:27;;55446:71;55514:1;55503:9;55499:17;55490:6;55446:71;:::i;:::-;55527:72;55595:2;55584:9;55580:18;55571:6;55527:72;:::i;:::-;55609;55677:2;55666:9;55662:18;55653:6;55609:72;:::i;:::-;55691;55759:2;55748:9;55744:18;55735:6;55691:72;:::i;:::-;55811:9;55805:4;55801:20;55795:3;55784:9;55780:19;55773:49;55839:76;55910:4;55901:6;55839:76;:::i;:::-;55831:84;;55171:751;;;;;;;;:::o;55928:141::-;55984:5;56015:6;56009:13;56000:22;;56031:32;56057:5;56031:32;:::i;:::-;55928:141;;;;:::o;56075:349::-;56144:6;56193:2;56181:9;56172:7;56168:23;56164:32;56161:119;;;56199:79;;:::i;:::-;56161:119;56319:1;56344:63;56399:7;56390:6;56379:9;56375:22;56344:63;:::i;:::-;56334:73;;56290:127;56075:349;;;;:::o;56430:106::-;56474:8;56523:5;56518:3;56514:15;56493:36;;56430:106;;;:::o;56542:183::-;56577:3;56615:1;56597:16;56594:23;56591:128;;;56653:1;56650;56647;56632:23;56675:34;56706:1;56700:8;56675:34;:::i;:::-;56668:41;;56591:128;56542:183;:::o;56731:711::-;56770:3;56808:4;56790:16;56787:26;56816:5;56784:39;56845:20;;:::i;:::-;56920:1;56902:16;56898:24;56895:1;56889:4;56874:49;56953:4;56947:11;57052:16;57045:4;57037:6;57033:17;57030:39;56997:18;56989:6;56986:30;56970:113;56967:146;;;57098:5;;;;56967:146;57144:6;57138:4;57134:17;57180:3;57174:10;57207:18;57199:6;57196:30;57193:43;;;57229:5;;;;;;57193:43;57277:6;57270:4;57265:3;57261:14;57257:27;57336:1;57318:16;57314:24;57308:4;57304:35;57299:3;57296:44;57293:57;;;57343:5;;;;;;;57293:57;57360;57408:6;57402:4;57398:17;57390:6;57386:30;57380:4;57360:57;:::i;:::-;57433:3;57426:10;;56774:668;;;;;56731:711;;:::o;57448:239::-;57588:34;57584:1;57576:6;57572:14;57565:58;57657:22;57652:2;57644:6;57640:15;57633:47;57448:239;:::o;57693:366::-;57835:3;57856:67;57920:2;57915:3;57856:67;:::i;:::-;57849:74;;57932:93;58021:3;57932:93;:::i;:::-;58050:2;58045:3;58041:12;58034:19;;57693:366;;;:::o;58065:419::-;58231:4;58269:2;58258:9;58254:18;58246:26;;58318:9;58312:4;58308:20;58304:1;58293:9;58289:17;58282:47;58346:131;58472:4;58346:131;:::i;:::-;58338:139;;58065:419;;;:::o;58490:227::-;58630:34;58626:1;58618:6;58614:14;58607:58;58699:10;58694:2;58686:6;58682:15;58675:35;58490:227;:::o;58723:366::-;58865:3;58886:67;58950:2;58945:3;58886:67;:::i;:::-;58879:74;;58962:93;59051:3;58962:93;:::i;:::-;59080:2;59075:3;59071:12;59064:19;;58723:366;;;:::o;59095:419::-;59261:4;59299:2;59288:9;59284:18;59276:26;;59348:9;59342:4;59338:20;59334:1;59323:9;59319:17;59312:47;59376:131;59502:4;59376:131;:::i;:::-;59368:139;;59095:419;;;:::o;59520:1053::-;59843:4;59881:3;59870:9;59866:19;59858:27;;59895:71;59963:1;59952:9;59948:17;59939:6;59895:71;:::i;:::-;59976:72;60044:2;60033:9;60029:18;60020:6;59976:72;:::i;:::-;60095:9;60089:4;60085:20;60080:2;60069:9;60065:18;60058:48;60123:108;60226:4;60217:6;60123:108;:::i;:::-;60115:116;;60278:9;60272:4;60268:20;60263:2;60252:9;60248:18;60241:48;60306:108;60409:4;60400:6;60306:108;:::i;:::-;60298:116;;60462:9;60456:4;60452:20;60446:3;60435:9;60431:19;60424:49;60490:76;60561:4;60552:6;60490:76;:::i;:::-;60482:84;;59520:1053;;;;;;;;:::o;60579:171::-;60618:3;60641:24;60659:5;60641:24;:::i;:::-;60632:33;;60687:4;60680:5;60677:15;60674:41;;60695:18;;:::i;:::-;60674:41;60742:1;60735:5;60731:13;60724:20;;60579:171;;;:::o;60756:182::-;60896:34;60892:1;60884:6;60880:14;60873:58;60756:182;:::o;60944:366::-;61086:3;61107:67;61171:2;61166:3;61107:67;:::i;:::-;61100:74;;61183:93;61272:3;61183:93;:::i;:::-;61301:2;61296:3;61292:12;61285:19;;60944:366;;;:::o;61316:419::-;61482:4;61520:2;61509:9;61505:18;61497:26;;61569:9;61563:4;61559:20;61555:1;61544:9;61540:17;61533:47;61597:131;61723:4;61597:131;:::i;:::-;61589:139;;61316:419;;;:::o;61741:194::-;61781:4;61801:20;61819:1;61801:20;:::i;:::-;61796:25;;61835:20;61853:1;61835:20;:::i;:::-;61830:25;;61879:1;61876;61872:9;61864:17;;61903:1;61897:4;61894:11;61891:37;;;61908:18;;:::i;:::-;61891:37;61741:194;;;;:::o

Swarm Source

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