ETH Price: $3,058.57 (+1.14%)
Gas: 3 Gwei

Buckets Club (BUCKETS)
 

Overview

TokenID

438

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Buckets Club is an NFT project consisting of 1,000 unique characters based on the iconic Buckets logo from Malbon Golf. Owning a Bucket gives you access to an exclusive club of holders with added value that grows over time, with full transparency on the Ethereum blockchain.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BucketsClub

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-16
*/

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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


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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
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
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 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);
            }
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
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.
        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. 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);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
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;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
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);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
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;
    }
}

// File: contracts/BucketsClub.sol


pragma solidity ^0.8.0;



contract BucketsClub is ERC1155, Ownable {
    string public constant name = "Buckets Club";
    string public constant symbol = "BUCKETS";

    uint32 public totalSupply = 0;
    uint32 public constant maxSupply = 1000;
    uint256 public constant unitPrice = 0.3 ether;

    uint32 public preSaleStart = 1639616400;
    uint32 public publicSaleStart = 1639702800;

    uint32 public constant preSaleMaxPerAddress = 1;
    uint32 public constant publicSaleMaxPerAddress = 5;

    address private signerAddress = 0xbF645f208E06053a586ee6b23F2b5c430753BACc;

    mapping(address => uint256) private _tokensMintedByAddress;

    constructor(string memory uri) ERC1155(uri) {}

    function setURI(string memory uri) public onlyOwner {
        _setURI(uri);
    }

    function setSignerAddress(address addr) external onlyOwner {
        signerAddress = addr;
    }

    function setPreSaleStart(uint32 timestamp) public onlyOwner {
        preSaleStart = timestamp;
    }

    function setPublicSaleStart(uint32 timestamp) public onlyOwner {
        publicSaleStart = timestamp;
    }

    function preSaleIsActive() public view returns (bool) {
        return
            preSaleStart <= block.timestamp &&
            publicSaleStart >= block.timestamp;
    }

    function publicSaleIsActive() public view returns (bool) {
        return publicSaleStart <= block.timestamp;
    }

    function isValidAccessMessage(
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal view returns (bool) {
        bytes32 hash = keccak256(abi.encodePacked(msg.sender));
        return
            signerAddress ==
            ecrecover(
                keccak256(
                    abi.encodePacked("\x19Ethereum Signed Message:\n32", hash)
                ),
                v,
                r,
                s
            );
    }

    function mint(address to, uint32 count) internal {
        if (count > 1) {
            uint256[] memory ids = new uint256[](uint256(count));
            uint256[] memory amounts = new uint256[](uint256(count));

            for (uint32 i = 0; i < count; i++) {
                ids[i] = totalSupply + i;
                amounts[i] = 1;
            }

            _mintBatch(to, ids, amounts, "");
        } else {
            _mint(to, totalSupply, 1, "");
        }

        totalSupply += count;
    }

    function preSaleMint(
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint32 count
    ) external payable {
        require(preSaleIsActive(), "Pre-sale is not active.");
        require(isValidAccessMessage(v, r, s), "Not whitelisted.");
        require(count > 0, "Count must be greater than 0.");
        require(
            totalSupply + count <= maxSupply,
            "Count exceeds the maximum allowed supply."
        );
        require(
            _tokensMintedByAddress[msg.sender] + count <= preSaleMaxPerAddress,
            "Count exceeds the maximum allowed per address."
        );
        require(msg.value >= unitPrice * count, "Not enough ether.");

        mint(msg.sender, count);
        _tokensMintedByAddress[msg.sender] += count;
    }

    function publicSaleMint(uint32 count) external payable {
        require(publicSaleIsActive(), "Public sale is not active.");
        require(count > 0, "Count must be greater than 0.");
        require(
            totalSupply + count <= maxSupply,
            "Count exceeds the maximum allowed supply."
        );
        require(
            _tokensMintedByAddress[msg.sender] + count <=
                publicSaleMaxPerAddress,
            "Count exceeds the maximum allowed per address."
        );
        require(msg.value >= unitPrice * count, "Not enough ether.");

        mint(msg.sender, count);
        _tokensMintedByAddress[msg.sender] += count;
    }

    function batchMint(address[] memory addresses) external onlyOwner {
        require(
            totalSupply + addresses.length <= maxSupply,
            "Count exceeds the maximum allowed supply."
        );

        for (uint256 i = 0; i < addresses.length; i++) {
            mint(addresses[i], 1);
        }
    }

    function withdraw() external onlyOwner {
        address[3] memory addresses = [
            0xcC090398DC4dEA02f657168914B9ef3E828Ec81a,
            0x930A4fDCbA0f7E2101e91CB3Bc2CA3b26e2a80a3,
            0xdAD1EF6384492059Db601C22502F3C1E1C04A4CF
        ];

        uint32[3] memory shares = [uint32(7500), uint32(1500), uint32(1000)];

        uint256 balance = address(this).balance;

        for (uint32 i = 0; i < addresses.length; i++) {
            uint256 amount = i == addresses.length - 1
                ? address(this).balance
                : (balance * shares[i]) / 10000;
            payable(addresses[i]).transfer(amount);
        }
    }
}

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":"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":[{"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":"addresses","type":"address[]"}],"name":"batchMint","outputs":[],"stateMutability":"nonpayable","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":"uint32","name":"","type":"uint32"}],"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":"preSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSaleMaxPerAddress","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint32","name":"count","type":"uint32"}],"name":"preSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"preSaleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleMaxPerAddress","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint32","name":"count","type":"uint32"}],"name":"publicSaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicSaleStart","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"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":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPreSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"timestamp","type":"uint32"}],"name":"setPublicSaleStart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSignerAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"uri","type":"string"}],"name":"setURI","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":"totalSupply","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unitPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600360146101000a81548163ffffffff021916908363ffffffff1602179055506361ba8f90600360186101000a81548163ffffffff021916908363ffffffff1602179055506361bbe1106003601c6101000a81548163ffffffff021916908363ffffffff16021790555073bf645f208e06053a586ee6b23f2b5c430753bacc600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000d257600080fd5b50604051620050b3380380620050b38339818101604052810190620000f891906200034a565b806200010a816200013260201b60201c565b506200012b6200011f6200014e60201b60201c565b6200015660201b60201c565b506200051f565b80600290805190602001906200014a9291906200021c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022a9062000430565b90600052602060002090601f0160209004810192826200024e57600085556200029a565b82601f106200026957805160ff19168380011785556200029a565b828001600101855582156200029a579182015b82811115620002995782518255916020019190600101906200027c565b5b509050620002a99190620002ad565b5090565b5b80821115620002c8576000816000905550600101620002ae565b5090565b6000620002e3620002dd84620003c4565b6200039b565b905082815260208101848484011115620003025762000301620004ff565b5b6200030f848285620003fa565b509392505050565b600082601f8301126200032f576200032e620004fa565b5b815162000341848260208601620002cc565b91505092915050565b60006020828403121562000363576200036262000509565b5b600082015167ffffffffffffffff81111562000384576200038362000504565b5b620003928482850162000317565b91505092915050565b6000620003a7620003ba565b9050620003b5828262000466565b919050565b6000604051905090565b600067ffffffffffffffff821115620003e257620003e1620004cb565b5b620003ed826200050e565b9050602081019050919050565b60005b838110156200041a578082015181840152602081019050620003fd565b838111156200042a576000848401525b50505050565b600060028204905060018216806200044957607f821691505b6020821081141562000460576200045f6200049c565b5b50919050565b62000471826200050e565b810181811067ffffffffffffffff82111715620004935762000492620004cb565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b614b84806200052f6000396000f3fe6080604052600436106101cc5760003560e01c806360120095116100f7578063a9d4a54e11610095578063e73faa2d11610064578063e73faa2d14610623578063e985e9c51461064e578063f242432a1461068b578063f2fde38b146106b4576101cc565b8063a9d4a54e14610588578063cc21f485146105b3578063d5abeb01146105cf578063d67b06c1146105fa576101cc565b80638da5cb5b116100d15780638da5cb5b146104e05780639039903c1461050b57806395d89b4114610534578063a22cb4651461055f576101cc565b80636012009514610482578063715018a6146104ad578063892f5f6f146104c4576101cc565b80630fcf2e751161016f5780633360caa01161013e5780633360caa0146103da5780633ccfd60b1461040557806340fa89d91461041c5780634e1273f414610445576101cc565b80630fcf2e751461033057806318160ddd1461035b5780631f0234d8146103865780632eb2c2d6146103b1576101cc565b8063046dc166116101ab578063046dc1661461027457806306fdde031461029d5780630d5624b3146102c85780630e89341c146102f3576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806302fe53051461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f3919061332c565b6106dd565b6040516102059190613e68565b60405180910390f35b34801561021a57600080fd5b506102356004803603810190610230919061342d565b6107a6565b6040516102429190613b66565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d9190613487565b610888565b005b34801561028057600080fd5b5061029b60048036038101906102969190613119565b610910565b005b3480156102a957600080fd5b506102b26109d0565b6040516102bf9190613bc6565b60405180910390f35b3480156102d457600080fd5b506102dd610a09565b6040516102ea9190613eac565b60405180910390f35b3480156102ff57600080fd5b5061031a600480360381019061031591906134d0565b610a1f565b6040516103279190613bc6565b60405180910390f35b34801561033c57600080fd5b50610345610ab3565b6040516103529190613b66565b60405180910390f35b34801561036757600080fd5b50610370610ad6565b60405161037d9190613eac565b60405180910390f35b34801561039257600080fd5b5061039b610aec565b6040516103a89190613b66565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613186565b610b33565b005b3480156103e657600080fd5b506103ef610bd4565b6040516103fc9190613eac565b60405180910390f35b34801561041157600080fd5b5061041a610bea565b005b34801561042857600080fd5b50610443600480360381019061043e91906134fd565b610e84565b005b34801561045157600080fd5b5061046c600480360381019061046791906133b5565b610f24565b6040516104799190613b0d565b60405180910390f35b34801561048e57600080fd5b5061049761103d565b6040516104a49190613eac565b60405180910390f35b3480156104b957600080fd5b506104c2611042565b005b6104de60048036038101906104d991906134fd565b6110ca565b005b3480156104ec57600080fd5b506104f5611327565b6040516105029190613a30565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d91906134fd565b611351565b005b34801561054057600080fd5b506105496113f1565b6040516105569190613bc6565b60405180910390f35b34801561056b57600080fd5b50610586600480360381019061058191906132ec565b61142a565b005b34801561059457600080fd5b5061059d611440565b6040516105aa9190613eac565b60405180910390f35b6105cd60048036038101906105c8919061352a565b611445565b005b3480156105db57600080fd5b506105e46116ef565b6040516105f19190613eac565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c919061336c565b6116f5565b005b34801561062f57600080fd5b50610638611828565b6040516106459190613e68565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190613146565b611834565b6040516106829190613b66565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190613255565b6118c8565b005b3480156106c057600080fd5b506106db60048036038101906106d69190613119565b611969565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074590613c48565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610881575061088082611a61565b5b9050919050565b610890611acb565b73ffffffffffffffffffffffffffffffffffffffff166108ae611327565b73ffffffffffffffffffffffffffffffffffffffff1614610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90613da8565b60405180910390fd5b61090d81611ad3565b50565b610918611acb565b73ffffffffffffffffffffffffffffffffffffffff16610936611327565b73ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390613da8565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600c81526020017f4275636b65747320436c7562000000000000000000000000000000000000000081525081565b600360189054906101000a900463ffffffff1681565b606060028054610a2e9061424e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5a9061424e565b8015610aa75780601f10610a7c57610100808354040283529160200191610aa7565b820191906000526020600020905b815481529060010190602001808311610a8a57829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610b2e5750426003601c9054906101000a900463ffffffff1663ffffffff1610155b905090565b610b3b611acb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b815750610b8085610b7b611acb565b611834565b5b610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613d28565b60405180910390fd5b610bcd8585858585611aed565b5050505050565b6003601c9054906101000a900463ffffffff1681565b610bf2611acb565b73ffffffffffffffffffffffffffffffffffffffff16610c10611327565b73ffffffffffffffffffffffffffffffffffffffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613da8565b60405180910390fd5b6000604051806060016040528073cc090398dc4dea02f657168914b9ef3e828ec81a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173930a4fdcba0f7e2101e91cb3bc2ca3b26e2a80a373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173dad1ef6384492059db601c22502f3c1e1c04a4cf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060600160405280611d4c63ffffffff1663ffffffff1681526020016105dc63ffffffff1663ffffffff1681526020016103e863ffffffff1663ffffffff168152509050600047905060005b60038163ffffffff161015610e7e57600060016003610db5919061413d565b8263ffffffff1614610e0257612710848363ffffffff1660038110610ddd57610ddc6143e2565b5b602002015163ffffffff1684610df391906140e3565b610dfd91906140b2565b610e04565b475b9050848263ffffffff1660038110610e1f57610e1e6143e2565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e69573d6000803e3d6000fd5b50508080610e76906142fa565b915050610d96565b50505050565b610e8c611acb565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611327565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613da8565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b60608151835114610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190613e08565b60405180910390fd5b6000835167ffffffffffffffff811115610f8757610f86614411565b5b604051908082528060200260200182016040528015610fb55781602001602082028036833780820191505090505b50905060005b845181101561103257611002858281518110610fda57610fd96143e2565b5b6020026020010151858381518110610ff557610ff46143e2565b5b60200260200101516106dd565b828281518110611015576110146143e2565b5b6020026020010181815250508061102b906142b1565b9050610fbb565b508091505092915050565b600181565b61104a611acb565b73ffffffffffffffffffffffffffffffffffffffff16611068611327565b73ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613da8565b60405180910390fd5b6110c86000611e01565b565b6110d2610ab3565b611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613ca8565b60405180910390fd5b60008163ffffffff161161115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190613cc8565b60405180910390fd5b6103e863ffffffff1681600360149054906101000a900463ffffffff166111819190614078565b63ffffffff1611156111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90613d88565b60405180910390fd5b600563ffffffff168163ffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112219190614022565b1115611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990613c28565b60405180910390fd5b8063ffffffff16670429d069189e000061127c91906140e3565b3410156112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590613ce8565b60405180910390fd5b6112c83382611ec7565b8063ffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461131d9190614022565b9250508190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611359611acb565b73ffffffffffffffffffffffffffffffffffffffff16611377611327565b73ffffffffffffffffffffffffffffffffffffffff16146113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490613da8565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600781526020017f4255434b4554530000000000000000000000000000000000000000000000000081525081565b61143c611435611acb565b83836120b1565b5050565b600581565b61144d610aec565b61148c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148390613d48565b60405180910390fd5b61149784848461221e565b6114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90613dc8565b60405180910390fd5b60008163ffffffff161161151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613cc8565b60405180910390fd5b6103e863ffffffff1681600360149054906101000a900463ffffffff166115469190614078565b63ffffffff16111561158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613d88565b60405180910390fd5b600163ffffffff168163ffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115e69190614022565b1115611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613c28565b60405180910390fd5b8063ffffffff16670429d069189e000061164191906140e3565b341015611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613ce8565b60405180910390fd5b61168d3382611ec7565b8063ffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116e29190614022565b9250508190555050505050565b6103e881565b6116fd611acb565b73ffffffffffffffffffffffffffffffffffffffff1661171b611327565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890613da8565b60405180910390fd5b6103e863ffffffff168151600360149054906101000a900463ffffffff1663ffffffff1661179f9190614022565b11156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613d88565b60405180910390fd5b60005b815181101561182457611811828281518110611802576118016143e2565b5b60200260200101516001611ec7565b808061181c906142b1565b9150506117e3565b5050565b670429d069189e000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118d0611acb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611916575061191585611910611acb565b611834565b5b611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90613c88565b60405180910390fd5b6119628585858585612319565b5050505050565b611971611acb565b73ffffffffffffffffffffffffffffffffffffffff1661198f611327565b73ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc90613da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90613c68565b60405180910390fd5b611a5e81611e01565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611ae9929190612db2565b5050565b8151835114611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2890613e28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9890613d08565b60405180910390fd5b6000611bab611acb565b9050611bbb81878787878761259b565b60005b8451811015611d6c576000858281518110611bdc57611bdb6143e2565b5b602002602001015190506000858381518110611bfb57611bfa6143e2565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390613d68565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d519190614022565b9250508190555050505080611d65906142b1565b9050611bbe565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611de3929190613b2f565b60405180910390a4611df98187878787876125a3565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60018163ffffffff1611156120395760008163ffffffff1667ffffffffffffffff811115611ef857611ef7614411565b5b604051908082528060200260200182016040528015611f265781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611f4b57611f4a614411565b5b604051908082528060200260200182016040528015611f795781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff1610156120165780600360149054906101000a900463ffffffff16611fb19190614078565b63ffffffff16838263ffffffff1681518110611fd057611fcf6143e2565b5b6020026020010181815250506001828263ffffffff1681518110611ff757611ff66143e2565b5b602002602001018181525050808061200e906142fa565b915050611f7f565b506120328483836040518060200160405280600081525061278a565b505061206e565b61206d82600360149054906101000a900463ffffffff1663ffffffff166001604051806020016040528060008152506129a8565b5b80600360148282829054906101000a900463ffffffff1661208f9190614078565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790613de8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122119190613b66565b60405180910390a3505050565b6000803360405160200161223291906139ef565b60405160208183030381529060405280519060200120905060018160405160200161225d9190613a0a565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516122939493929190613b81565b6020604051602081039080840390855afa1580156122b5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238090613d08565b60405180910390fd5b6000612393611acb565b90506123b38187876123a488612b3e565b6123ad88612b3e565b8761259b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561244a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244190613d68565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ff9190614022565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161257c929190613e83565b60405180910390a4612592828888888888612bb8565b50505050505050565b505050505050565b6125c28473ffffffffffffffffffffffffffffffffffffffff16612d9f565b15612782578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612608959493929190613a4b565b602060405180830381600087803b15801561262257600080fd5b505af192505050801561265357506040513d601f19601f82011682018060405250810190612650919061345a565b60015b6126f95761265f614440565b806308c379a014156126bc5750612674614a17565b8061267f57506126be565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b39190613bc6565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f090613be8565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790613c08565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190613e48565b60405180910390fd5b815183511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283590613e28565b60405180910390fd5b6000612848611acb565b90506128598160008787878761259b565b60005b845181101561291257838181518110612878576128776143e2565b5b6020026020010151600080878481518110612896576128956143e2565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f89190614022565b92505081905550808061290a906142b1565b91505061285c565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161298a929190613b2f565b60405180910390a46129a1816000878787876125a3565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90613e48565b60405180910390fd5b6000612a22611acb565b9050612a4381600087612a3488612b3e565b612a3d88612b3e565b8761259b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aa29190614022565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612b20929190613e83565b60405180910390a4612b3781600087878787612bb8565b5050505050565b60606000600167ffffffffffffffff811115612b5d57612b5c614411565b5b604051908082528060200260200182016040528015612b8b5781602001602082028036833780820191505090505b5090508281600081518110612ba357612ba26143e2565b5b60200260200101818152505080915050919050565b612bd78473ffffffffffffffffffffffffffffffffffffffff16612d9f565b15612d97578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612c1d959493929190613ab3565b602060405180830381600087803b158015612c3757600080fd5b505af1925050508015612c6857506040513d601f19601f82011682018060405250810190612c65919061345a565b60015b612d0e57612c74614440565b806308c379a01415612cd15750612c89614a17565b80612c945750612cd3565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc89190613bc6565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0590613be8565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90613c08565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612dbe9061424e565b90600052602060002090601f016020900481019282612de05760008555612e27565b82601f10612df957805160ff1916838001178555612e27565b82800160010185558215612e27579182015b82811115612e26578251825591602001919060010190612e0b565b5b509050612e349190612e38565b5090565b5b80821115612e51576000816000905550600101612e39565b5090565b6000612e68612e6384613eec565b613ec7565b90508083825260208201905082856020860282011115612e8b57612e8a614467565b5b60005b85811015612ebb5781612ea18882612fb9565b845260208401935060208301925050600181019050612e8e565b5050509392505050565b6000612ed8612ed384613f18565b613ec7565b90508083825260208201905082856020860282011115612efb57612efa614467565b5b60005b85811015612f2b5781612f1188826130da565b845260208401935060208301925050600181019050612efe565b5050509392505050565b6000612f48612f4384613f44565b613ec7565b905082815260208101848484011115612f6457612f6361446c565b5b612f6f84828561420c565b509392505050565b6000612f8a612f8584613f75565b613ec7565b905082815260208101848484011115612fa657612fa561446c565b5b612fb184828561420c565b509392505050565b600081359050612fc881614aad565b92915050565b600082601f830112612fe357612fe2614462565b5b8135612ff3848260208601612e55565b91505092915050565b600082601f83011261301157613010614462565b5b8135613021848260208601612ec5565b91505092915050565b60008135905061303981614ac4565b92915050565b60008135905061304e81614adb565b92915050565b60008135905061306381614af2565b92915050565b60008151905061307881614af2565b92915050565b600082601f83011261309357613092614462565b5b81356130a3848260208601612f35565b91505092915050565b600082601f8301126130c1576130c0614462565b5b81356130d1848260208601612f77565b91505092915050565b6000813590506130e981614b09565b92915050565b6000813590506130fe81614b20565b92915050565b60008135905061311381614b37565b92915050565b60006020828403121561312f5761312e614476565b5b600061313d84828501612fb9565b91505092915050565b6000806040838503121561315d5761315c614476565b5b600061316b85828601612fb9565b925050602061317c85828601612fb9565b9150509250929050565b600080600080600060a086880312156131a2576131a1614476565b5b60006131b088828901612fb9565b95505060206131c188828901612fb9565b945050604086013567ffffffffffffffff8111156131e2576131e1614471565b5b6131ee88828901612ffc565b935050606086013567ffffffffffffffff81111561320f5761320e614471565b5b61321b88828901612ffc565b925050608086013567ffffffffffffffff81111561323c5761323b614471565b5b6132488882890161307e565b9150509295509295909350565b600080600080600060a0868803121561327157613270614476565b5b600061327f88828901612fb9565b955050602061329088828901612fb9565b94505060406132a1888289016130da565b93505060606132b2888289016130da565b925050608086013567ffffffffffffffff8111156132d3576132d2614471565b5b6132df8882890161307e565b9150509295509295909350565b6000806040838503121561330357613302614476565b5b600061331185828601612fb9565b92505060206133228582860161302a565b9150509250929050565b6000806040838503121561334357613342614476565b5b600061335185828601612fb9565b9250506020613362858286016130da565b9150509250929050565b60006020828403121561338257613381614476565b5b600082013567ffffffffffffffff8111156133a05761339f614471565b5b6133ac84828501612fce565b91505092915050565b600080604083850312156133cc576133cb614476565b5b600083013567ffffffffffffffff8111156133ea576133e9614471565b5b6133f685828601612fce565b925050602083013567ffffffffffffffff81111561341757613416614471565b5b61342385828601612ffc565b9150509250929050565b60006020828403121561344357613442614476565b5b600061345184828501613054565b91505092915050565b6000602082840312156134705761346f614476565b5b600061347e84828501613069565b91505092915050565b60006020828403121561349d5761349c614476565b5b600082013567ffffffffffffffff8111156134bb576134ba614471565b5b6134c7848285016130ac565b91505092915050565b6000602082840312156134e6576134e5614476565b5b60006134f4848285016130da565b91505092915050565b60006020828403121561351357613512614476565b5b6000613521848285016130ef565b91505092915050565b6000806000806080858703121561354457613543614476565b5b600061355287828801613104565b94505060206135638782880161303f565b93505060406135748782880161303f565b9250506060613585878288016130ef565b91505092959194509250565b600061359d83836139b3565b60208301905092915050565b6135b281614171565b82525050565b6135c96135c482614171565b614327565b82525050565b60006135da82613fb6565b6135e48185613fe4565b93506135ef83613fa6565b8060005b838110156136205781516136078882613591565b975061361283613fd7565b9250506001810190506135f3565b5085935050505092915050565b61363681614183565b82525050565b6136458161418f565b82525050565b61365c6136578261418f565b614339565b82525050565b600061366d82613fc1565b6136778185613ff5565b935061368781856020860161421b565b6136908161447b565b840191505092915050565b60006136a682613fcc565b6136b08185614006565b93506136c081856020860161421b565b6136c98161447b565b840191505092915050565b60006136e1603483614006565b91506136ec826144a6565b604082019050919050565b6000613704602883614006565b915061370f826144f5565b604082019050919050565b6000613727601c83614017565b915061373282614544565b601c82019050919050565b600061374a602e83614006565b91506137558261456d565b604082019050919050565b600061376d602b83614006565b9150613778826145bc565b604082019050919050565b6000613790602683614006565b915061379b8261460b565b604082019050919050565b60006137b3602983614006565b91506137be8261465a565b604082019050919050565b60006137d6601a83614006565b91506137e1826146a9565b602082019050919050565b60006137f9601d83614006565b9150613804826146d2565b602082019050919050565b600061381c601183614006565b9150613827826146fb565b602082019050919050565b600061383f602583614006565b915061384a82614724565b604082019050919050565b6000613862603283614006565b915061386d82614773565b604082019050919050565b6000613885601783614006565b9150613890826147c2565b602082019050919050565b60006138a8602a83614006565b91506138b3826147eb565b604082019050919050565b60006138cb602983614006565b91506138d68261483a565b604082019050919050565b60006138ee602083614006565b91506138f982614889565b602082019050919050565b6000613911601083614006565b915061391c826148b2565b602082019050919050565b6000613934602983614006565b915061393f826148db565b604082019050919050565b6000613957602983614006565b91506139628261492a565b604082019050919050565b600061397a602883614006565b915061398582614979565b604082019050919050565b600061399d602183614006565b91506139a8826149c8565b604082019050919050565b6139bc816141e5565b82525050565b6139cb816141e5565b82525050565b6139da816141ef565b82525050565b6139e9816141ff565b82525050565b60006139fb82846135b8565b60148201915081905092915050565b6000613a158261371a565b9150613a21828461364b565b60208201915081905092915050565b6000602082019050613a4560008301846135a9565b92915050565b600060a082019050613a6060008301886135a9565b613a6d60208301876135a9565b8181036040830152613a7f81866135cf565b90508181036060830152613a9381856135cf565b90508181036080830152613aa78184613662565b90509695505050505050565b600060a082019050613ac860008301886135a9565b613ad560208301876135a9565b613ae260408301866139c2565b613aef60608301856139c2565b8181036080830152613b018184613662565b90509695505050505050565b60006020820190508181036000830152613b2781846135cf565b905092915050565b60006040820190508181036000830152613b4981856135cf565b90508181036020830152613b5d81846135cf565b90509392505050565b6000602082019050613b7b600083018461362d565b92915050565b6000608082019050613b96600083018761363c565b613ba360208301866139e0565b613bb0604083018561363c565b613bbd606083018461363c565b95945050505050565b60006020820190508181036000830152613be0818461369b565b905092915050565b60006020820190508181036000830152613c01816136d4565b9050919050565b60006020820190508181036000830152613c21816136f7565b9050919050565b60006020820190508181036000830152613c418161373d565b9050919050565b60006020820190508181036000830152613c6181613760565b9050919050565b60006020820190508181036000830152613c8181613783565b9050919050565b60006020820190508181036000830152613ca1816137a6565b9050919050565b60006020820190508181036000830152613cc1816137c9565b9050919050565b60006020820190508181036000830152613ce1816137ec565b9050919050565b60006020820190508181036000830152613d018161380f565b9050919050565b60006020820190508181036000830152613d2181613832565b9050919050565b60006020820190508181036000830152613d4181613855565b9050919050565b60006020820190508181036000830152613d6181613878565b9050919050565b60006020820190508181036000830152613d818161389b565b9050919050565b60006020820190508181036000830152613da1816138be565b9050919050565b60006020820190508181036000830152613dc1816138e1565b9050919050565b60006020820190508181036000830152613de181613904565b9050919050565b60006020820190508181036000830152613e0181613927565b9050919050565b60006020820190508181036000830152613e218161394a565b9050919050565b60006020820190508181036000830152613e418161396d565b9050919050565b60006020820190508181036000830152613e6181613990565b9050919050565b6000602082019050613e7d60008301846139c2565b92915050565b6000604082019050613e9860008301856139c2565b613ea560208301846139c2565b9392505050565b6000602082019050613ec160008301846139d1565b92915050565b6000613ed1613ee2565b9050613edd8282614280565b919050565b6000604051905090565b600067ffffffffffffffff821115613f0757613f06614411565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f3357613f32614411565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f5f57613f5e614411565b5b613f688261447b565b9050602081019050919050565b600067ffffffffffffffff821115613f9057613f8f614411565b5b613f998261447b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061402d826141e5565b9150614038836141e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561406d5761406c614355565b5b828201905092915050565b6000614083826141ef565b915061408e836141ef565b92508263ffffffff038211156140a7576140a6614355565b5b828201905092915050565b60006140bd826141e5565b91506140c8836141e5565b9250826140d8576140d7614384565b5b828204905092915050565b60006140ee826141e5565b91506140f9836141e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561413257614131614355565b5b828202905092915050565b6000614148826141e5565b9150614153836141e5565b92508282101561416657614165614355565b5b828203905092915050565b600061417c826141c5565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561423957808201518184015260208101905061421e565b83811115614248576000848401525b50505050565b6000600282049050600182168061426657607f821691505b6020821081141561427a576142796143b3565b5b50919050565b6142898261447b565b810181811067ffffffffffffffff821117156142a8576142a7614411565b5b80604052505050565b60006142bc826141e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142ef576142ee614355565b5b600182019050919050565b6000614305826141ef565b915063ffffffff82141561431c5761431b614355565b5b600182019050919050565b600061433282614343565b9050919050565b6000819050919050565b600061434e8261448c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561445f5760046000803e61445c600051614499565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f642070657220616464726573732e000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614a2757614aaa565b614a2f613ee2565b60043d036004823e80513d602482011167ffffffffffffffff82111715614a57575050614aaa565b808201805167ffffffffffffffff811115614a755750505050614aaa565b80602083010160043d038501811115614a92575050505050614aaa565b614aa182602001850186614280565b82955050505050505b90565b614ab681614171565b8114614ac157600080fd5b50565b614acd81614183565b8114614ad857600080fd5b50565b614ae48161418f565b8114614aef57600080fd5b50565b614afb81614199565b8114614b0657600080fd5b50565b614b12816141e5565b8114614b1d57600080fd5b50565b614b29816141ef565b8114614b3457600080fd5b50565b614b40816141ff565b8114614b4b57600080fd5b5056fea264697066735822122015d27599e92ffc5690e8472d004afa240615f9d0fba726ff7f742cca1d8b04ca64736f6c634300080700330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d5a766f5a335a704e564c4473764c793546584371476e464c375569784d416d78346143686b5571427145396a2f7b69647d2e6a736f6e00000000

Deployed Bytecode

0x6080604052600436106101cc5760003560e01c806360120095116100f7578063a9d4a54e11610095578063e73faa2d11610064578063e73faa2d14610623578063e985e9c51461064e578063f242432a1461068b578063f2fde38b146106b4576101cc565b8063a9d4a54e14610588578063cc21f485146105b3578063d5abeb01146105cf578063d67b06c1146105fa576101cc565b80638da5cb5b116100d15780638da5cb5b146104e05780639039903c1461050b57806395d89b4114610534578063a22cb4651461055f576101cc565b80636012009514610482578063715018a6146104ad578063892f5f6f146104c4576101cc565b80630fcf2e751161016f5780633360caa01161013e5780633360caa0146103da5780633ccfd60b1461040557806340fa89d91461041c5780634e1273f414610445576101cc565b80630fcf2e751461033057806318160ddd1461035b5780631f0234d8146103865780632eb2c2d6146103b1576101cc565b8063046dc166116101ab578063046dc1661461027457806306fdde031461029d5780630d5624b3146102c85780630e89341c146102f3576101cc565b8062fdd58e146101d157806301ffc9a71461020e57806302fe53051461024b575b600080fd5b3480156101dd57600080fd5b506101f860048036038101906101f3919061332c565b6106dd565b6040516102059190613e68565b60405180910390f35b34801561021a57600080fd5b506102356004803603810190610230919061342d565b6107a6565b6040516102429190613b66565b60405180910390f35b34801561025757600080fd5b50610272600480360381019061026d9190613487565b610888565b005b34801561028057600080fd5b5061029b60048036038101906102969190613119565b610910565b005b3480156102a957600080fd5b506102b26109d0565b6040516102bf9190613bc6565b60405180910390f35b3480156102d457600080fd5b506102dd610a09565b6040516102ea9190613eac565b60405180910390f35b3480156102ff57600080fd5b5061031a600480360381019061031591906134d0565b610a1f565b6040516103279190613bc6565b60405180910390f35b34801561033c57600080fd5b50610345610ab3565b6040516103529190613b66565b60405180910390f35b34801561036757600080fd5b50610370610ad6565b60405161037d9190613eac565b60405180910390f35b34801561039257600080fd5b5061039b610aec565b6040516103a89190613b66565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d39190613186565b610b33565b005b3480156103e657600080fd5b506103ef610bd4565b6040516103fc9190613eac565b60405180910390f35b34801561041157600080fd5b5061041a610bea565b005b34801561042857600080fd5b50610443600480360381019061043e91906134fd565b610e84565b005b34801561045157600080fd5b5061046c600480360381019061046791906133b5565b610f24565b6040516104799190613b0d565b60405180910390f35b34801561048e57600080fd5b5061049761103d565b6040516104a49190613eac565b60405180910390f35b3480156104b957600080fd5b506104c2611042565b005b6104de60048036038101906104d991906134fd565b6110ca565b005b3480156104ec57600080fd5b506104f5611327565b6040516105029190613a30565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d91906134fd565b611351565b005b34801561054057600080fd5b506105496113f1565b6040516105569190613bc6565b60405180910390f35b34801561056b57600080fd5b50610586600480360381019061058191906132ec565b61142a565b005b34801561059457600080fd5b5061059d611440565b6040516105aa9190613eac565b60405180910390f35b6105cd60048036038101906105c8919061352a565b611445565b005b3480156105db57600080fd5b506105e46116ef565b6040516105f19190613eac565b60405180910390f35b34801561060657600080fd5b50610621600480360381019061061c919061336c565b6116f5565b005b34801561062f57600080fd5b50610638611828565b6040516106459190613e68565b60405180910390f35b34801561065a57600080fd5b5061067560048036038101906106709190613146565b611834565b6040516106829190613b66565b60405180910390f35b34801561069757600080fd5b506106b260048036038101906106ad9190613255565b6118c8565b005b3480156106c057600080fd5b506106db60048036038101906106d69190613119565b611969565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561074e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161074590613c48565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061087157507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610881575061088082611a61565b5b9050919050565b610890611acb565b73ffffffffffffffffffffffffffffffffffffffff166108ae611327565b73ffffffffffffffffffffffffffffffffffffffff1614610904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108fb90613da8565b60405180910390fd5b61090d81611ad3565b50565b610918611acb565b73ffffffffffffffffffffffffffffffffffffffff16610936611327565b73ffffffffffffffffffffffffffffffffffffffff161461098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390613da8565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6040518060400160405280600c81526020017f4275636b65747320436c7562000000000000000000000000000000000000000081525081565b600360189054906101000a900463ffffffff1681565b606060028054610a2e9061424e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5a9061424e565b8015610aa75780601f10610a7c57610100808354040283529160200191610aa7565b820191906000526020600020905b815481529060010190602001808311610a8a57829003601f168201915b50505050509050919050565b6000426003601c9054906101000a900463ffffffff1663ffffffff161115905090565b600360149054906101000a900463ffffffff1681565b600042600360189054906101000a900463ffffffff1663ffffffff1611158015610b2e5750426003601c9054906101000a900463ffffffff1663ffffffff1610155b905090565b610b3b611acb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b815750610b8085610b7b611acb565b611834565b5b610bc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb790613d28565b60405180910390fd5b610bcd8585858585611aed565b5050505050565b6003601c9054906101000a900463ffffffff1681565b610bf2611acb565b73ffffffffffffffffffffffffffffffffffffffff16610c10611327565b73ffffffffffffffffffffffffffffffffffffffff1614610c66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5d90613da8565b60405180910390fd5b6000604051806060016040528073cc090398dc4dea02f657168914b9ef3e828ec81a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173930a4fdcba0f7e2101e91cb3bc2ca3b26e2a80a373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173dad1ef6384492059db601c22502f3c1e1c04a4cf73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250905060006040518060600160405280611d4c63ffffffff1663ffffffff1681526020016105dc63ffffffff1663ffffffff1681526020016103e863ffffffff1663ffffffff168152509050600047905060005b60038163ffffffff161015610e7e57600060016003610db5919061413d565b8263ffffffff1614610e0257612710848363ffffffff1660038110610ddd57610ddc6143e2565b5b602002015163ffffffff1684610df391906140e3565b610dfd91906140b2565b610e04565b475b9050848263ffffffff1660038110610e1f57610e1e6143e2565b5b602002015173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015610e69573d6000803e3d6000fd5b50508080610e76906142fa565b915050610d96565b50505050565b610e8c611acb565b73ffffffffffffffffffffffffffffffffffffffff16610eaa611327565b73ffffffffffffffffffffffffffffffffffffffff1614610f00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ef790613da8565b60405180910390fd5b80600360186101000a81548163ffffffff021916908363ffffffff16021790555050565b60608151835114610f6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6190613e08565b60405180910390fd5b6000835167ffffffffffffffff811115610f8757610f86614411565b5b604051908082528060200260200182016040528015610fb55781602001602082028036833780820191505090505b50905060005b845181101561103257611002858281518110610fda57610fd96143e2565b5b6020026020010151858381518110610ff557610ff46143e2565b5b60200260200101516106dd565b828281518110611015576110146143e2565b5b6020026020010181815250508061102b906142b1565b9050610fbb565b508091505092915050565b600181565b61104a611acb565b73ffffffffffffffffffffffffffffffffffffffff16611068611327565b73ffffffffffffffffffffffffffffffffffffffff16146110be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b590613da8565b60405180910390fd5b6110c86000611e01565b565b6110d2610ab3565b611111576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110890613ca8565b60405180910390fd5b60008163ffffffff161161115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190613cc8565b60405180910390fd5b6103e863ffffffff1681600360149054906101000a900463ffffffff166111819190614078565b63ffffffff1611156111c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bf90613d88565b60405180910390fd5b600563ffffffff168163ffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112219190614022565b1115611262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125990613c28565b60405180910390fd5b8063ffffffff16670429d069189e000061127c91906140e3565b3410156112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590613ce8565b60405180910390fd5b6112c83382611ec7565b8063ffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461131d9190614022565b9250508190555050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611359611acb565b73ffffffffffffffffffffffffffffffffffffffff16611377611327565b73ffffffffffffffffffffffffffffffffffffffff16146113cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c490613da8565b60405180910390fd5b806003601c6101000a81548163ffffffff021916908363ffffffff16021790555050565b6040518060400160405280600781526020017f4255434b4554530000000000000000000000000000000000000000000000000081525081565b61143c611435611acb565b83836120b1565b5050565b600581565b61144d610aec565b61148c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148390613d48565b60405180910390fd5b61149784848461221e565b6114d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cd90613dc8565b60405180910390fd5b60008163ffffffff161161151f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151690613cc8565b60405180910390fd5b6103e863ffffffff1681600360149054906101000a900463ffffffff166115469190614078565b63ffffffff16111561158d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158490613d88565b60405180910390fd5b600163ffffffff168163ffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546115e69190614022565b1115611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613c28565b60405180910390fd5b8063ffffffff16670429d069189e000061164191906140e3565b341015611683576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167a90613ce8565b60405180910390fd5b61168d3382611ec7565b8063ffffffff16600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116e29190614022565b9250508190555050505050565b6103e881565b6116fd611acb565b73ffffffffffffffffffffffffffffffffffffffff1661171b611327565b73ffffffffffffffffffffffffffffffffffffffff1614611771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176890613da8565b60405180910390fd5b6103e863ffffffff168151600360149054906101000a900463ffffffff1663ffffffff1661179f9190614022565b11156117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d790613d88565b60405180910390fd5b60005b815181101561182457611811828281518110611802576118016143e2565b5b60200260200101516001611ec7565b808061181c906142b1565b9150506117e3565b5050565b670429d069189e000081565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6118d0611acb565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611916575061191585611910611acb565b611834565b5b611955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194c90613c88565b60405180910390fd5b6119628585858585612319565b5050505050565b611971611acb565b73ffffffffffffffffffffffffffffffffffffffff1661198f611327565b73ffffffffffffffffffffffffffffffffffffffff16146119e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119dc90613da8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a55576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4c90613c68565b60405180910390fd5b611a5e81611e01565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b8060029080519060200190611ae9929190612db2565b5050565b8151835114611b31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2890613e28565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ba1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9890613d08565b60405180910390fd5b6000611bab611acb565b9050611bbb81878787878761259b565b60005b8451811015611d6c576000858281518110611bdc57611bdb6143e2565b5b602002602001015190506000858381518110611bfb57611bfa6143e2565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390613d68565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d519190614022565b9250508190555050505080611d65906142b1565b9050611bbe565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611de3929190613b2f565b60405180910390a4611df98187878787876125a3565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60018163ffffffff1611156120395760008163ffffffff1667ffffffffffffffff811115611ef857611ef7614411565b5b604051908082528060200260200182016040528015611f265781602001602082028036833780820191505090505b50905060008263ffffffff1667ffffffffffffffff811115611f4b57611f4a614411565b5b604051908082528060200260200182016040528015611f795781602001602082028036833780820191505090505b50905060005b8363ffffffff168163ffffffff1610156120165780600360149054906101000a900463ffffffff16611fb19190614078565b63ffffffff16838263ffffffff1681518110611fd057611fcf6143e2565b5b6020026020010181815250506001828263ffffffff1681518110611ff757611ff66143e2565b5b602002602001018181525050808061200e906142fa565b915050611f7f565b506120328483836040518060200160405280600081525061278a565b505061206e565b61206d82600360149054906101000a900463ffffffff1663ffffffff166001604051806020016040528060008152506129a8565b5b80600360148282829054906101000a900463ffffffff1661208f9190614078565b92506101000a81548163ffffffff021916908363ffffffff1602179055505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211790613de8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122119190613b66565b60405180910390a3505050565b6000803360405160200161223291906139ef565b60405160208183030381529060405280519060200120905060018160405160200161225d9190613a0a565b60405160208183030381529060405280519060200120868686604051600081526020016040526040516122939493929190613b81565b6020604051602081039080840390855afa1580156122b5573d6000803e3d6000fd5b5050506020604051035173ffffffffffffffffffffffffffffffffffffffff16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238090613d08565b60405180910390fd5b6000612393611acb565b90506123b38187876123a488612b3e565b6123ad88612b3e565b8761259b565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381101561244a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244190613d68565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ff9190614022565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62888860405161257c929190613e83565b60405180910390a4612592828888888888612bb8565b50505050505050565b505050505050565b6125c28473ffffffffffffffffffffffffffffffffffffffff16612d9f565b15612782578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401612608959493929190613a4b565b602060405180830381600087803b15801561262257600080fd5b505af192505050801561265357506040513d601f19601f82011682018060405250810190612650919061345a565b60015b6126f95761265f614440565b806308c379a014156126bc5750612674614a17565b8061267f57506126be565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b39190613bc6565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126f090613be8565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790613c08565b60405180910390fd5b505b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156127fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f190613e48565b60405180910390fd5b815183511461283e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283590613e28565b60405180910390fd5b6000612848611acb565b90506128598160008787878761259b565b60005b845181101561291257838181518110612878576128776143e2565b5b6020026020010151600080878481518110612896576128956143e2565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128f89190614022565b92505081905550808061290a906142b1565b91505061285c565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161298a929190613b2f565b60405180910390a46129a1816000878787876125a3565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90613e48565b60405180910390fd5b6000612a22611acb565b9050612a4381600087612a3488612b3e565b612a3d88612b3e565b8761259b565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612aa29190614022565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051612b20929190613e83565b60405180910390a4612b3781600087878787612bb8565b5050505050565b60606000600167ffffffffffffffff811115612b5d57612b5c614411565b5b604051908082528060200260200182016040528015612b8b5781602001602082028036833780820191505090505b5090508281600081518110612ba357612ba26143e2565b5b60200260200101818152505080915050919050565b612bd78473ffffffffffffffffffffffffffffffffffffffff16612d9f565b15612d97578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401612c1d959493929190613ab3565b602060405180830381600087803b158015612c3757600080fd5b505af1925050508015612c6857506040513d601f19601f82011682018060405250810190612c65919061345a565b60015b612d0e57612c74614440565b806308c379a01415612cd15750612c89614a17565b80612c945750612cd3565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc89190613bc6565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d0590613be8565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8c90613c08565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b828054612dbe9061424e565b90600052602060002090601f016020900481019282612de05760008555612e27565b82601f10612df957805160ff1916838001178555612e27565b82800160010185558215612e27579182015b82811115612e26578251825591602001919060010190612e0b565b5b509050612e349190612e38565b5090565b5b80821115612e51576000816000905550600101612e39565b5090565b6000612e68612e6384613eec565b613ec7565b90508083825260208201905082856020860282011115612e8b57612e8a614467565b5b60005b85811015612ebb5781612ea18882612fb9565b845260208401935060208301925050600181019050612e8e565b5050509392505050565b6000612ed8612ed384613f18565b613ec7565b90508083825260208201905082856020860282011115612efb57612efa614467565b5b60005b85811015612f2b5781612f1188826130da565b845260208401935060208301925050600181019050612efe565b5050509392505050565b6000612f48612f4384613f44565b613ec7565b905082815260208101848484011115612f6457612f6361446c565b5b612f6f84828561420c565b509392505050565b6000612f8a612f8584613f75565b613ec7565b905082815260208101848484011115612fa657612fa561446c565b5b612fb184828561420c565b509392505050565b600081359050612fc881614aad565b92915050565b600082601f830112612fe357612fe2614462565b5b8135612ff3848260208601612e55565b91505092915050565b600082601f83011261301157613010614462565b5b8135613021848260208601612ec5565b91505092915050565b60008135905061303981614ac4565b92915050565b60008135905061304e81614adb565b92915050565b60008135905061306381614af2565b92915050565b60008151905061307881614af2565b92915050565b600082601f83011261309357613092614462565b5b81356130a3848260208601612f35565b91505092915050565b600082601f8301126130c1576130c0614462565b5b81356130d1848260208601612f77565b91505092915050565b6000813590506130e981614b09565b92915050565b6000813590506130fe81614b20565b92915050565b60008135905061311381614b37565b92915050565b60006020828403121561312f5761312e614476565b5b600061313d84828501612fb9565b91505092915050565b6000806040838503121561315d5761315c614476565b5b600061316b85828601612fb9565b925050602061317c85828601612fb9565b9150509250929050565b600080600080600060a086880312156131a2576131a1614476565b5b60006131b088828901612fb9565b95505060206131c188828901612fb9565b945050604086013567ffffffffffffffff8111156131e2576131e1614471565b5b6131ee88828901612ffc565b935050606086013567ffffffffffffffff81111561320f5761320e614471565b5b61321b88828901612ffc565b925050608086013567ffffffffffffffff81111561323c5761323b614471565b5b6132488882890161307e565b9150509295509295909350565b600080600080600060a0868803121561327157613270614476565b5b600061327f88828901612fb9565b955050602061329088828901612fb9565b94505060406132a1888289016130da565b93505060606132b2888289016130da565b925050608086013567ffffffffffffffff8111156132d3576132d2614471565b5b6132df8882890161307e565b9150509295509295909350565b6000806040838503121561330357613302614476565b5b600061331185828601612fb9565b92505060206133228582860161302a565b9150509250929050565b6000806040838503121561334357613342614476565b5b600061335185828601612fb9565b9250506020613362858286016130da565b9150509250929050565b60006020828403121561338257613381614476565b5b600082013567ffffffffffffffff8111156133a05761339f614471565b5b6133ac84828501612fce565b91505092915050565b600080604083850312156133cc576133cb614476565b5b600083013567ffffffffffffffff8111156133ea576133e9614471565b5b6133f685828601612fce565b925050602083013567ffffffffffffffff81111561341757613416614471565b5b61342385828601612ffc565b9150509250929050565b60006020828403121561344357613442614476565b5b600061345184828501613054565b91505092915050565b6000602082840312156134705761346f614476565b5b600061347e84828501613069565b91505092915050565b60006020828403121561349d5761349c614476565b5b600082013567ffffffffffffffff8111156134bb576134ba614471565b5b6134c7848285016130ac565b91505092915050565b6000602082840312156134e6576134e5614476565b5b60006134f4848285016130da565b91505092915050565b60006020828403121561351357613512614476565b5b6000613521848285016130ef565b91505092915050565b6000806000806080858703121561354457613543614476565b5b600061355287828801613104565b94505060206135638782880161303f565b93505060406135748782880161303f565b9250506060613585878288016130ef565b91505092959194509250565b600061359d83836139b3565b60208301905092915050565b6135b281614171565b82525050565b6135c96135c482614171565b614327565b82525050565b60006135da82613fb6565b6135e48185613fe4565b93506135ef83613fa6565b8060005b838110156136205781516136078882613591565b975061361283613fd7565b9250506001810190506135f3565b5085935050505092915050565b61363681614183565b82525050565b6136458161418f565b82525050565b61365c6136578261418f565b614339565b82525050565b600061366d82613fc1565b6136778185613ff5565b935061368781856020860161421b565b6136908161447b565b840191505092915050565b60006136a682613fcc565b6136b08185614006565b93506136c081856020860161421b565b6136c98161447b565b840191505092915050565b60006136e1603483614006565b91506136ec826144a6565b604082019050919050565b6000613704602883614006565b915061370f826144f5565b604082019050919050565b6000613727601c83614017565b915061373282614544565b601c82019050919050565b600061374a602e83614006565b91506137558261456d565b604082019050919050565b600061376d602b83614006565b9150613778826145bc565b604082019050919050565b6000613790602683614006565b915061379b8261460b565b604082019050919050565b60006137b3602983614006565b91506137be8261465a565b604082019050919050565b60006137d6601a83614006565b91506137e1826146a9565b602082019050919050565b60006137f9601d83614006565b9150613804826146d2565b602082019050919050565b600061381c601183614006565b9150613827826146fb565b602082019050919050565b600061383f602583614006565b915061384a82614724565b604082019050919050565b6000613862603283614006565b915061386d82614773565b604082019050919050565b6000613885601783614006565b9150613890826147c2565b602082019050919050565b60006138a8602a83614006565b91506138b3826147eb565b604082019050919050565b60006138cb602983614006565b91506138d68261483a565b604082019050919050565b60006138ee602083614006565b91506138f982614889565b602082019050919050565b6000613911601083614006565b915061391c826148b2565b602082019050919050565b6000613934602983614006565b915061393f826148db565b604082019050919050565b6000613957602983614006565b91506139628261492a565b604082019050919050565b600061397a602883614006565b915061398582614979565b604082019050919050565b600061399d602183614006565b91506139a8826149c8565b604082019050919050565b6139bc816141e5565b82525050565b6139cb816141e5565b82525050565b6139da816141ef565b82525050565b6139e9816141ff565b82525050565b60006139fb82846135b8565b60148201915081905092915050565b6000613a158261371a565b9150613a21828461364b565b60208201915081905092915050565b6000602082019050613a4560008301846135a9565b92915050565b600060a082019050613a6060008301886135a9565b613a6d60208301876135a9565b8181036040830152613a7f81866135cf565b90508181036060830152613a9381856135cf565b90508181036080830152613aa78184613662565b90509695505050505050565b600060a082019050613ac860008301886135a9565b613ad560208301876135a9565b613ae260408301866139c2565b613aef60608301856139c2565b8181036080830152613b018184613662565b90509695505050505050565b60006020820190508181036000830152613b2781846135cf565b905092915050565b60006040820190508181036000830152613b4981856135cf565b90508181036020830152613b5d81846135cf565b90509392505050565b6000602082019050613b7b600083018461362d565b92915050565b6000608082019050613b96600083018761363c565b613ba360208301866139e0565b613bb0604083018561363c565b613bbd606083018461363c565b95945050505050565b60006020820190508181036000830152613be0818461369b565b905092915050565b60006020820190508181036000830152613c01816136d4565b9050919050565b60006020820190508181036000830152613c21816136f7565b9050919050565b60006020820190508181036000830152613c418161373d565b9050919050565b60006020820190508181036000830152613c6181613760565b9050919050565b60006020820190508181036000830152613c8181613783565b9050919050565b60006020820190508181036000830152613ca1816137a6565b9050919050565b60006020820190508181036000830152613cc1816137c9565b9050919050565b60006020820190508181036000830152613ce1816137ec565b9050919050565b60006020820190508181036000830152613d018161380f565b9050919050565b60006020820190508181036000830152613d2181613832565b9050919050565b60006020820190508181036000830152613d4181613855565b9050919050565b60006020820190508181036000830152613d6181613878565b9050919050565b60006020820190508181036000830152613d818161389b565b9050919050565b60006020820190508181036000830152613da1816138be565b9050919050565b60006020820190508181036000830152613dc1816138e1565b9050919050565b60006020820190508181036000830152613de181613904565b9050919050565b60006020820190508181036000830152613e0181613927565b9050919050565b60006020820190508181036000830152613e218161394a565b9050919050565b60006020820190508181036000830152613e418161396d565b9050919050565b60006020820190508181036000830152613e6181613990565b9050919050565b6000602082019050613e7d60008301846139c2565b92915050565b6000604082019050613e9860008301856139c2565b613ea560208301846139c2565b9392505050565b6000602082019050613ec160008301846139d1565b92915050565b6000613ed1613ee2565b9050613edd8282614280565b919050565b6000604051905090565b600067ffffffffffffffff821115613f0757613f06614411565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f3357613f32614411565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613f5f57613f5e614411565b5b613f688261447b565b9050602081019050919050565b600067ffffffffffffffff821115613f9057613f8f614411565b5b613f998261447b565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061402d826141e5565b9150614038836141e5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561406d5761406c614355565b5b828201905092915050565b6000614083826141ef565b915061408e836141ef565b92508263ffffffff038211156140a7576140a6614355565b5b828201905092915050565b60006140bd826141e5565b91506140c8836141e5565b9250826140d8576140d7614384565b5b828204905092915050565b60006140ee826141e5565b91506140f9836141e5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561413257614131614355565b5b828202905092915050565b6000614148826141e5565b9150614153836141e5565b92508282101561416657614165614355565b5b828203905092915050565b600061417c826141c5565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561423957808201518184015260208101905061421e565b83811115614248576000848401525b50505050565b6000600282049050600182168061426657607f821691505b6020821081141561427a576142796143b3565b5b50919050565b6142898261447b565b810181811067ffffffffffffffff821117156142a8576142a7614411565b5b80604052505050565b60006142bc826141e5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156142ef576142ee614355565b5b600182019050919050565b6000614305826141ef565b915063ffffffff82141561431c5761431b614355565b5b600182019050919050565b600061433282614343565b9050919050565b6000819050919050565b600061434e8261448c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561445f5760046000803e61445c600051614499565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f642070657220616464726573732e000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f5075626c69632073616c65206973206e6f74206163746976652e000000000000600082015250565b7f436f756e74206d7573742062652067726561746572207468616e20302e000000600082015250565b7f4e6f7420656e6f7567682065746865722e000000000000000000000000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f5072652d73616c65206973206e6f74206163746976652e000000000000000000600082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f436f756e74206578636565647320746865206d6178696d756d20616c6c6f776560008201527f6420737570706c792e0000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4e6f742077686974656c69737465642e00000000000000000000000000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600060443d1015614a2757614aaa565b614a2f613ee2565b60043d036004823e80513d602482011167ffffffffffffffff82111715614a57575050614aaa565b808201805167ffffffffffffffff811115614a755750505050614aaa565b80602083010160043d038501811115614a92575050505050614aaa565b614aa182602001850186614280565b82955050505050505b90565b614ab681614171565b8114614ac157600080fd5b50565b614acd81614183565b8114614ad857600080fd5b50565b614ae48161418f565b8114614aef57600080fd5b50565b614afb81614199565b8114614b0657600080fd5b50565b614b12816141e5565b8114614b1d57600080fd5b50565b614b29816141ef565b8114614b3457600080fd5b50565b614b40816141ff565b8114614b4b57600080fd5b5056fea264697066735822122015d27599e92ffc5690e8472d004afa240615f9d0fba726ff7f742cca1d8b04ca64736f6c63430008070033

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

0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005c68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f697066732f516d5a766f5a335a704e564c4473764c793546584371476e464c375569784d416d78346143686b5571427145396a2f7b69647d2e6a736f6e00000000

-----Decoded View---------------
Arg [0] : uri (string): https://buckets.mypinata.cloud/ipfs/QmZvoZ3ZpNVLDsvLy5FXCqGnFL7UixMAmx4aChkUqBqE9j/{id}.json

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 000000000000000000000000000000000000000000000000000000000000005c
Arg [2] : 68747470733a2f2f6275636b6574732e6d7970696e6174612e636c6f75642f69
Arg [3] : 7066732f516d5a766f5a335a704e564c4473764c793546584371476e464c3755
Arg [4] : 69784d416d78346143686b5571427145396a2f7b69647d2e6a736f6e00000000


Deployed Bytecode Sourcemap

36552:4943:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22001:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37251:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37342:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36600:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36837:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22722:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37859:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36701:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37676:175;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24917:442;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36883:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40819:673;;;;;;;;;;;;;:::i;:::-;;37448:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23375:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36934:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2606:103;;;;;;;;;;;;;:::i;:::-;;39794:683;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1955:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37559:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36651:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36988:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38989:797;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36737:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40485:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36783:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24199:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24439:401;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22978:231;23064:7;23111:1;23092:21;;:7;:21;;;;23084:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;23179:9;:13;23189:2;23179:13;;;;;;;;;;;:22;23193:7;23179:22;;;;;;;;;;;;;;;;23172:29;;22978:231;;;;:::o;22001:310::-;22103:4;22155:26;22140:41;;;:11;:41;;;;:110;;;;22213:37;22198:52;;;:11;:52;;;;22140:110;:163;;;;22267:36;22291:11;22267:23;:36::i;:::-;22140:163;22120:183;;22001:310;;;:::o;37251:83::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37314:12:::1;37322:3;37314:7;:12::i;:::-;37251:83:::0;:::o;37342:98::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37428:4:::1;37412:13;;:20;;;;;;;;;;;;;;;;;;37342:98:::0;:::o;36600:44::-;;;;;;;;;;;;;;;;;;;:::o;36837:39::-;;;;;;;;;;;;;:::o;22722:105::-;22782:13;22815:4;22808:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22722:105;;;:::o;37859:117::-;37910:4;37953:15;37934;;;;;;;;;;;:34;;;;37927:41;;37859:117;:::o;36701:29::-;;;;;;;;;;;;;:::o;37676:175::-;37724:4;37777:15;37761:12;;;;;;;;;;;:31;;;;:82;;;;;37828:15;37809;;;;;;;;;;;:34;;;;37761:82;37741:102;;37676:175;:::o;24917:442::-;25158:12;:10;:12::i;:::-;25150:20;;:4;:20;;;:60;;;;25174:36;25191:4;25197:12;:10;:12::i;:::-;25174:16;:36::i;:::-;25150:60;25128:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25299:52;25322:4;25328:2;25332:3;25337:7;25346:4;25299:22;:52::i;:::-;24917:442;;;;;:::o;36883:42::-;;;;;;;;;;;;;:::o;40819:673::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40869:27:::1;:212;;;;;;;;40914:42;40869:212;;;;;;;;40971:42;40869:212;;;;;;;;41028:42;40869:212;;;;;;::::0;::::1;;41094:23;:68;;;;;;;;41128:4;41094:68;;;;;;;;41142:4;41094:68;;;;;;;;41156:4;41094:68;;;;;;::::0;::::1;;41175:15;41193:21;41175:39;;41232:8;41227:258;41250:16;41246:1;:20;;;41227:258;;;41288:14;41329:1;41310:16;:20;;;;:::i;:::-;41305:1;:25;;;:115;;41415:5;41402:6;41409:1;41402:9;;;;;;;;;:::i;:::-;;;;;;41392:19;;:7;:19;;;;:::i;:::-;41391:29;;;;:::i;:::-;41305:115;;;41350:21;41305:115;41288:132;;41443:9;41453:1;41443:12;;;;;;;;;:::i;:::-;;;;;;41435:30;;:38;41466:6;41435:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41273:212;41268:3;;;;;:::i;:::-;;;;41227:258;;;;40858:634;;;40819:673::o:0;37448:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37534:9:::1;37519:12;;:24;;;;;;;;;;;;;;;;;;37448:103:::0;:::o;23375:524::-;23531:16;23592:3;:10;23573:8;:15;:29;23565:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23661:30;23708:8;:15;23694:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23661:63;;23742:9;23737:122;23761:8;:15;23757:1;:19;23737:122;;;23817:30;23827:8;23836:1;23827:11;;;;;;;;:::i;:::-;;;;;;;;23840:3;23844:1;23840:6;;;;;;;;:::i;:::-;;;;;;;;23817:9;:30::i;:::-;23798:13;23812:1;23798:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;23778:3;;;;:::i;:::-;;;23737:122;;;;23878:13;23871:20;;;23375:524;;;;:::o;36934:47::-;36980:1;36934:47;:::o;2606:103::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2671:30:::1;2698:1;2671:18;:30::i;:::-;2606:103::o:0;39794:683::-;39868:20;:18;:20::i;:::-;39860:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;39946:1;39938:5;:9;;;39930:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36772:4;40014:32;;40028:5;40014:11;;;;;;;;;;;:19;;;;:::i;:::-;:32;;;;39992:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;37037:1;40148:86;;40185:5;40148:42;;:22;:34;40171:10;40148:34;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:86;;40126:182;;;;;;;;;;;;:::i;:::-;;;;;;;;;40352:5;40340:17;;36819:9;40340:17;;;;:::i;:::-;40327:9;:30;;40319:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;40392:23;40397:10;40409:5;40392:4;:23::i;:::-;40464:5;40426:43;;:22;:34;40449:10;40426:34;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;39794:683;:::o;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;37559:109::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37651:9:::1;37633:15;;:27;;;;;;;;;;;;;;;;;;37559:109:::0;:::o;36651:41::-;;;;;;;;;;;;;;;;;;;:::o;23972:155::-;24067:52;24086:12;:10;:12::i;:::-;24100:8;24110;24067:18;:52::i;:::-;23972:155;;:::o;36988:50::-;37037:1;36988:50;:::o;38989:797::-;39134:17;:15;:17::i;:::-;39126:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39198:29;39219:1;39222;39225;39198:20;:29::i;:::-;39190:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39275:1;39267:5;:9;;;39259:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36772:4;39343:32;;39357:5;39343:11;;;;;;;;;;;:19;;;;:::i;:::-;:32;;;;39321:123;;;;;;;;;;;;:::i;:::-;;;;;;;;;36980:1;39477:66;;39514:5;39477:42;;:22;:34;39500:10;39477:34;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:66;;39455:162;;;;;;;;;;;;:::i;:::-;;;;;;;;;39661:5;39649:17;;36819:9;39649:17;;;;:::i;:::-;39636:9;:30;;39628:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39701:23;39706:10;39718:5;39701:4;:23::i;:::-;39773:5;39735:43;;:22;:34;39758:10;39735:34;;;;;;;;;;;;;;;;:43;;;;;;;:::i;:::-;;;;;;;;38989:797;;;;:::o;36737:39::-;36772:4;36737:39;:::o;40485:326::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36772:4:::1;40584:43;;40598:9;:16;40584:11;;;;;;;;;;;:30;;;;;;:::i;:::-;:43;;40562:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;40714:9;40709:95;40733:9;:16;40729:1;:20;40709:95;;;40771:21;40776:9;40786:1;40776:12;;;;;;;;:::i;:::-;;;;;;;;40790:1;40771:4;:21::i;:::-;40751:3;;;;;:::i;:::-;;;;40709:95;;;;40485:326:::0;:::o;36783:45::-;36819:9;36783:45;:::o;24199:168::-;24298:4;24322:18;:27;24341:7;24322:27;;;;;;;;;;;;;;;:37;24350:8;24322:37;;;;;;;;;;;;;;;;;;;;;;;;;24315:44;;24199:168;;;;:::o;24439:401::-;24655:12;:10;:12::i;:::-;24647:20;;:4;:20;;;:60;;;;24671:36;24688:4;24694:12;:10;:12::i;:::-;24671:16;:36::i;:::-;24647:60;24625:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;24787:45;24805:4;24811:2;24815;24819:6;24827:4;24787:17;:45::i;:::-;24439:401;;;;;:::o;2864:201::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2973:1:::1;2953:22;;:8;:22;;;;2945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3029:28;3048:8;3029:18;:28::i;:::-;2864:201:::0;:::o;13356:157::-;13441:4;13480:25;13465:40;;;:11;:40;;;;13458:47;;13356:157;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;28919:88::-;28993:6;28986:4;:13;;;;;;;;;;;;:::i;:::-;;28919:88;:::o;27001:1074::-;27228:7;:14;27214:3;:10;:28;27206:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27320:1;27306:16;;:2;:16;;;;27298:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27377:16;27396:12;:10;:12::i;:::-;27377:31;;27421:60;27442:8;27452:4;27458:2;27462:3;27467:7;27476:4;27421:20;:60::i;:::-;27499:9;27494:421;27518:3;:10;27514:1;:14;27494:421;;;27550:10;27563:3;27567:1;27563:6;;;;;;;;:::i;:::-;;;;;;;;27550:19;;27584:14;27601:7;27609:1;27601:10;;;;;;;;:::i;:::-;;;;;;;;27584:27;;27628:19;27650:9;:13;27660:2;27650:13;;;;;;;;;;;:19;27664:4;27650:19;;;;;;;;;;;;;;;;27628:41;;27707:6;27692:11;:21;;27684:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27840:6;27826:11;:20;27804:9;:13;27814:2;27804:13;;;;;;;;;;;:19;27818:4;27804:19;;;;;;;;;;;;;;;:42;;;;27897:6;27876:9;:13;27886:2;27876:13;;;;;;;;;;;:17;27890:2;27876:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;27535:380;;;27530:3;;;;:::i;:::-;;;27494:421;;;;27962:2;27932:47;;27956:4;27932:47;;27946:8;27932:47;;;27966:3;27971:7;27932:47;;;;;;;:::i;:::-;;;;;;;;27992:75;28028:8;28038:4;28044:2;28048:3;28053:7;28062:4;27992:35;:75::i;:::-;27195:880;27001:1074;;;;;:::o;3225:191::-;3299:16;3318:6;;;;;;;;;;;3299:25;;3344:8;3335:6;;:17;;;;;;;;;;;;;;;;;;3399:8;3368:40;;3389:8;3368:40;;;;;;;;;;;;3288:128;3225:191;:::o;38462:519::-;38534:1;38526:5;:9;;;38522:419;;;38552:20;38597:5;38589:14;;38575:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38552:52;;38619:24;38668:5;38660:14;;38646:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38619:56;;38697:8;38692:127;38715:5;38711:9;;:1;:9;;;38692:127;;;38769:1;38755:11;;;;;;;;;;;:15;;;;:::i;:::-;38746:24;;:3;38750:1;38746:6;;;;;;;;;;:::i;:::-;;;;;;;:24;;;;;38802:1;38789:7;38797:1;38789:10;;;;;;;;;;:::i;:::-;;;;;;;:14;;;;;38722:3;;;;;:::i;:::-;;;;38692:127;;;;38835:32;38846:2;38850:3;38855:7;38835:32;;;;;;;;;;;;:10;:32::i;:::-;38537:342;;38522:419;;;38900:29;38906:2;38910:11;;;;;;;;;;;38900:29;;38923:1;38900:29;;;;;;;;;;;;:5;:29::i;:::-;38522:419;38968:5;38953:11;;:20;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;38462:519;;:::o;33187:331::-;33342:8;33333:17;;:5;:17;;;;33325:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33445:8;33407:18;:25;33426:5;33407:25;;;;;;;;;;;;;;;:35;33433:8;33407:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33491:8;33469:41;;33484:5;33469:41;;;33501:8;33469:41;;;;;;:::i;:::-;;;;;;;;33187:331;;;:::o;37984:470::-;38102:4;38119:12;38161:10;38144:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;38134:39;;;;;;38119:54;;38234:212;38347:4;38294:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;38262:109;;;;;;38390:1;38410;38430;38234:212;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38204:242;;:13;;;;;;;;;;;:242;;;38184:262;;;37984:470;;;;;:::o;25823:820::-;26025:1;26011:16;;:2;:16;;;;26003:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;26082:16;26101:12;:10;:12::i;:::-;26082:31;;26126:96;26147:8;26157:4;26163:2;26167:21;26185:2;26167:17;:21::i;:::-;26190:25;26208:6;26190:17;:25::i;:::-;26217:4;26126:20;:96::i;:::-;26235:19;26257:9;:13;26267:2;26257:13;;;;;;;;;;;:19;26271:4;26257:19;;;;;;;;;;;;;;;;26235:41;;26310:6;26295:11;:21;;26287:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;26435:6;26421:11;:20;26399:9;:13;26409:2;26399:13;;;;;;;;;;;:19;26413:4;26399:19;;;;;;;;;;;;;;;:42;;;;26484:6;26463:9;:13;26473:2;26463:13;;;;;;;;;;;:17;26477:2;26463:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;26539:2;26508:46;;26533:4;26508:46;;26523:8;26508:46;;;26543:2;26547:6;26508:46;;;;;;;:::i;:::-;;;;;;;;26567:68;26598:8;26608:4;26614:2;26618;26622:6;26630:4;26567:30;:68::i;:::-;25992:651;;25823:820;;;;;:::o;34474:221::-;;;;;;;:::o;35455:813::-;35695:15;:2;:13;;;:15::i;:::-;35691:570;;;35748:2;35731:43;;;35775:8;35785:4;35791:3;35796:7;35805:4;35731:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;35727:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;36123:6;36116:14;;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;;;36172:62;;;;;;;;;;:::i;:::-;;;;;;;;35727:523;35904:48;;;35892:60;;;:8;:60;;;;35888:159;;35977:50;;;;;;;;;;:::i;:::-;;;;;;;;35888:159;35811:251;35691:570;35455:813;;;;;;:::o;30318:735::-;30510:1;30496:16;;:2;:16;;;;30488:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30583:7;:14;30569:3;:10;:28;30561:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;30655:16;30674:12;:10;:12::i;:::-;30655:31;;30699:66;30720:8;30738:1;30742:2;30746:3;30751:7;30760:4;30699:20;:66::i;:::-;30783:9;30778:103;30802:3;:10;30798:1;:14;30778:103;;;30859:7;30867:1;30859:10;;;;;;;;:::i;:::-;;;;;;;;30834:9;:17;30844:3;30848:1;30844:6;;;;;;;;:::i;:::-;;;;;;;;30834:17;;;;;;;;;;;:21;30852:2;30834:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;30814:3;;;;;:::i;:::-;;;;30778:103;;;;30934:2;30898:53;;30930:1;30898:53;;30912:8;30898:53;;;30938:3;30943:7;30898:53;;;;;;;:::i;:::-;;;;;;;;30964:81;31000:8;31018:1;31022:2;31026:3;31031:7;31040:4;30964:35;:81::i;:::-;30477:576;30318:735;;;;:::o;29393:569::-;29560:1;29546:16;;:2;:16;;;;29538:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;29613:16;29632:12;:10;:12::i;:::-;29613:31;;29657:102;29678:8;29696:1;29700:2;29704:21;29722:2;29704:17;:21::i;:::-;29727:25;29745:6;29727:17;:25::i;:::-;29754:4;29657:20;:102::i;:::-;29793:6;29772:9;:13;29782:2;29772:13;;;;;;;;;;;:17;29786:2;29772:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29852:2;29815:52;;29848:1;29815:52;;29830:8;29815:52;;;29856:2;29860:6;29815:52;;;;;;;:::i;:::-;;;;;;;;29880:74;29911:8;29929:1;29933:2;29937;29941:6;29949:4;29880:30;:74::i;:::-;29527:435;29393:569;;;;:::o;36276:198::-;36342:16;36371:22;36410:1;36396:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36371:41;;36434:7;36423:5;36429:1;36423:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;36461:5;36454:12;;;36276:198;;;:::o;34703:744::-;34918:15;:2;:13;;;:15::i;:::-;34914:526;;;34971:2;34954:38;;;34993:8;35003:4;35009:2;35013:6;35021:4;34954:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34950:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;35302:6;35295:14;;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;;;35351:62;;;;;;;;;;:::i;:::-;;;;;;;;34950:479;35088:43;;;35076:55;;;:8;:55;;;;35072:154;;35156:50;;;;;;;;;;:::i;:::-;;;;;;;;35072:154;35027:214;34914:526;34703:744;;;;;;:::o;4243:387::-;4303:4;4511:12;4578:7;4566:20;4558:28;;4621:1;4614:4;:8;4607:15;;;4243:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:139::-;3447:5;3485:6;3472:20;3463:29;;3501:33;3528:5;3501:33;:::i;:::-;3401:139;;;;:::o;3546:137::-;3591:5;3629:6;3616:20;3607:29;;3645:32;3671:5;3645:32;:::i;:::-;3546:137;;;;:::o;3689:141::-;3745:5;3776:6;3770:13;3761:22;;3792:32;3818:5;3792:32;:::i;:::-;3689:141;;;;:::o;3849:338::-;3904:5;3953:3;3946:4;3938:6;3934:17;3930:27;3920:122;;3961:79;;:::i;:::-;3920:122;4078:6;4065:20;4103:78;4177:3;4169:6;4162:4;4154:6;4150:17;4103:78;:::i;:::-;4094:87;;3910:277;3849:338;;;;:::o;4207:340::-;4263:5;4312:3;4305:4;4297:6;4293:17;4289:27;4279:122;;4320:79;;:::i;:::-;4279:122;4437:6;4424:20;4462:79;4537:3;4529:6;4522:4;4514:6;4510:17;4462:79;:::i;:::-;4453:88;;4269:278;4207:340;;;;:::o;4553:139::-;4599:5;4637:6;4624:20;4615:29;;4653:33;4680:5;4653:33;:::i;:::-;4553:139;;;;:::o;4698:137::-;4743:5;4781:6;4768:20;4759:29;;4797:32;4823:5;4797:32;:::i;:::-;4698:137;;;;:::o;4841:135::-;4885:5;4923:6;4910:20;4901:29;;4939:31;4964:5;4939:31;:::i;:::-;4841:135;;;;:::o;4982:329::-;5041:6;5090:2;5078:9;5069:7;5065:23;5061:32;5058:119;;;5096:79;;:::i;:::-;5058:119;5216:1;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5187:117;4982:329;;;;:::o;5317:474::-;5385:6;5393;5442:2;5430:9;5421:7;5417:23;5413:32;5410:119;;;5448:79;;:::i;:::-;5410:119;5568:1;5593:53;5638:7;5629:6;5618:9;5614:22;5593:53;:::i;:::-;5583:63;;5539:117;5695:2;5721:53;5766:7;5757:6;5746:9;5742:22;5721:53;:::i;:::-;5711:63;;5666:118;5317:474;;;;;:::o;5797:1509::-;5951:6;5959;5967;5975;5983;6032:3;6020:9;6011:7;6007:23;6003:33;6000:120;;;6039:79;;:::i;:::-;6000:120;6159:1;6184:53;6229:7;6220:6;6209:9;6205:22;6184:53;:::i;:::-;6174:63;;6130:117;6286:2;6312:53;6357:7;6348:6;6337:9;6333:22;6312:53;:::i;:::-;6302:63;;6257:118;6442:2;6431:9;6427:18;6414:32;6473:18;6465:6;6462:30;6459:117;;;6495:79;;:::i;:::-;6459:117;6600:78;6670:7;6661:6;6650:9;6646:22;6600:78;:::i;:::-;6590:88;;6385:303;6755:2;6744:9;6740:18;6727:32;6786:18;6778:6;6775:30;6772:117;;;6808:79;;:::i;:::-;6772:117;6913:78;6983:7;6974:6;6963:9;6959:22;6913:78;:::i;:::-;6903:88;;6698:303;7068:3;7057:9;7053:19;7040:33;7100:18;7092:6;7089:30;7086:117;;;7122:79;;:::i;:::-;7086:117;7227:62;7281:7;7272:6;7261:9;7257:22;7227:62;:::i;:::-;7217:72;;7011:288;5797:1509;;;;;;;;:::o;7312:1089::-;7416:6;7424;7432;7440;7448;7497:3;7485:9;7476:7;7472:23;7468:33;7465:120;;;7504:79;;:::i;:::-;7465:120;7624:1;7649:53;7694:7;7685:6;7674:9;7670:22;7649:53;:::i;:::-;7639:63;;7595:117;7751:2;7777:53;7822:7;7813:6;7802:9;7798:22;7777:53;:::i;:::-;7767:63;;7722:118;7879:2;7905:53;7950:7;7941:6;7930:9;7926:22;7905:53;:::i;:::-;7895:63;;7850:118;8007:2;8033:53;8078:7;8069:6;8058:9;8054:22;8033:53;:::i;:::-;8023:63;;7978:118;8163:3;8152:9;8148:19;8135:33;8195:18;8187:6;8184:30;8181:117;;;8217:79;;:::i;:::-;8181:117;8322:62;8376:7;8367:6;8356:9;8352:22;8322:62;:::i;:::-;8312:72;;8106:288;7312:1089;;;;;;;;:::o;8407:468::-;8472:6;8480;8529:2;8517:9;8508:7;8504:23;8500:32;8497:119;;;8535:79;;:::i;:::-;8497:119;8655:1;8680:53;8725:7;8716:6;8705:9;8701:22;8680:53;:::i;:::-;8670:63;;8626:117;8782:2;8808:50;8850:7;8841:6;8830:9;8826:22;8808:50;:::i;:::-;8798:60;;8753:115;8407:468;;;;;:::o;8881:474::-;8949:6;8957;9006:2;8994:9;8985:7;8981:23;8977:32;8974:119;;;9012:79;;:::i;:::-;8974:119;9132:1;9157:53;9202:7;9193:6;9182:9;9178:22;9157:53;:::i;:::-;9147:63;;9103:117;9259:2;9285:53;9330:7;9321:6;9310:9;9306:22;9285:53;:::i;:::-;9275:63;;9230:118;8881:474;;;;;:::o;9361:539::-;9445:6;9494:2;9482:9;9473:7;9469:23;9465:32;9462:119;;;9500:79;;:::i;:::-;9462:119;9648:1;9637:9;9633:17;9620:31;9678:18;9670:6;9667:30;9664:117;;;9700:79;;:::i;:::-;9664:117;9805:78;9875:7;9866:6;9855:9;9851:22;9805:78;:::i;:::-;9795:88;;9591:302;9361:539;;;;:::o;9906:894::-;10024:6;10032;10081:2;10069:9;10060:7;10056:23;10052:32;10049:119;;;10087:79;;:::i;:::-;10049:119;10235:1;10224:9;10220:17;10207:31;10265:18;10257:6;10254:30;10251:117;;;10287:79;;:::i;:::-;10251:117;10392:78;10462:7;10453:6;10442:9;10438:22;10392:78;:::i;:::-;10382:88;;10178:302;10547:2;10536:9;10532:18;10519:32;10578:18;10570:6;10567:30;10564:117;;;10600:79;;:::i;:::-;10564:117;10705:78;10775:7;10766:6;10755:9;10751:22;10705:78;:::i;:::-;10695:88;;10490:303;9906:894;;;;;:::o;10806:327::-;10864:6;10913:2;10901:9;10892:7;10888:23;10884:32;10881:119;;;10919:79;;:::i;:::-;10881:119;11039:1;11064:52;11108:7;11099:6;11088:9;11084:22;11064:52;:::i;:::-;11054:62;;11010:116;10806:327;;;;:::o;11139:349::-;11208:6;11257:2;11245:9;11236:7;11232:23;11228:32;11225:119;;;11263:79;;:::i;:::-;11225:119;11383:1;11408:63;11463:7;11454:6;11443:9;11439:22;11408:63;:::i;:::-;11398:73;;11354:127;11139:349;;;;:::o;11494:509::-;11563:6;11612:2;11600:9;11591:7;11587:23;11583:32;11580:119;;;11618:79;;:::i;:::-;11580:119;11766:1;11755:9;11751:17;11738:31;11796:18;11788:6;11785:30;11782:117;;;11818:79;;:::i;:::-;11782:117;11923:63;11978:7;11969:6;11958:9;11954:22;11923:63;:::i;:::-;11913:73;;11709:287;11494:509;;;;:::o;12009:329::-;12068:6;12117:2;12105:9;12096:7;12092:23;12088:32;12085:119;;;12123:79;;:::i;:::-;12085:119;12243:1;12268:53;12313:7;12304:6;12293:9;12289:22;12268:53;:::i;:::-;12258:63;;12214:117;12009:329;;;;:::o;12344:327::-;12402:6;12451:2;12439:9;12430:7;12426:23;12422:32;12419:119;;;12457:79;;:::i;:::-;12419:119;12577:1;12602:52;12646:7;12637:6;12626:9;12622:22;12602:52;:::i;:::-;12592:62;;12548:116;12344:327;;;;:::o;12677:759::-;12760:6;12768;12776;12784;12833:3;12821:9;12812:7;12808:23;12804:33;12801:120;;;12840:79;;:::i;:::-;12801:120;12960:1;12985:51;13028:7;13019:6;13008:9;13004:22;12985:51;:::i;:::-;12975:61;;12931:115;13085:2;13111:53;13156:7;13147:6;13136:9;13132:22;13111:53;:::i;:::-;13101:63;;13056:118;13213:2;13239:53;13284:7;13275:6;13264:9;13260:22;13239:53;:::i;:::-;13229:63;;13184:118;13341:2;13367:52;13411:7;13402:6;13391:9;13387:22;13367:52;:::i;:::-;13357:62;;13312:117;12677:759;;;;;;;:::o;13442:179::-;13511:10;13532:46;13574:3;13566:6;13532:46;:::i;:::-;13610:4;13605:3;13601:14;13587:28;;13442:179;;;;:::o;13627:118::-;13714:24;13732:5;13714:24;:::i;:::-;13709:3;13702:37;13627:118;;:::o;13751:157::-;13856:45;13876:24;13894:5;13876:24;:::i;:::-;13856:45;:::i;:::-;13851:3;13844:58;13751:157;;:::o;13944:732::-;14063:3;14092:54;14140:5;14092:54;:::i;:::-;14162:86;14241:6;14236:3;14162:86;:::i;:::-;14155:93;;14272:56;14322:5;14272:56;:::i;:::-;14351:7;14382:1;14367:284;14392:6;14389:1;14386:13;14367:284;;;14468:6;14462:13;14495:63;14554:3;14539:13;14495:63;:::i;:::-;14488:70;;14581:60;14634:6;14581:60;:::i;:::-;14571:70;;14427:224;14414:1;14411;14407:9;14402:14;;14367:284;;;14371:14;14667:3;14660:10;;14068:608;;;13944:732;;;;:::o;14682:109::-;14763:21;14778:5;14763:21;:::i;:::-;14758:3;14751:34;14682:109;;:::o;14797:118::-;14884:24;14902:5;14884:24;:::i;:::-;14879:3;14872:37;14797:118;;:::o;14921:157::-;15026:45;15046:24;15064:5;15046:24;:::i;:::-;15026:45;:::i;:::-;15021:3;15014:58;14921:157;;:::o;15084:360::-;15170:3;15198:38;15230:5;15198:38;:::i;:::-;15252:70;15315:6;15310:3;15252:70;:::i;:::-;15245:77;;15331:52;15376:6;15371:3;15364:4;15357:5;15353:16;15331:52;:::i;:::-;15408:29;15430:6;15408:29;:::i;:::-;15403:3;15399:39;15392:46;;15174:270;15084:360;;;;:::o;15450:364::-;15538:3;15566:39;15599:5;15566:39;:::i;:::-;15621:71;15685:6;15680:3;15621:71;:::i;:::-;15614:78;;15701:52;15746:6;15741:3;15734:4;15727:5;15723:16;15701:52;:::i;:::-;15778:29;15800:6;15778:29;:::i;:::-;15773:3;15769:39;15762:46;;15542:272;15450:364;;;;:::o;15820:366::-;15962:3;15983:67;16047:2;16042:3;15983:67;:::i;:::-;15976:74;;16059:93;16148:3;16059:93;:::i;:::-;16177:2;16172:3;16168:12;16161:19;;15820:366;;;:::o;16192:::-;16334:3;16355:67;16419:2;16414:3;16355:67;:::i;:::-;16348:74;;16431:93;16520:3;16431:93;:::i;:::-;16549:2;16544:3;16540:12;16533:19;;16192:366;;;:::o;16564:402::-;16724:3;16745:85;16827:2;16822:3;16745:85;:::i;:::-;16738:92;;16839:93;16928:3;16839:93;:::i;:::-;16957:2;16952:3;16948:12;16941:19;;16564:402;;;:::o;16972:366::-;17114:3;17135:67;17199:2;17194:3;17135:67;:::i;:::-;17128:74;;17211:93;17300:3;17211:93;:::i;:::-;17329:2;17324:3;17320:12;17313:19;;16972:366;;;:::o;17344:::-;17486:3;17507:67;17571:2;17566:3;17507:67;:::i;:::-;17500:74;;17583:93;17672:3;17583:93;:::i;:::-;17701:2;17696:3;17692:12;17685:19;;17344:366;;;:::o;17716:::-;17858:3;17879:67;17943:2;17938:3;17879:67;:::i;:::-;17872:74;;17955:93;18044:3;17955:93;:::i;:::-;18073:2;18068:3;18064:12;18057:19;;17716:366;;;:::o;18088:::-;18230:3;18251:67;18315:2;18310:3;18251:67;:::i;:::-;18244:74;;18327:93;18416:3;18327:93;:::i;:::-;18445:2;18440:3;18436:12;18429:19;;18088:366;;;:::o;18460:::-;18602:3;18623:67;18687:2;18682:3;18623:67;:::i;:::-;18616:74;;18699:93;18788:3;18699:93;:::i;:::-;18817:2;18812:3;18808:12;18801:19;;18460:366;;;:::o;18832:::-;18974:3;18995:67;19059:2;19054:3;18995:67;:::i;:::-;18988:74;;19071:93;19160:3;19071:93;:::i;:::-;19189:2;19184:3;19180:12;19173:19;;18832:366;;;:::o;19204:::-;19346:3;19367:67;19431:2;19426:3;19367:67;:::i;:::-;19360:74;;19443:93;19532:3;19443:93;:::i;:::-;19561:2;19556:3;19552:12;19545:19;;19204:366;;;:::o;19576:::-;19718:3;19739:67;19803:2;19798:3;19739:67;:::i;:::-;19732:74;;19815:93;19904:3;19815:93;:::i;:::-;19933:2;19928:3;19924:12;19917:19;;19576:366;;;:::o;19948:::-;20090:3;20111:67;20175:2;20170:3;20111:67;:::i;:::-;20104:74;;20187:93;20276:3;20187:93;:::i;:::-;20305:2;20300:3;20296:12;20289:19;;19948:366;;;:::o;20320:::-;20462:3;20483:67;20547:2;20542:3;20483:67;:::i;:::-;20476:74;;20559:93;20648:3;20559:93;:::i;:::-;20677:2;20672:3;20668:12;20661:19;;20320:366;;;:::o;20692:::-;20834:3;20855:67;20919:2;20914:3;20855:67;:::i;:::-;20848:74;;20931:93;21020:3;20931:93;:::i;:::-;21049:2;21044:3;21040:12;21033:19;;20692:366;;;:::o;21064:::-;21206:3;21227:67;21291:2;21286:3;21227:67;:::i;:::-;21220:74;;21303:93;21392:3;21303:93;:::i;:::-;21421:2;21416:3;21412:12;21405:19;;21064:366;;;:::o;21436:::-;21578:3;21599:67;21663:2;21658:3;21599:67;:::i;:::-;21592:74;;21675:93;21764:3;21675:93;:::i;:::-;21793:2;21788:3;21784:12;21777:19;;21436:366;;;:::o;21808:::-;21950:3;21971:67;22035:2;22030:3;21971:67;:::i;:::-;21964:74;;22047:93;22136:3;22047:93;:::i;:::-;22165:2;22160:3;22156:12;22149:19;;21808:366;;;:::o;22180:::-;22322:3;22343:67;22407:2;22402:3;22343:67;:::i;:::-;22336:74;;22419:93;22508:3;22419:93;:::i;:::-;22537:2;22532:3;22528:12;22521:19;;22180:366;;;:::o;22552:::-;22694:3;22715:67;22779:2;22774:3;22715:67;:::i;:::-;22708:74;;22791:93;22880:3;22791:93;:::i;:::-;22909:2;22904:3;22900:12;22893:19;;22552:366;;;:::o;22924:::-;23066:3;23087:67;23151:2;23146:3;23087:67;:::i;:::-;23080:74;;23163:93;23252:3;23163:93;:::i;:::-;23281:2;23276:3;23272:12;23265:19;;22924:366;;;:::o;23296:::-;23438:3;23459:67;23523:2;23518:3;23459:67;:::i;:::-;23452:74;;23535:93;23624:3;23535:93;:::i;:::-;23653:2;23648:3;23644:12;23637:19;;23296:366;;;:::o;23668:108::-;23745:24;23763:5;23745:24;:::i;:::-;23740:3;23733:37;23668:108;;:::o;23782:118::-;23869:24;23887:5;23869:24;:::i;:::-;23864:3;23857:37;23782:118;;:::o;23906:115::-;23991:23;24008:5;23991:23;:::i;:::-;23986:3;23979:36;23906:115;;:::o;24027:112::-;24110:22;24126:5;24110:22;:::i;:::-;24105:3;24098:35;24027:112;;:::o;24145:256::-;24257:3;24272:75;24343:3;24334:6;24272:75;:::i;:::-;24372:2;24367:3;24363:12;24356:19;;24392:3;24385:10;;24145:256;;;;:::o;24407:522::-;24620:3;24642:148;24786:3;24642:148;:::i;:::-;24635:155;;24800:75;24871:3;24862:6;24800:75;:::i;:::-;24900:2;24895:3;24891:12;24884:19;;24920:3;24913:10;;24407:522;;;;:::o;24935:222::-;25028:4;25066:2;25055:9;25051:18;25043:26;;25079:71;25147:1;25136:9;25132:17;25123:6;25079:71;:::i;:::-;24935:222;;;;:::o;25163:1053::-;25486:4;25524:3;25513:9;25509:19;25501:27;;25538:71;25606:1;25595:9;25591:17;25582:6;25538:71;:::i;:::-;25619:72;25687:2;25676:9;25672:18;25663:6;25619:72;:::i;:::-;25738:9;25732:4;25728:20;25723:2;25712:9;25708:18;25701:48;25766:108;25869:4;25860:6;25766:108;:::i;:::-;25758:116;;25921:9;25915:4;25911:20;25906:2;25895:9;25891:18;25884:48;25949:108;26052:4;26043:6;25949:108;:::i;:::-;25941:116;;26105:9;26099:4;26095:20;26089:3;26078:9;26074:19;26067:49;26133:76;26204:4;26195:6;26133:76;:::i;:::-;26125:84;;25163:1053;;;;;;;;:::o;26222:751::-;26445:4;26483:3;26472:9;26468:19;26460:27;;26497:71;26565:1;26554:9;26550:17;26541:6;26497:71;:::i;:::-;26578:72;26646:2;26635:9;26631:18;26622:6;26578:72;:::i;:::-;26660;26728:2;26717:9;26713:18;26704:6;26660:72;:::i;:::-;26742;26810:2;26799:9;26795:18;26786:6;26742:72;:::i;:::-;26862:9;26856:4;26852:20;26846:3;26835:9;26831:19;26824:49;26890:76;26961:4;26952:6;26890:76;:::i;:::-;26882:84;;26222:751;;;;;;;;:::o;26979:373::-;27122:4;27160:2;27149:9;27145:18;27137:26;;27209:9;27203:4;27199:20;27195:1;27184:9;27180:17;27173:47;27237:108;27340:4;27331:6;27237:108;:::i;:::-;27229:116;;26979:373;;;;:::o;27358:634::-;27579:4;27617:2;27606:9;27602:18;27594:26;;27666:9;27660:4;27656:20;27652:1;27641:9;27637:17;27630:47;27694:108;27797:4;27788:6;27694:108;:::i;:::-;27686:116;;27849:9;27843:4;27839:20;27834:2;27823:9;27819:18;27812:48;27877:108;27980:4;27971:6;27877:108;:::i;:::-;27869:116;;27358:634;;;;;:::o;27998:210::-;28085:4;28123:2;28112:9;28108:18;28100:26;;28136:65;28198:1;28187:9;28183:17;28174:6;28136:65;:::i;:::-;27998:210;;;;:::o;28214:545::-;28387:4;28425:3;28414:9;28410:19;28402:27;;28439:71;28507:1;28496:9;28492:17;28483:6;28439:71;:::i;:::-;28520:68;28584:2;28573:9;28569:18;28560:6;28520:68;:::i;:::-;28598:72;28666:2;28655:9;28651:18;28642:6;28598:72;:::i;:::-;28680;28748:2;28737:9;28733:18;28724:6;28680:72;:::i;:::-;28214:545;;;;;;;:::o;28765:313::-;28878:4;28916:2;28905:9;28901:18;28893:26;;28965:9;28959:4;28955:20;28951:1;28940:9;28936:17;28929:47;28993:78;29066:4;29057:6;28993:78;:::i;:::-;28985:86;;28765:313;;;;:::o;29084:419::-;29250:4;29288:2;29277:9;29273:18;29265:26;;29337:9;29331:4;29327:20;29323:1;29312:9;29308:17;29301:47;29365:131;29491:4;29365:131;:::i;:::-;29357:139;;29084:419;;;:::o;29509:::-;29675:4;29713:2;29702:9;29698:18;29690:26;;29762:9;29756:4;29752:20;29748:1;29737:9;29733:17;29726:47;29790:131;29916:4;29790:131;:::i;:::-;29782:139;;29509:419;;;:::o;29934:::-;30100:4;30138:2;30127:9;30123:18;30115:26;;30187:9;30181:4;30177:20;30173:1;30162:9;30158:17;30151:47;30215:131;30341:4;30215:131;:::i;:::-;30207:139;;29934:419;;;:::o;30359:::-;30525:4;30563:2;30552:9;30548:18;30540:26;;30612:9;30606:4;30602:20;30598:1;30587:9;30583:17;30576:47;30640:131;30766:4;30640:131;:::i;:::-;30632:139;;30359:419;;;:::o;30784:::-;30950:4;30988:2;30977:9;30973:18;30965:26;;31037:9;31031:4;31027:20;31023:1;31012:9;31008:17;31001:47;31065:131;31191:4;31065:131;:::i;:::-;31057:139;;30784:419;;;:::o;31209:::-;31375:4;31413:2;31402:9;31398:18;31390:26;;31462:9;31456:4;31452:20;31448:1;31437:9;31433:17;31426:47;31490:131;31616:4;31490:131;:::i;:::-;31482:139;;31209:419;;;:::o;31634:::-;31800:4;31838:2;31827:9;31823:18;31815:26;;31887:9;31881:4;31877:20;31873:1;31862:9;31858:17;31851:47;31915:131;32041:4;31915:131;:::i;:::-;31907:139;;31634:419;;;:::o;32059:::-;32225:4;32263:2;32252:9;32248:18;32240:26;;32312:9;32306:4;32302:20;32298:1;32287:9;32283:17;32276:47;32340:131;32466:4;32340:131;:::i;:::-;32332:139;;32059:419;;;:::o;32484:::-;32650:4;32688:2;32677:9;32673:18;32665:26;;32737:9;32731:4;32727:20;32723:1;32712:9;32708:17;32701:47;32765:131;32891:4;32765:131;:::i;:::-;32757:139;;32484:419;;;:::o;32909:::-;33075:4;33113:2;33102:9;33098:18;33090:26;;33162:9;33156:4;33152:20;33148:1;33137:9;33133:17;33126:47;33190:131;33316:4;33190:131;:::i;:::-;33182:139;;32909:419;;;:::o;33334:::-;33500:4;33538:2;33527:9;33523:18;33515:26;;33587:9;33581:4;33577:20;33573:1;33562:9;33558:17;33551:47;33615:131;33741:4;33615:131;:::i;:::-;33607:139;;33334:419;;;:::o;33759:::-;33925:4;33963:2;33952:9;33948:18;33940:26;;34012:9;34006:4;34002:20;33998:1;33987:9;33983:17;33976:47;34040:131;34166:4;34040:131;:::i;:::-;34032:139;;33759:419;;;:::o;34184:::-;34350:4;34388:2;34377:9;34373:18;34365:26;;34437:9;34431:4;34427:20;34423:1;34412:9;34408:17;34401:47;34465:131;34591:4;34465:131;:::i;:::-;34457:139;;34184:419;;;:::o;34609:::-;34775:4;34813:2;34802:9;34798:18;34790:26;;34862:9;34856:4;34852:20;34848:1;34837:9;34833:17;34826:47;34890:131;35016:4;34890:131;:::i;:::-;34882:139;;34609:419;;;:::o;35034:::-;35200:4;35238:2;35227:9;35223:18;35215:26;;35287:9;35281:4;35277:20;35273:1;35262:9;35258:17;35251:47;35315:131;35441:4;35315:131;:::i;:::-;35307:139;;35034:419;;;:::o;35459:::-;35625:4;35663:2;35652:9;35648:18;35640:26;;35712:9;35706:4;35702:20;35698:1;35687:9;35683:17;35676:47;35740:131;35866:4;35740:131;:::i;:::-;35732:139;;35459:419;;;:::o;35884:::-;36050:4;36088:2;36077:9;36073:18;36065:26;;36137:9;36131:4;36127:20;36123:1;36112:9;36108:17;36101:47;36165:131;36291:4;36165:131;:::i;:::-;36157:139;;35884:419;;;:::o;36309:::-;36475:4;36513:2;36502:9;36498:18;36490:26;;36562:9;36556:4;36552:20;36548:1;36537:9;36533:17;36526:47;36590:131;36716:4;36590:131;:::i;:::-;36582:139;;36309:419;;;:::o;36734:::-;36900:4;36938:2;36927:9;36923:18;36915:26;;36987:9;36981:4;36977:20;36973:1;36962:9;36958:17;36951:47;37015:131;37141:4;37015:131;:::i;:::-;37007:139;;36734:419;;;:::o;37159:::-;37325:4;37363:2;37352:9;37348:18;37340:26;;37412:9;37406:4;37402:20;37398:1;37387:9;37383:17;37376:47;37440:131;37566:4;37440:131;:::i;:::-;37432:139;;37159:419;;;:::o;37584:222::-;37677:4;37715:2;37704:9;37700:18;37692:26;;37728:71;37796:1;37785:9;37781:17;37772:6;37728:71;:::i;:::-;37584:222;;;;:::o;37812:332::-;37933:4;37971:2;37960:9;37956:18;37948:26;;37984:71;38052:1;38041:9;38037:17;38028:6;37984:71;:::i;:::-;38065:72;38133:2;38122:9;38118:18;38109:6;38065:72;:::i;:::-;37812:332;;;;;:::o;38150:218::-;38241:4;38279:2;38268:9;38264:18;38256:26;;38292:69;38358:1;38347:9;38343:17;38334:6;38292:69;:::i;:::-;38150:218;;;;:::o;38374:129::-;38408:6;38435:20;;:::i;:::-;38425:30;;38464:33;38492:4;38484:6;38464:33;:::i;:::-;38374:129;;;:::o;38509:75::-;38542:6;38575:2;38569:9;38559:19;;38509:75;:::o;38590:311::-;38667:4;38757:18;38749:6;38746:30;38743:56;;;38779:18;;:::i;:::-;38743:56;38829:4;38821:6;38817:17;38809:25;;38889:4;38883;38879:15;38871:23;;38590:311;;;:::o;38907:::-;38984:4;39074:18;39066:6;39063:30;39060:56;;;39096:18;;:::i;:::-;39060:56;39146:4;39138:6;39134:17;39126:25;;39206:4;39200;39196:15;39188:23;;38907:311;;;:::o;39224:307::-;39285:4;39375:18;39367:6;39364:30;39361:56;;;39397:18;;:::i;:::-;39361:56;39435:29;39457:6;39435:29;:::i;:::-;39427:37;;39519:4;39513;39509:15;39501:23;;39224:307;;;:::o;39537:308::-;39599:4;39689:18;39681:6;39678:30;39675:56;;;39711:18;;:::i;:::-;39675:56;39749:29;39771:6;39749:29;:::i;:::-;39741:37;;39833:4;39827;39823:15;39815:23;;39537:308;;;:::o;39851:132::-;39918:4;39941:3;39933:11;;39971:4;39966:3;39962:14;39954:22;;39851:132;;;:::o;39989:114::-;40056:6;40090:5;40084:12;40074:22;;39989:114;;;:::o;40109:98::-;40160:6;40194:5;40188:12;40178:22;;40109:98;;;:::o;40213:99::-;40265:6;40299:5;40293:12;40283:22;;40213:99;;;:::o;40318:113::-;40388:4;40420;40415:3;40411:14;40403:22;;40318:113;;;:::o;40437:184::-;40536:11;40570:6;40565:3;40558:19;40610:4;40605:3;40601:14;40586:29;;40437:184;;;;:::o;40627:168::-;40710:11;40744:6;40739:3;40732:19;40784:4;40779:3;40775:14;40760:29;;40627:168;;;;:::o;40801:169::-;40885:11;40919:6;40914:3;40907:19;40959:4;40954:3;40950:14;40935:29;;40801:169;;;;:::o;40976:148::-;41078:11;41115:3;41100:18;;40976:148;;;;:::o;41130:305::-;41170:3;41189:20;41207:1;41189:20;:::i;:::-;41184:25;;41223:20;41241:1;41223:20;:::i;:::-;41218:25;;41377:1;41309:66;41305:74;41302:1;41299:81;41296:107;;;41383:18;;:::i;:::-;41296:107;41427:1;41424;41420:9;41413:16;;41130:305;;;;:::o;41441:246::-;41480:3;41499:19;41516:1;41499:19;:::i;:::-;41494:24;;41532:19;41549:1;41532:19;:::i;:::-;41527:24;;41629:1;41617:10;41613:18;41610:1;41607:25;41604:51;;;41635:18;;:::i;:::-;41604:51;41679:1;41676;41672:9;41665:16;;41441:246;;;;:::o;41693:185::-;41733:1;41750:20;41768:1;41750:20;:::i;:::-;41745:25;;41784:20;41802:1;41784:20;:::i;:::-;41779:25;;41823:1;41813:35;;41828:18;;:::i;:::-;41813:35;41870:1;41867;41863:9;41858:14;;41693:185;;;;:::o;41884:348::-;41924:7;41947:20;41965:1;41947:20;:::i;:::-;41942:25;;41981:20;41999:1;41981:20;:::i;:::-;41976:25;;42169:1;42101:66;42097:74;42094:1;42091:81;42086:1;42079:9;42072:17;42068:105;42065:131;;;42176:18;;:::i;:::-;42065:131;42224:1;42221;42217:9;42206:20;;41884:348;;;;:::o;42238:191::-;42278:4;42298:20;42316:1;42298:20;:::i;:::-;42293:25;;42332:20;42350:1;42332:20;:::i;:::-;42327:25;;42371:1;42368;42365:8;42362:34;;;42376:18;;:::i;:::-;42362:34;42421:1;42418;42414:9;42406:17;;42238:191;;;;:::o;42435:96::-;42472:7;42501:24;42519:5;42501:24;:::i;:::-;42490:35;;42435:96;;;:::o;42537:90::-;42571:7;42614:5;42607:13;42600:21;42589:32;;42537:90;;;:::o;42633:77::-;42670:7;42699:5;42688:16;;42633:77;;;:::o;42716:149::-;42752:7;42792:66;42785:5;42781:78;42770:89;;42716:149;;;:::o;42871:126::-;42908:7;42948:42;42941:5;42937:54;42926:65;;42871:126;;;:::o;43003:77::-;43040:7;43069:5;43058:16;;43003:77;;;:::o;43086:93::-;43122:7;43162:10;43155:5;43151:22;43140:33;;43086:93;;;:::o;43185:86::-;43220:7;43260:4;43253:5;43249:16;43238:27;;43185:86;;;:::o;43277:154::-;43361:6;43356:3;43351;43338:30;43423:1;43414:6;43409:3;43405:16;43398:27;43277:154;;;:::o;43437:307::-;43505:1;43515:113;43529:6;43526:1;43523:13;43515:113;;;43614:1;43609:3;43605:11;43599:18;43595:1;43590:3;43586:11;43579:39;43551:2;43548:1;43544:10;43539:15;;43515:113;;;43646:6;43643:1;43640:13;43637:101;;;43726:1;43717:6;43712:3;43708:16;43701:27;43637:101;43486:258;43437:307;;;:::o;43750:320::-;43794:6;43831:1;43825:4;43821:12;43811:22;;43878:1;43872:4;43868:12;43899:18;43889:81;;43955:4;43947:6;43943:17;43933:27;;43889:81;44017:2;44009:6;44006:14;43986:18;43983:38;43980:84;;;44036:18;;:::i;:::-;43980:84;43801:269;43750:320;;;:::o;44076:281::-;44159:27;44181:4;44159:27;:::i;:::-;44151:6;44147:40;44289:6;44277:10;44274:22;44253:18;44241:10;44238:34;44235:62;44232:88;;;44300:18;;:::i;:::-;44232:88;44340:10;44336:2;44329:22;44119:238;44076:281;;:::o;44363:233::-;44402:3;44425:24;44443:5;44425:24;:::i;:::-;44416:33;;44471:66;44464:5;44461:77;44458:103;;;44541:18;;:::i;:::-;44458:103;44588:1;44581:5;44577:13;44570:20;;44363:233;;;:::o;44602:175::-;44640:3;44663:23;44680:5;44663:23;:::i;:::-;44654:32;;44708:10;44701:5;44698:21;44695:47;;;44722:18;;:::i;:::-;44695:47;44769:1;44762:5;44758:13;44751:20;;44602:175;;;:::o;44783:100::-;44822:7;44851:26;44871:5;44851:26;:::i;:::-;44840:37;;44783:100;;;:::o;44889:79::-;44928:7;44957:5;44946:16;;44889:79;;;:::o;44974:94::-;45013:7;45042:20;45056:5;45042:20;:::i;:::-;45031:31;;44974:94;;;:::o;45074:180::-;45122:77;45119:1;45112:88;45219:4;45216:1;45209:15;45243:4;45240:1;45233:15;45260:180;45308:77;45305:1;45298:88;45405:4;45402:1;45395:15;45429:4;45426:1;45419:15;45446:180;45494:77;45491:1;45484:88;45591:4;45588:1;45581:15;45615:4;45612:1;45605:15;45632:180;45680:77;45677:1;45670:88;45777:4;45774:1;45767:15;45801:4;45798:1;45791:15;45818:180;45866:77;45863:1;45856:88;45963:4;45960:1;45953:15;45987:4;45984:1;45977:15;46004:183;46039:3;46077:1;46059:16;46056:23;46053:128;;;46115:1;46112;46109;46094:23;46137:34;46168:1;46162:8;46137:34;:::i;:::-;46130:41;;46053:128;46004:183;:::o;46193:117::-;46302:1;46299;46292:12;46316:117;46425:1;46422;46415:12;46439:117;46548:1;46545;46538:12;46562:117;46671:1;46668;46661:12;46685:117;46794:1;46791;46784:12;46808:102;46849:6;46900:2;46896:7;46891:2;46884:5;46880:14;46876:28;46866:38;;46808:102;;;:::o;46916:94::-;46949:8;46997:5;46993:2;46989:14;46968:35;;46916:94;;;:::o;47016:106::-;47060:8;47109:5;47104:3;47100:15;47079:36;;47016:106;;;:::o;47128:239::-;47268:34;47264:1;47256:6;47252:14;47245:58;47337:22;47332:2;47324:6;47320:15;47313:47;47128:239;:::o;47373:227::-;47513:34;47509:1;47501:6;47497:14;47490:58;47582:10;47577:2;47569:6;47565:15;47558:35;47373:227;:::o;47606:214::-;47746:66;47742:1;47734:6;47730:14;47723:90;47606:214;:::o;47826:233::-;47966:34;47962:1;47954:6;47950:14;47943:58;48035:16;48030:2;48022:6;48018:15;48011:41;47826:233;:::o;48065:230::-;48205:34;48201:1;48193:6;48189:14;48182:58;48274:13;48269:2;48261:6;48257:15;48250:38;48065:230;:::o;48301:225::-;48441:34;48437:1;48429:6;48425:14;48418:58;48510:8;48505:2;48497:6;48493:15;48486:33;48301:225;:::o;48532:228::-;48672:34;48668:1;48660:6;48656:14;48649:58;48741:11;48736:2;48728:6;48724:15;48717:36;48532:228;:::o;48766:176::-;48906:28;48902:1;48894:6;48890:14;48883:52;48766:176;:::o;48948:179::-;49088:31;49084:1;49076:6;49072:14;49065:55;48948:179;:::o;49133:167::-;49273:19;49269:1;49261:6;49257:14;49250:43;49133:167;:::o;49306:224::-;49446:34;49442:1;49434:6;49430:14;49423:58;49515:7;49510:2;49502:6;49498:15;49491:32;49306:224;:::o;49536:237::-;49676:34;49672:1;49664:6;49660:14;49653:58;49745:20;49740:2;49732:6;49728:15;49721:45;49536:237;:::o;49779:173::-;49919:25;49915:1;49907:6;49903:14;49896:49;49779:173;:::o;49958:229::-;50098:34;50094:1;50086:6;50082:14;50075:58;50167:12;50162:2;50154:6;50150:15;50143:37;49958:229;:::o;50193:228::-;50333:34;50329:1;50321:6;50317:14;50310:58;50402:11;50397:2;50389:6;50385:15;50378:36;50193:228;:::o;50427:182::-;50567:34;50563:1;50555:6;50551:14;50544:58;50427:182;:::o;50615:166::-;50755:18;50751:1;50743:6;50739:14;50732:42;50615:166;:::o;50787:228::-;50927:34;50923:1;50915:6;50911:14;50904:58;50996:11;50991:2;50983:6;50979:15;50972:36;50787:228;:::o;51021:::-;51161:34;51157:1;51149:6;51145:14;51138:58;51230:11;51225:2;51217:6;51213:15;51206:36;51021:228;:::o;51255:227::-;51395:34;51391:1;51383:6;51379:14;51372:58;51464:10;51459:2;51451:6;51447:15;51440:35;51255:227;:::o;51488:220::-;51628:34;51624:1;51616:6;51612:14;51605:58;51697:3;51692:2;51684:6;51680:15;51673:28;51488:220;:::o;51714:711::-;51753:3;51791:4;51773:16;51770:26;51767:39;;;51799:5;;51767:39;51828:20;;:::i;:::-;51903:1;51885:16;51881:24;51878:1;51872:4;51857:49;51936:4;51930:11;52035:16;52028:4;52020:6;52016:17;52013:39;51980:18;51972:6;51969:30;51953:113;51950:146;;;52081:5;;;;51950:146;52127:6;52121:4;52117:17;52163:3;52157:10;52190:18;52182:6;52179:30;52176:43;;;52212:5;;;;;;52176:43;52260:6;52253:4;52248:3;52244:14;52240:27;52319:1;52301:16;52297:24;52291:4;52287:35;52282:3;52279:44;52276:57;;;52326:5;;;;;;;52276:57;52343;52391:6;52385:4;52381:17;52373:6;52369:30;52363:4;52343:57;:::i;:::-;52416:3;52409:10;;51757:668;;;;;51714:711;;:::o;52431:122::-;52504:24;52522:5;52504:24;:::i;:::-;52497:5;52494:35;52484:63;;52543:1;52540;52533:12;52484:63;52431:122;:::o;52559:116::-;52629:21;52644:5;52629:21;:::i;:::-;52622:5;52619:32;52609:60;;52665:1;52662;52655:12;52609:60;52559:116;:::o;52681:122::-;52754:24;52772:5;52754:24;:::i;:::-;52747:5;52744:35;52734:63;;52793:1;52790;52783:12;52734:63;52681:122;:::o;52809:120::-;52881:23;52898:5;52881:23;:::i;:::-;52874:5;52871:34;52861:62;;52919:1;52916;52909:12;52861:62;52809:120;:::o;52935:122::-;53008:24;53026:5;53008:24;:::i;:::-;53001:5;52998:35;52988:63;;53047:1;53044;53037:12;52988:63;52935:122;:::o;53063:120::-;53135:23;53152:5;53135:23;:::i;:::-;53128:5;53125:34;53115:62;;53173:1;53170;53163:12;53115:62;53063:120;:::o;53189:118::-;53260:22;53276:5;53260:22;:::i;:::-;53253:5;53250:33;53240:61;;53297:1;53294;53287:12;53240:61;53189:118;:::o

Swarm Source

ipfs://15d27599e92ffc5690e8472d004afa240615f9d0fba726ff7f742cca1d8b04ca
Loading...
Loading
Loading...
Loading
[ 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.