ETH Price: $2,638.90 (+1.44%)

Token

 

Overview

Max Total Supply

0

Holders

19

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

0xa31A547758f695822fE582C76a6C404D5adC988F
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
DropMagazine

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: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol


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

pragma solidity ^0.8.0;


/**
 * @dev Extension of {ERC1155} that allows token holders to destroy both their
 * own tokens and those that they have been approved to use.
 *
 * _Available since v3.1._
 */
abstract contract ERC1155Burnable is ERC1155 {
    function burn(
        address account,
        uint256 id,
        uint256 value
    ) public virtual {
        require(
            account == _msgSender() || isApprovedForAll(account, _msgSender()),
            "ERC1155: caller is not owner nor approved"
        );

        _burn(account, id, value);
    }

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

        _burnBatch(account, ids, values);
    }
}

// File: dropmagazine.sol


pragma solidity ^0.8.2;




contract DropMagazine is ERC1155, Ownable, ERC1155Burnable {
    mapping(uint256 => string) private _uris;
    mapping(uint256 => bool) private _minted;

    constructor() ERC1155("") {}

    // returns the IPFS address of the Magazine Issue once set
    function uri(uint256 tokenId) override public view returns (string memory) {
        return(_uris[tokenId]);
    }

    // sets the IPFS address of the Magazine Issue
    function setTokenURI(uint256 tokenId, string memory newUri) public onlyOwner {   
        _uris[tokenId] = newUri;
    }

    // mints Drop #X
    function mint(address account, uint256 issueId, uint256 amount) public onlyOwner {
        require(_minted[issueId] == false, "Issue is already minted");
        _mint(account, issueId, amount, "");
        _minted[issueId] = true;
    }

    function withdraw() public onlyOwner {
        require(address(this).balance > 0, "Balance is 0");
        payable(owner()).transfer(address(this).balance);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"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":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"issueId","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"newUri","type":"string"}],"name":"setTokenURI","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060200160405280600081525062000033816200005a60201b60201c565b5062000054620000486200007660201b60201c565b6200007e60201b60201c565b62000259565b80600290805190602001906200007292919062000144565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200015290620001f4565b90600052602060002090601f016020900481019282620001765760008555620001c2565b82601f106200019157805160ff1916838001178555620001c2565b82800160010185558215620001c2579182015b82811115620001c1578251825591602001919060010190620001a4565b5b509050620001d19190620001d5565b5090565b5b80821115620001f0576000816000905550600101620001d6565b5090565b600060028204905060018216806200020d57607f821691505b602082108114156200022457620002236200022a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613a3b80620002696000396000f3fe608060405234801561001057600080fd5b50600436106100ff5760003560e01c80636b20c45411610097578063e985e9c511610066578063e985e9c514610282578063f242432a146102b2578063f2fde38b146102ce578063f5298aca146102ea576100ff565b80636b20c45414610222578063715018a61461023e5780638da5cb5b14610248578063a22cb46514610266576100ff565b8063162094c4116100d3578063162094c4146101b05780632eb2c2d6146101cc5780633ccfd60b146101e85780634e1273f4146101f2576100ff565b8062fdd58e1461010457806301ffc9a7146101345780630e89341c14610164578063156e29f614610194575b600080fd5b61011e600480360381019061011991906126ed565b610306565b60405161012b9190612fe5565b60405180910390f35b61014e600480360381019061014991906127f8565b6103cf565b60405161015b9190612d88565b60405180910390f35b61017e60048036038101906101799190612852565b6104b1565b60405161018b9190612da3565b60405180910390f35b6101ae60048036038101906101a9919061272d565b610556565b005b6101ca60048036038101906101c5919061287f565b610685565b005b6101e660048036038101906101e191906124bc565b61072d565b005b6101f06107ce565b005b61020c60048036038101906102079190612780565b6108dd565b6040516102199190612d2f565b60405180910390f35b61023c60048036038101906102379190612622565b6109f6565b005b610246610a93565b005b610250610b1b565b60405161025d9190612c52565b60405180910390f35b610280600480360381019061027b91906126ad565b610b45565b005b61029c6004803603810190610297919061247c565b610b5b565b6040516102a99190612d88565b60405180910390f35b6102cc60048036038101906102c7919061258b565b610bef565b005b6102e860048036038101906102e3919061244f565b610c90565b005b61030460048036038101906102ff919061272d565b610d88565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036e90612e05565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104aa57506104a982610e25565b5b9050919050565b60606004600083815260200190815260200160002080546104d190613285565b80601f01602080910402602001604051908101604052809291908181526020018280546104fd90613285565b801561054a5780601f1061051f5761010080835404028352916020019161054a565b820191906000526020600020905b81548152906001019060200180831161052d57829003601f168201915b50505050509050919050565b61055e610e8f565b73ffffffffffffffffffffffffffffffffffffffff1661057c610b1b565b73ffffffffffffffffffffffffffffffffffffffff16146105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c990612f25565b60405180910390fd5b600015156005600084815260200190815260200160002060009054906101000a900460ff16151514610639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063090612fc5565b60405180910390fd5b61065483838360405180602001604052806000815250610e97565b60016005600084815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b61068d610e8f565b73ffffffffffffffffffffffffffffffffffffffff166106ab610b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890612f25565b60405180910390fd5b80600460008481526020019081526020016000209080519060200190610728929190612127565b505050565b610735610e8f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061077b575061077a85610775610e8f565b610b5b565b5b6107ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b190612ea5565b60405180910390fd5b6107c7858585858561102d565b5050505050565b6107d6610e8f565b73ffffffffffffffffffffffffffffffffffffffff166107f4610b1b565b73ffffffffffffffffffffffffffffffffffffffff161461084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190612f25565b60405180910390fd5b6000471161088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088490612f05565b60405180910390fd5b610895610b1b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108da573d6000803e3d6000fd5b50565b60608151835114610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091a90612f65565b60405180910390fd5b6000835167ffffffffffffffff8111156109405761093f6133be565b5b60405190808252806020026020018201604052801561096e5781602001602082028036833780820191505090505b50905060005b84518110156109eb576109bb8582815181106109935761099261338f565b5b60200260200101518583815181106109ae576109ad61338f565b5b6020026020010151610306565b8282815181106109ce576109cd61338f565b5b602002602001018181525050806109e4906132e8565b9050610974565b508091505092915050565b6109fe610e8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a445750610a4383610a3e610e8f565b610b5b565b5b610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a90612e65565b60405180910390fd5b610a8e838383611341565b505050565b610a9b610e8f565b73ffffffffffffffffffffffffffffffffffffffff16610ab9610b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690612f25565b60405180910390fd5b610b1960006115f2565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b57610b50610e8f565b83836116b8565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610bf7610e8f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c3d5750610c3c85610c37610e8f565b610b5b565b5b610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390612e65565b60405180910390fd5b610c898585858585611825565b5050505050565b610c98610e8f565b73ffffffffffffffffffffffffffffffffffffffff16610cb6610b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390612f25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390612e25565b60405180910390fd5b610d85816115f2565b50565b610d90610e8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610dd65750610dd583610dd0610e8f565b610b5b565b5b610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90612e65565b60405180910390fd5b610e20838383611aa7565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90612fa5565b60405180910390fd5b6000610f11610e8f565b9050610f3281600087610f2388611cc4565b610f2c88611cc4565b87611d3e565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f919190613179565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161100f929190613000565b60405180910390a461102681600087878787611d46565b5050505050565b8151835114611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890612f85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890612e85565b60405180910390fd5b60006110eb610e8f565b90506110fb818787878787611d3e565b60005b84518110156112ac57600085828151811061111c5761111b61338f565b5b60200260200101519050600085838151811061113b5761113a61338f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390612ee5565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112919190613179565b92505081905550505050806112a5906132e8565b90506110fe565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611323929190612d51565b60405180910390a4611339818787878787611f2d565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890612ec5565b60405180910390fd5b80518251146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90612f85565b60405180910390fd5b60006113ff610e8f565b905061141f81856000868660405180602001604052806000815250611d3e565b60005b835181101561156c5760008482815181106114405761143f61338f565b5b60200260200101519050600084838151811061145f5761145e61338f565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790612e45565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611564906132e8565b915050611422565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115e4929190612d51565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90612f45565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118189190612d88565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90612e85565b60405180910390fd5b600061189f610e8f565b90506118bf8187876118b088611cc4565b6118b988611cc4565b87611d3e565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90612ee5565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a0b9190613179565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611a88929190613000565b60405180910390a4611a9e828888888888611d46565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90612ec5565b60405180910390fd5b6000611b21610e8f565b9050611b5181856000611b3387611cc4565b611b3c87611cc4565b60405180602001604052806000815250611d3e565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90612e45565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611cb5929190613000565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115611ce357611ce26133be565b5b604051908082528060200260200182016040528015611d115781602001602082028036833780820191505090505b5090508281600081518110611d2957611d2861338f565b5b60200260200101818152505080915050919050565b505050505050565b611d658473ffffffffffffffffffffffffffffffffffffffff16612114565b15611f25578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611dab959493929190612cd5565b602060405180830381600087803b158015611dc557600080fd5b505af1925050508015611df657506040513d601f19601f82011682018060405250810190611df39190612825565b60015b611e9c57611e026133ed565b806308c379a01415611e5f5750611e17613913565b80611e225750611e61565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e569190612da3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390612dc5565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90612de5565b60405180910390fd5b505b505050505050565b611f4c8473ffffffffffffffffffffffffffffffffffffffff16612114565b1561210c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f92959493929190612c6d565b602060405180830381600087803b158015611fac57600080fd5b505af1925050508015611fdd57506040513d601f19601f82011682018060405250810190611fda9190612825565b60015b61208357611fe96133ed565b806308c379a014156120465750611ffe613913565b806120095750612048565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d9190612da3565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a90612dc5565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190612de5565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461213390613285565b90600052602060002090601f016020900481019282612155576000855561219c565b82601f1061216e57805160ff191683800117855561219c565b8280016001018555821561219c579182015b8281111561219b578251825591602001919060010190612180565b5b5090506121a991906121ad565b5090565b5b808211156121c65760008160009055506001016121ae565b5090565b60006121dd6121d88461304e565b613029565b90508083825260208201905082856020860282011115612200576121ff613414565b5b60005b858110156122305781612216888261232e565b845260208401935060208301925050600181019050612203565b5050509392505050565b600061224d6122488461307a565b613029565b905080838252602082019050828560208602820111156122705761226f613414565b5b60005b858110156122a05781612286888261243a565b845260208401935060208301925050600181019050612273565b5050509392505050565b60006122bd6122b8846130a6565b613029565b9050828152602081018484840111156122d9576122d8613419565b5b6122e4848285613243565b509392505050565b60006122ff6122fa846130d7565b613029565b90508281526020810184848401111561231b5761231a613419565b5b612326848285613243565b509392505050565b60008135905061233d816139a9565b92915050565b600082601f8301126123585761235761340f565b5b81356123688482602086016121ca565b91505092915050565b600082601f8301126123865761238561340f565b5b813561239684826020860161223a565b91505092915050565b6000813590506123ae816139c0565b92915050565b6000813590506123c3816139d7565b92915050565b6000815190506123d8816139d7565b92915050565b600082601f8301126123f3576123f261340f565b5b81356124038482602086016122aa565b91505092915050565b600082601f8301126124215761242061340f565b5b81356124318482602086016122ec565b91505092915050565b600081359050612449816139ee565b92915050565b60006020828403121561246557612464613423565b5b60006124738482850161232e565b91505092915050565b6000806040838503121561249357612492613423565b5b60006124a18582860161232e565b92505060206124b28582860161232e565b9150509250929050565b600080600080600060a086880312156124d8576124d7613423565b5b60006124e68882890161232e565b95505060206124f78882890161232e565b945050604086013567ffffffffffffffff8111156125185761251761341e565b5b61252488828901612371565b935050606086013567ffffffffffffffff8111156125455761254461341e565b5b61255188828901612371565b925050608086013567ffffffffffffffff8111156125725761257161341e565b5b61257e888289016123de565b9150509295509295909350565b600080600080600060a086880312156125a7576125a6613423565b5b60006125b58882890161232e565b95505060206125c68882890161232e565b94505060406125d78882890161243a565b93505060606125e88882890161243a565b925050608086013567ffffffffffffffff8111156126095761260861341e565b5b612615888289016123de565b9150509295509295909350565b60008060006060848603121561263b5761263a613423565b5b60006126498682870161232e565b935050602084013567ffffffffffffffff81111561266a5761266961341e565b5b61267686828701612371565b925050604084013567ffffffffffffffff8111156126975761269661341e565b5b6126a386828701612371565b9150509250925092565b600080604083850312156126c4576126c3613423565b5b60006126d28582860161232e565b92505060206126e38582860161239f565b9150509250929050565b6000806040838503121561270457612703613423565b5b60006127128582860161232e565b92505060206127238582860161243a565b9150509250929050565b60008060006060848603121561274657612745613423565b5b60006127548682870161232e565b93505060206127658682870161243a565b92505060406127768682870161243a565b9150509250925092565b6000806040838503121561279757612796613423565b5b600083013567ffffffffffffffff8111156127b5576127b461341e565b5b6127c185828601612343565b925050602083013567ffffffffffffffff8111156127e2576127e161341e565b5b6127ee85828601612371565b9150509250929050565b60006020828403121561280e5761280d613423565b5b600061281c848285016123b4565b91505092915050565b60006020828403121561283b5761283a613423565b5b6000612849848285016123c9565b91505092915050565b60006020828403121561286857612867613423565b5b60006128768482850161243a565b91505092915050565b6000806040838503121561289657612895613423565b5b60006128a48582860161243a565b925050602083013567ffffffffffffffff8111156128c5576128c461341e565b5b6128d18582860161240c565b9150509250929050565b60006128e78383612c34565b60208301905092915050565b6128fc816131cf565b82525050565b600061290d82613118565b6129178185613146565b935061292283613108565b8060005b8381101561295357815161293a88826128db565b975061294583613139565b925050600181019050612926565b5085935050505092915050565b612969816131e1565b82525050565b600061297a82613123565b6129848185613157565b9350612994818560208601613252565b61299d81613428565b840191505092915050565b60006129b38261312e565b6129bd8185613168565b93506129cd818560208601613252565b6129d681613428565b840191505092915050565b60006129ee603483613168565b91506129f982613446565b604082019050919050565b6000612a11602883613168565b9150612a1c82613495565b604082019050919050565b6000612a34602b83613168565b9150612a3f826134e4565b604082019050919050565b6000612a57602683613168565b9150612a6282613533565b604082019050919050565b6000612a7a602483613168565b9150612a8582613582565b604082019050919050565b6000612a9d602983613168565b9150612aa8826135d1565b604082019050919050565b6000612ac0602583613168565b9150612acb82613620565b604082019050919050565b6000612ae3603283613168565b9150612aee8261366f565b604082019050919050565b6000612b06602383613168565b9150612b11826136be565b604082019050919050565b6000612b29602a83613168565b9150612b348261370d565b604082019050919050565b6000612b4c600c83613168565b9150612b578261375c565b602082019050919050565b6000612b6f602083613168565b9150612b7a82613785565b602082019050919050565b6000612b92602983613168565b9150612b9d826137ae565b604082019050919050565b6000612bb5602983613168565b9150612bc0826137fd565b604082019050919050565b6000612bd8602883613168565b9150612be38261384c565b604082019050919050565b6000612bfb602183613168565b9150612c068261389b565b604082019050919050565b6000612c1e601783613168565b9150612c29826138ea565b602082019050919050565b612c3d81613239565b82525050565b612c4c81613239565b82525050565b6000602082019050612c6760008301846128f3565b92915050565b600060a082019050612c8260008301886128f3565b612c8f60208301876128f3565b8181036040830152612ca18186612902565b90508181036060830152612cb58185612902565b90508181036080830152612cc9818461296f565b90509695505050505050565b600060a082019050612cea60008301886128f3565b612cf760208301876128f3565b612d046040830186612c43565b612d116060830185612c43565b8181036080830152612d23818461296f565b90509695505050505050565b60006020820190508181036000830152612d498184612902565b905092915050565b60006040820190508181036000830152612d6b8185612902565b90508181036020830152612d7f8184612902565b90509392505050565b6000602082019050612d9d6000830184612960565b92915050565b60006020820190508181036000830152612dbd81846129a8565b905092915050565b60006020820190508181036000830152612dde816129e1565b9050919050565b60006020820190508181036000830152612dfe81612a04565b9050919050565b60006020820190508181036000830152612e1e81612a27565b9050919050565b60006020820190508181036000830152612e3e81612a4a565b9050919050565b60006020820190508181036000830152612e5e81612a6d565b9050919050565b60006020820190508181036000830152612e7e81612a90565b9050919050565b60006020820190508181036000830152612e9e81612ab3565b9050919050565b60006020820190508181036000830152612ebe81612ad6565b9050919050565b60006020820190508181036000830152612ede81612af9565b9050919050565b60006020820190508181036000830152612efe81612b1c565b9050919050565b60006020820190508181036000830152612f1e81612b3f565b9050919050565b60006020820190508181036000830152612f3e81612b62565b9050919050565b60006020820190508181036000830152612f5e81612b85565b9050919050565b60006020820190508181036000830152612f7e81612ba8565b9050919050565b60006020820190508181036000830152612f9e81612bcb565b9050919050565b60006020820190508181036000830152612fbe81612bee565b9050919050565b60006020820190508181036000830152612fde81612c11565b9050919050565b6000602082019050612ffa6000830184612c43565b92915050565b60006040820190506130156000830185612c43565b6130226020830184612c43565b9392505050565b6000613033613044565b905061303f82826132b7565b919050565b6000604051905090565b600067ffffffffffffffff821115613069576130686133be565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613095576130946133be565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130c1576130c06133be565b5b6130ca82613428565b9050602081019050919050565b600067ffffffffffffffff8211156130f2576130f16133be565b5b6130fb82613428565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061318482613239565b915061318f83613239565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131c4576131c3613331565b5b828201905092915050565b60006131da82613219565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613270578082015181840152602081019050613255565b8381111561327f576000848401525b50505050565b6000600282049050600182168061329d57607f821691505b602082108114156132b1576132b0613360565b5b50919050565b6132c082613428565b810181811067ffffffffffffffff821117156132df576132de6133be565b5b80604052505050565b60006132f382613239565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561332657613325613331565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561340c5760046000803e613409600051613439565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f497373756520697320616c7265616479206d696e746564000000000000000000600082015250565b600060443d1015613923576139a6565b61392b613044565b60043d036004823e80513d602482011167ffffffffffffffff821117156139535750506139a6565b808201805167ffffffffffffffff81111561397157505050506139a6565b80602083010160043d03850181111561398e5750505050506139a6565b61399d826020018501866132b7565b82955050505050505b90565b6139b2816131cf565b81146139bd57600080fd5b50565b6139c9816131e1565b81146139d457600080fd5b50565b6139e0816131ed565b81146139eb57600080fd5b50565b6139f781613239565b8114613a0257600080fd5b5056fea2646970667358221220e6f75f47085749705c68bb967fb69cf505958768cfaf5bb4153f3cdae50417ee64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100ff5760003560e01c80636b20c45411610097578063e985e9c511610066578063e985e9c514610282578063f242432a146102b2578063f2fde38b146102ce578063f5298aca146102ea576100ff565b80636b20c45414610222578063715018a61461023e5780638da5cb5b14610248578063a22cb46514610266576100ff565b8063162094c4116100d3578063162094c4146101b05780632eb2c2d6146101cc5780633ccfd60b146101e85780634e1273f4146101f2576100ff565b8062fdd58e1461010457806301ffc9a7146101345780630e89341c14610164578063156e29f614610194575b600080fd5b61011e600480360381019061011991906126ed565b610306565b60405161012b9190612fe5565b60405180910390f35b61014e600480360381019061014991906127f8565b6103cf565b60405161015b9190612d88565b60405180910390f35b61017e60048036038101906101799190612852565b6104b1565b60405161018b9190612da3565b60405180910390f35b6101ae60048036038101906101a9919061272d565b610556565b005b6101ca60048036038101906101c5919061287f565b610685565b005b6101e660048036038101906101e191906124bc565b61072d565b005b6101f06107ce565b005b61020c60048036038101906102079190612780565b6108dd565b6040516102199190612d2f565b60405180910390f35b61023c60048036038101906102379190612622565b6109f6565b005b610246610a93565b005b610250610b1b565b60405161025d9190612c52565b60405180910390f35b610280600480360381019061027b91906126ad565b610b45565b005b61029c6004803603810190610297919061247c565b610b5b565b6040516102a99190612d88565b60405180910390f35b6102cc60048036038101906102c7919061258b565b610bef565b005b6102e860048036038101906102e3919061244f565b610c90565b005b61030460048036038101906102ff919061272d565b610d88565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610377576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161036e90612e05565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061049a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806104aa57506104a982610e25565b5b9050919050565b60606004600083815260200190815260200160002080546104d190613285565b80601f01602080910402602001604051908101604052809291908181526020018280546104fd90613285565b801561054a5780601f1061051f5761010080835404028352916020019161054a565b820191906000526020600020905b81548152906001019060200180831161052d57829003601f168201915b50505050509050919050565b61055e610e8f565b73ffffffffffffffffffffffffffffffffffffffff1661057c610b1b565b73ffffffffffffffffffffffffffffffffffffffff16146105d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105c990612f25565b60405180910390fd5b600015156005600084815260200190815260200160002060009054906101000a900460ff16151514610639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063090612fc5565b60405180910390fd5b61065483838360405180602001604052806000815250610e97565b60016005600084815260200190815260200160002060006101000a81548160ff021916908315150217905550505050565b61068d610e8f565b73ffffffffffffffffffffffffffffffffffffffff166106ab610b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610701576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106f890612f25565b60405180910390fd5b80600460008481526020019081526020016000209080519060200190610728929190612127565b505050565b610735610e8f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061077b575061077a85610775610e8f565b610b5b565b5b6107ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b190612ea5565b60405180910390fd5b6107c7858585858561102d565b5050505050565b6107d6610e8f565b73ffffffffffffffffffffffffffffffffffffffff166107f4610b1b565b73ffffffffffffffffffffffffffffffffffffffff161461084a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161084190612f25565b60405180910390fd5b6000471161088d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088490612f05565b60405180910390fd5b610895610b1b565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156108da573d6000803e3d6000fd5b50565b60608151835114610923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091a90612f65565b60405180910390fd5b6000835167ffffffffffffffff8111156109405761093f6133be565b5b60405190808252806020026020018201604052801561096e5781602001602082028036833780820191505090505b50905060005b84518110156109eb576109bb8582815181106109935761099261338f565b5b60200260200101518583815181106109ae576109ad61338f565b5b6020026020010151610306565b8282815181106109ce576109cd61338f565b5b602002602001018181525050806109e4906132e8565b9050610974565b508091505092915050565b6109fe610e8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610a445750610a4383610a3e610e8f565b610b5b565b5b610a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7a90612e65565b60405180910390fd5b610a8e838383611341565b505050565b610a9b610e8f565b73ffffffffffffffffffffffffffffffffffffffff16610ab9610b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b0690612f25565b60405180910390fd5b610b1960006115f2565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b57610b50610e8f565b83836116b8565b5050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610bf7610e8f565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610c3d5750610c3c85610c37610e8f565b610b5b565b5b610c7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7390612e65565b60405180910390fd5b610c898585858585611825565b5050505050565b610c98610e8f565b73ffffffffffffffffffffffffffffffffffffffff16610cb6610b1b565b73ffffffffffffffffffffffffffffffffffffffff1614610d0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0390612f25565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7390612e25565b60405180910390fd5b610d85816115f2565b50565b610d90610e8f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610dd65750610dd583610dd0610e8f565b610b5b565b5b610e15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0c90612e65565b60405180910390fd5b610e20838383611aa7565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610f07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610efe90612fa5565b60405180910390fd5b6000610f11610e8f565b9050610f3281600087610f2388611cc4565b610f2c88611cc4565b87611d3e565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f919190613179565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62878760405161100f929190613000565b60405180910390a461102681600087878787611d46565b5050505050565b8151835114611071576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106890612f85565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d890612e85565b60405180910390fd5b60006110eb610e8f565b90506110fb818787878787611d3e565b60005b84518110156112ac57600085828151811061111c5761111b61338f565b5b60200260200101519050600085838151811061113b5761113a61338f565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156111dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d390612ee5565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112919190613179565b92505081905550505050806112a5906132e8565b90506110fe565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611323929190612d51565b60405180910390a4611339818787878787611f2d565b505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a890612ec5565b60405180910390fd5b80518251146113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec90612f85565b60405180910390fd5b60006113ff610e8f565b905061141f81856000868660405180602001604052806000815250611d3e565b60005b835181101561156c5760008482815181106114405761143f61338f565b5b60200260200101519050600084838151811061145f5761145e61338f565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790612e45565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080611564906132e8565b915050611422565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb86866040516115e4929190612d51565b60405180910390a450505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171e90612f45565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516118189190612d88565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90612e85565b60405180910390fd5b600061189f610e8f565b90506118bf8187876118b088611cc4565b6118b988611cc4565b87611d3e565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194d90612ee5565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a0b9190613179565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611a88929190613000565b60405180910390a4611a9e828888888888611d46565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0e90612ec5565b60405180910390fd5b6000611b21610e8f565b9050611b5181856000611b3387611cc4565b611b3c87611cc4565b60405180602001604052806000815250611d3e565b600080600085815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdf90612e45565b60405180910390fd5b82810360008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628787604051611cb5929190613000565b60405180910390a45050505050565b60606000600167ffffffffffffffff811115611ce357611ce26133be565b5b604051908082528060200260200182016040528015611d115781602001602082028036833780820191505090505b5090508281600081518110611d2957611d2861338f565b5b60200260200101818152505080915050919050565b505050505050565b611d658473ffffffffffffffffffffffffffffffffffffffff16612114565b15611f25578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611dab959493929190612cd5565b602060405180830381600087803b158015611dc557600080fd5b505af1925050508015611df657506040513d601f19601f82011682018060405250810190611df39190612825565b60015b611e9c57611e026133ed565b806308c379a01415611e5f5750611e17613913565b80611e225750611e61565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e569190612da3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9390612dc5565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1a90612de5565b60405180910390fd5b505b505050505050565b611f4c8473ffffffffffffffffffffffffffffffffffffffff16612114565b1561210c578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611f92959493929190612c6d565b602060405180830381600087803b158015611fac57600080fd5b505af1925050508015611fdd57506040513d601f19601f82011682018060405250810190611fda9190612825565b60015b61208357611fe96133ed565b806308c379a014156120465750611ffe613913565b806120095750612048565b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203d9190612da3565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207a90612dc5565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190612de5565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461213390613285565b90600052602060002090601f016020900481019282612155576000855561219c565b82601f1061216e57805160ff191683800117855561219c565b8280016001018555821561219c579182015b8281111561219b578251825591602001919060010190612180565b5b5090506121a991906121ad565b5090565b5b808211156121c65760008160009055506001016121ae565b5090565b60006121dd6121d88461304e565b613029565b90508083825260208201905082856020860282011115612200576121ff613414565b5b60005b858110156122305781612216888261232e565b845260208401935060208301925050600181019050612203565b5050509392505050565b600061224d6122488461307a565b613029565b905080838252602082019050828560208602820111156122705761226f613414565b5b60005b858110156122a05781612286888261243a565b845260208401935060208301925050600181019050612273565b5050509392505050565b60006122bd6122b8846130a6565b613029565b9050828152602081018484840111156122d9576122d8613419565b5b6122e4848285613243565b509392505050565b60006122ff6122fa846130d7565b613029565b90508281526020810184848401111561231b5761231a613419565b5b612326848285613243565b509392505050565b60008135905061233d816139a9565b92915050565b600082601f8301126123585761235761340f565b5b81356123688482602086016121ca565b91505092915050565b600082601f8301126123865761238561340f565b5b813561239684826020860161223a565b91505092915050565b6000813590506123ae816139c0565b92915050565b6000813590506123c3816139d7565b92915050565b6000815190506123d8816139d7565b92915050565b600082601f8301126123f3576123f261340f565b5b81356124038482602086016122aa565b91505092915050565b600082601f8301126124215761242061340f565b5b81356124318482602086016122ec565b91505092915050565b600081359050612449816139ee565b92915050565b60006020828403121561246557612464613423565b5b60006124738482850161232e565b91505092915050565b6000806040838503121561249357612492613423565b5b60006124a18582860161232e565b92505060206124b28582860161232e565b9150509250929050565b600080600080600060a086880312156124d8576124d7613423565b5b60006124e68882890161232e565b95505060206124f78882890161232e565b945050604086013567ffffffffffffffff8111156125185761251761341e565b5b61252488828901612371565b935050606086013567ffffffffffffffff8111156125455761254461341e565b5b61255188828901612371565b925050608086013567ffffffffffffffff8111156125725761257161341e565b5b61257e888289016123de565b9150509295509295909350565b600080600080600060a086880312156125a7576125a6613423565b5b60006125b58882890161232e565b95505060206125c68882890161232e565b94505060406125d78882890161243a565b93505060606125e88882890161243a565b925050608086013567ffffffffffffffff8111156126095761260861341e565b5b612615888289016123de565b9150509295509295909350565b60008060006060848603121561263b5761263a613423565b5b60006126498682870161232e565b935050602084013567ffffffffffffffff81111561266a5761266961341e565b5b61267686828701612371565b925050604084013567ffffffffffffffff8111156126975761269661341e565b5b6126a386828701612371565b9150509250925092565b600080604083850312156126c4576126c3613423565b5b60006126d28582860161232e565b92505060206126e38582860161239f565b9150509250929050565b6000806040838503121561270457612703613423565b5b60006127128582860161232e565b92505060206127238582860161243a565b9150509250929050565b60008060006060848603121561274657612745613423565b5b60006127548682870161232e565b93505060206127658682870161243a565b92505060406127768682870161243a565b9150509250925092565b6000806040838503121561279757612796613423565b5b600083013567ffffffffffffffff8111156127b5576127b461341e565b5b6127c185828601612343565b925050602083013567ffffffffffffffff8111156127e2576127e161341e565b5b6127ee85828601612371565b9150509250929050565b60006020828403121561280e5761280d613423565b5b600061281c848285016123b4565b91505092915050565b60006020828403121561283b5761283a613423565b5b6000612849848285016123c9565b91505092915050565b60006020828403121561286857612867613423565b5b60006128768482850161243a565b91505092915050565b6000806040838503121561289657612895613423565b5b60006128a48582860161243a565b925050602083013567ffffffffffffffff8111156128c5576128c461341e565b5b6128d18582860161240c565b9150509250929050565b60006128e78383612c34565b60208301905092915050565b6128fc816131cf565b82525050565b600061290d82613118565b6129178185613146565b935061292283613108565b8060005b8381101561295357815161293a88826128db565b975061294583613139565b925050600181019050612926565b5085935050505092915050565b612969816131e1565b82525050565b600061297a82613123565b6129848185613157565b9350612994818560208601613252565b61299d81613428565b840191505092915050565b60006129b38261312e565b6129bd8185613168565b93506129cd818560208601613252565b6129d681613428565b840191505092915050565b60006129ee603483613168565b91506129f982613446565b604082019050919050565b6000612a11602883613168565b9150612a1c82613495565b604082019050919050565b6000612a34602b83613168565b9150612a3f826134e4565b604082019050919050565b6000612a57602683613168565b9150612a6282613533565b604082019050919050565b6000612a7a602483613168565b9150612a8582613582565b604082019050919050565b6000612a9d602983613168565b9150612aa8826135d1565b604082019050919050565b6000612ac0602583613168565b9150612acb82613620565b604082019050919050565b6000612ae3603283613168565b9150612aee8261366f565b604082019050919050565b6000612b06602383613168565b9150612b11826136be565b604082019050919050565b6000612b29602a83613168565b9150612b348261370d565b604082019050919050565b6000612b4c600c83613168565b9150612b578261375c565b602082019050919050565b6000612b6f602083613168565b9150612b7a82613785565b602082019050919050565b6000612b92602983613168565b9150612b9d826137ae565b604082019050919050565b6000612bb5602983613168565b9150612bc0826137fd565b604082019050919050565b6000612bd8602883613168565b9150612be38261384c565b604082019050919050565b6000612bfb602183613168565b9150612c068261389b565b604082019050919050565b6000612c1e601783613168565b9150612c29826138ea565b602082019050919050565b612c3d81613239565b82525050565b612c4c81613239565b82525050565b6000602082019050612c6760008301846128f3565b92915050565b600060a082019050612c8260008301886128f3565b612c8f60208301876128f3565b8181036040830152612ca18186612902565b90508181036060830152612cb58185612902565b90508181036080830152612cc9818461296f565b90509695505050505050565b600060a082019050612cea60008301886128f3565b612cf760208301876128f3565b612d046040830186612c43565b612d116060830185612c43565b8181036080830152612d23818461296f565b90509695505050505050565b60006020820190508181036000830152612d498184612902565b905092915050565b60006040820190508181036000830152612d6b8185612902565b90508181036020830152612d7f8184612902565b90509392505050565b6000602082019050612d9d6000830184612960565b92915050565b60006020820190508181036000830152612dbd81846129a8565b905092915050565b60006020820190508181036000830152612dde816129e1565b9050919050565b60006020820190508181036000830152612dfe81612a04565b9050919050565b60006020820190508181036000830152612e1e81612a27565b9050919050565b60006020820190508181036000830152612e3e81612a4a565b9050919050565b60006020820190508181036000830152612e5e81612a6d565b9050919050565b60006020820190508181036000830152612e7e81612a90565b9050919050565b60006020820190508181036000830152612e9e81612ab3565b9050919050565b60006020820190508181036000830152612ebe81612ad6565b9050919050565b60006020820190508181036000830152612ede81612af9565b9050919050565b60006020820190508181036000830152612efe81612b1c565b9050919050565b60006020820190508181036000830152612f1e81612b3f565b9050919050565b60006020820190508181036000830152612f3e81612b62565b9050919050565b60006020820190508181036000830152612f5e81612b85565b9050919050565b60006020820190508181036000830152612f7e81612ba8565b9050919050565b60006020820190508181036000830152612f9e81612bcb565b9050919050565b60006020820190508181036000830152612fbe81612bee565b9050919050565b60006020820190508181036000830152612fde81612c11565b9050919050565b6000602082019050612ffa6000830184612c43565b92915050565b60006040820190506130156000830185612c43565b6130226020830184612c43565b9392505050565b6000613033613044565b905061303f82826132b7565b919050565b6000604051905090565b600067ffffffffffffffff821115613069576130686133be565b5b602082029050602081019050919050565b600067ffffffffffffffff821115613095576130946133be565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130c1576130c06133be565b5b6130ca82613428565b9050602081019050919050565b600067ffffffffffffffff8211156130f2576130f16133be565b5b6130fb82613428565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061318482613239565b915061318f83613239565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156131c4576131c3613331565b5b828201905092915050565b60006131da82613219565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613270578082015181840152602081019050613255565b8381111561327f576000848401525b50505050565b6000600282049050600182168061329d57607f821691505b602082108114156132b1576132b0613360565b5b50919050565b6132c082613428565b810181811067ffffffffffffffff821117156132df576132de6133be565b5b80604052505050565b60006132f382613239565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561332657613325613331565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d111561340c5760046000803e613409600051613439565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f497373756520697320616c7265616479206d696e746564000000000000000000600082015250565b600060443d1015613923576139a6565b61392b613044565b60043d036004823e80513d602482011167ffffffffffffffff821117156139535750506139a6565b808201805167ffffffffffffffff81111561397157505050506139a6565b80602083010160043d03850181111561398e5750505050506139a6565b61399d826020018501866132b7565b82955050505050505b90565b6139b2816131cf565b81146139bd57600080fd5b50565b6139c9816131e1565b81146139d457600080fd5b50565b6139e0816131ed565b81146139eb57600080fd5b50565b6139f781613239565b8114613a0257600080fd5b5056fea2646970667358221220e6f75f47085749705c68bb967fb69cf505958768cfaf5bb4153f3cdae50417ee64736f6c63430008070033

Deployed Bytecode Sourcemap

37665:1007:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22978:231;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22001:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37927:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38255:241;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38103:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24917:442;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38504:165;;;:::i;:::-;;23375:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37241:353;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2606:103;;;:::i;:::-;;1955:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23972:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24199:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24439:401;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2864:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36912:321;;;;;;;;;;;;;:::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;37927:116::-;37987:13;38020:5;:14;38026:7;38020:14;;;;;;;;;;;38013:22;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37927:116;;;:::o;38255:241::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38375:5:::1;38355:25;;:7;:16;38363:7;38355:16;;;;;;;;;;;;;;;;;;;;;:25;;;38347:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38419:35;38425:7;38434;38443:6;38419:35;;;;;;;;;;;::::0;:5:::1;:35::i;:::-;38484:4;38465:7;:16;38473:7;38465:16;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;38255:241:::0;;;:::o;38103:122::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38211:6:::1;38194:5;:14;38200:7;38194:14;;;;;;;;;;;:23;;;;;;;;;;;;:::i;:::-;;38103:122:::0;;:::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;38504:165::-;2186:12;:10;:12::i;:::-;2175:23;;:7;:5;:7::i;:::-;:23;;;2167:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38584:1:::1;38560:21;:25;38552:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38621:7;:5;:7::i;:::-;38613:25;;:48;38639:21;38613:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38504:165::o:0;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;37241:353::-;37417:12;:10;:12::i;:::-;37406:23;;:7;:23;;;:66;;;;37433:39;37450:7;37459:12;:10;:12::i;:::-;37433:16;:39::i;:::-;37406:66;37384:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;37554:32;37565:7;37574:3;37579:6;37554:10;:32::i;:::-;37241:353;;;:::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;1955:87::-;2001:7;2028:6;;;;;;;;;;;2021:13;;1955:87;:::o;23972:155::-;24067:52;24086:12;:10;:12::i;:::-;24100:8;24110;24067:18;:52::i;:::-;23972:155;;:::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;36912:321::-;37063:12;:10;:12::i;:::-;37052:23;;:7;:23;;;:66;;;;37079:39;37096:7;37105:12;:10;:12::i;:::-;37079:16;:39::i;:::-;37052:66;37030:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;37200:25;37206:7;37215:2;37219:5;37200;:25::i;:::-;36912:321;;;:::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;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;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;32154:891::-;32322:1;32306:18;;:4;:18;;;;32298:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;32397:7;:14;32383:3;:10;:28;32375:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32469:16;32488:12;:10;:12::i;:::-;32469:31;;32513:66;32534:8;32544:4;32558:1;32562:3;32567:7;32513:66;;;;;;;;;;;;:20;:66::i;:::-;32597:9;32592:373;32616:3;:10;32612:1;:14;32592:373;;;32648:10;32661:3;32665:1;32661:6;;;;;;;;:::i;:::-;;;;;;;;32648:19;;32682:14;32699:7;32707:1;32699:10;;;;;;;;:::i;:::-;;;;;;;;32682:27;;32726:19;32748:9;:13;32758:2;32748:13;;;;;;;;;;;:19;32762:4;32748:19;;;;;;;;;;;;;;;;32726:41;;32805:6;32790:11;:21;;32782:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32932:6;32918:11;:20;32896:9;:13;32906:2;32896:13;;;;;;;;;;;:19;32910:4;32896:19;;;;;;;;;;;;;;;:42;;;;32633:332;;;32628:3;;;;;:::i;:::-;;;;32592:373;;;;33020:1;32982:55;;33006:4;32982:55;;32996:8;32982:55;;;33024:3;33029:7;32982:55;;;;;;;:::i;:::-;;;;;;;;32287:758;32154:891;;;:::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;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;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;31303:648::-;31446:1;31430:18;;:4;:18;;;;31422:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31501:16;31520:12;:10;:12::i;:::-;31501:31;;31545:102;31566:8;31576:4;31590:1;31594:21;31612:2;31594:17;:21::i;:::-;31617:25;31635:6;31617:17;:25::i;:::-;31545:102;;;;;;;;;;;;:20;:102::i;:::-;31660:19;31682:9;:13;31692:2;31682:13;;;;;;;;;;;:19;31696:4;31682:19;;;;;;;;;;;;;;;;31660:41;;31735:6;31720:11;:21;;31712:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;31854:6;31840:11;:20;31818:9;:13;31828:2;31818:13;;;;;;;;;;;:19;31832:4;31818:19;;;;;;;;;;;;;;;:42;;;;31928:1;31889:54;;31914:4;31889:54;;31904:8;31889:54;;;31932:2;31936:6;31889:54;;;;;;;:::i;:::-;;;;;;;;31411:540;;31303:648;;;:::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;34474:221::-;;;;;;;:::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;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;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:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:329::-;4612:6;4661:2;4649:9;4640:7;4636:23;4632:32;4629:119;;;4667:79;;:::i;:::-;4629:119;4787:1;4812:53;4857:7;4848:6;4837:9;4833:22;4812:53;:::i;:::-;4802:63;;4758:117;4553:329;;;;:::o;4888:474::-;4956:6;4964;5013:2;5001:9;4992:7;4988:23;4984:32;4981:119;;;5019:79;;:::i;:::-;4981:119;5139:1;5164:53;5209:7;5200:6;5189:9;5185:22;5164:53;:::i;:::-;5154:63;;5110:117;5266:2;5292:53;5337:7;5328:6;5317:9;5313:22;5292:53;:::i;:::-;5282:63;;5237:118;4888:474;;;;;:::o;5368:1509::-;5522:6;5530;5538;5546;5554;5603:3;5591:9;5582:7;5578:23;5574:33;5571:120;;;5610:79;;:::i;:::-;5571:120;5730:1;5755:53;5800:7;5791:6;5780:9;5776:22;5755:53;:::i;:::-;5745:63;;5701:117;5857:2;5883:53;5928:7;5919:6;5908:9;5904:22;5883:53;:::i;:::-;5873:63;;5828:118;6013:2;6002:9;5998:18;5985:32;6044:18;6036:6;6033:30;6030:117;;;6066:79;;:::i;:::-;6030:117;6171:78;6241:7;6232:6;6221:9;6217:22;6171:78;:::i;:::-;6161:88;;5956:303;6326:2;6315:9;6311:18;6298:32;6357:18;6349:6;6346:30;6343:117;;;6379:79;;:::i;:::-;6343:117;6484:78;6554:7;6545:6;6534:9;6530:22;6484:78;:::i;:::-;6474:88;;6269:303;6639:3;6628:9;6624:19;6611:33;6671:18;6663:6;6660:30;6657:117;;;6693:79;;:::i;:::-;6657:117;6798:62;6852:7;6843:6;6832:9;6828:22;6798:62;:::i;:::-;6788:72;;6582:288;5368:1509;;;;;;;;:::o;6883:1089::-;6987:6;6995;7003;7011;7019;7068:3;7056:9;7047:7;7043:23;7039:33;7036:120;;;7075:79;;:::i;:::-;7036:120;7195:1;7220:53;7265:7;7256:6;7245:9;7241:22;7220:53;:::i;:::-;7210:63;;7166:117;7322:2;7348:53;7393:7;7384:6;7373:9;7369:22;7348:53;:::i;:::-;7338:63;;7293:118;7450:2;7476:53;7521:7;7512:6;7501:9;7497:22;7476:53;:::i;:::-;7466:63;;7421:118;7578:2;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7549:118;7734:3;7723:9;7719:19;7706:33;7766:18;7758:6;7755:30;7752:117;;;7788:79;;:::i;:::-;7752:117;7893:62;7947:7;7938:6;7927:9;7923:22;7893:62;:::i;:::-;7883:72;;7677:288;6883:1089;;;;;;;;:::o;7978:1039::-;8105:6;8113;8121;8170:2;8158:9;8149:7;8145:23;8141:32;8138:119;;;8176:79;;:::i;:::-;8138:119;8296:1;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8267:117;8451:2;8440:9;8436:18;8423:32;8482:18;8474:6;8471:30;8468:117;;;8504:79;;:::i;:::-;8468:117;8609:78;8679:7;8670:6;8659:9;8655:22;8609:78;:::i;:::-;8599:88;;8394:303;8764:2;8753:9;8749:18;8736:32;8795:18;8787:6;8784:30;8781:117;;;8817:79;;:::i;:::-;8781:117;8922:78;8992:7;8983:6;8972:9;8968:22;8922:78;:::i;:::-;8912:88;;8707:303;7978:1039;;;;;:::o;9023:468::-;9088:6;9096;9145:2;9133:9;9124:7;9120:23;9116:32;9113:119;;;9151:79;;:::i;:::-;9113:119;9271:1;9296:53;9341:7;9332:6;9321:9;9317:22;9296:53;:::i;:::-;9286:63;;9242:117;9398:2;9424:50;9466:7;9457:6;9446:9;9442:22;9424:50;:::i;:::-;9414:60;;9369:115;9023:468;;;;;:::o;9497:474::-;9565:6;9573;9622:2;9610:9;9601:7;9597:23;9593:32;9590:119;;;9628:79;;:::i;:::-;9590:119;9748:1;9773:53;9818:7;9809:6;9798:9;9794:22;9773:53;:::i;:::-;9763:63;;9719:117;9875:2;9901:53;9946:7;9937:6;9926:9;9922:22;9901:53;:::i;:::-;9891:63;;9846:118;9497:474;;;;;:::o;9977:619::-;10054:6;10062;10070;10119:2;10107:9;10098:7;10094:23;10090:32;10087:119;;;10125:79;;:::i;:::-;10087:119;10245:1;10270:53;10315:7;10306:6;10295:9;10291:22;10270:53;:::i;:::-;10260:63;;10216:117;10372:2;10398:53;10443:7;10434:6;10423:9;10419:22;10398:53;:::i;:::-;10388:63;;10343:118;10500:2;10526:53;10571:7;10562:6;10551:9;10547:22;10526:53;:::i;:::-;10516:63;;10471:118;9977:619;;;;;:::o;10602:894::-;10720:6;10728;10777:2;10765:9;10756:7;10752:23;10748:32;10745:119;;;10783:79;;:::i;:::-;10745:119;10931:1;10920:9;10916:17;10903:31;10961:18;10953:6;10950:30;10947:117;;;10983:79;;:::i;:::-;10947:117;11088:78;11158:7;11149:6;11138:9;11134:22;11088:78;:::i;:::-;11078:88;;10874:302;11243:2;11232:9;11228:18;11215:32;11274:18;11266:6;11263:30;11260:117;;;11296:79;;:::i;:::-;11260:117;11401:78;11471:7;11462:6;11451:9;11447:22;11401:78;:::i;:::-;11391:88;;11186:303;10602:894;;;;;:::o;11502:327::-;11560:6;11609:2;11597:9;11588:7;11584:23;11580:32;11577:119;;;11615:79;;:::i;:::-;11577:119;11735:1;11760:52;11804:7;11795:6;11784:9;11780:22;11760:52;:::i;:::-;11750:62;;11706:116;11502:327;;;;:::o;11835:349::-;11904:6;11953:2;11941:9;11932:7;11928:23;11924:32;11921:119;;;11959:79;;:::i;:::-;11921:119;12079:1;12104:63;12159:7;12150:6;12139:9;12135:22;12104:63;:::i;:::-;12094:73;;12050:127;11835:349;;;;:::o;12190:329::-;12249:6;12298:2;12286:9;12277:7;12273:23;12269:32;12266:119;;;12304:79;;:::i;:::-;12266:119;12424:1;12449:53;12494:7;12485:6;12474:9;12470:22;12449:53;:::i;:::-;12439:63;;12395:117;12190:329;;;;:::o;12525:654::-;12603:6;12611;12660:2;12648:9;12639:7;12635:23;12631:32;12628:119;;;12666:79;;:::i;:::-;12628:119;12786:1;12811:53;12856:7;12847:6;12836:9;12832:22;12811:53;:::i;:::-;12801:63;;12757:117;12941:2;12930:9;12926:18;12913:32;12972:18;12964:6;12961:30;12958:117;;;12994:79;;:::i;:::-;12958:117;13099:63;13154:7;13145:6;13134:9;13130:22;13099:63;:::i;:::-;13089:73;;12884:288;12525:654;;;;;:::o;13185:179::-;13254:10;13275:46;13317:3;13309:6;13275:46;:::i;:::-;13353:4;13348:3;13344:14;13330:28;;13185:179;;;;:::o;13370:118::-;13457:24;13475:5;13457:24;:::i;:::-;13452:3;13445:37;13370:118;;:::o;13524:732::-;13643:3;13672:54;13720:5;13672:54;:::i;:::-;13742:86;13821:6;13816:3;13742:86;:::i;:::-;13735:93;;13852:56;13902:5;13852:56;:::i;:::-;13931:7;13962:1;13947:284;13972:6;13969:1;13966:13;13947:284;;;14048:6;14042:13;14075:63;14134:3;14119:13;14075:63;:::i;:::-;14068:70;;14161:60;14214:6;14161:60;:::i;:::-;14151:70;;14007:224;13994:1;13991;13987:9;13982:14;;13947:284;;;13951:14;14247:3;14240:10;;13648:608;;;13524:732;;;;:::o;14262:109::-;14343:21;14358:5;14343:21;:::i;:::-;14338:3;14331:34;14262:109;;:::o;14377:360::-;14463:3;14491:38;14523:5;14491:38;:::i;:::-;14545:70;14608:6;14603:3;14545:70;:::i;:::-;14538:77;;14624:52;14669:6;14664:3;14657:4;14650:5;14646:16;14624:52;:::i;:::-;14701:29;14723:6;14701:29;:::i;:::-;14696:3;14692:39;14685:46;;14467:270;14377:360;;;;:::o;14743:364::-;14831:3;14859:39;14892:5;14859:39;:::i;:::-;14914:71;14978:6;14973:3;14914:71;:::i;:::-;14907:78;;14994:52;15039:6;15034:3;15027:4;15020:5;15016:16;14994:52;:::i;:::-;15071:29;15093:6;15071:29;:::i;:::-;15066:3;15062:39;15055:46;;14835:272;14743:364;;;;:::o;15113:366::-;15255:3;15276:67;15340:2;15335:3;15276:67;:::i;:::-;15269:74;;15352:93;15441:3;15352:93;:::i;:::-;15470:2;15465:3;15461:12;15454:19;;15113:366;;;:::o;15485:::-;15627:3;15648:67;15712:2;15707:3;15648:67;:::i;:::-;15641:74;;15724:93;15813:3;15724:93;:::i;:::-;15842:2;15837:3;15833:12;15826:19;;15485:366;;;:::o;15857:::-;15999:3;16020:67;16084:2;16079:3;16020:67;:::i;:::-;16013:74;;16096:93;16185:3;16096:93;:::i;:::-;16214:2;16209:3;16205:12;16198:19;;15857:366;;;:::o;16229:::-;16371:3;16392:67;16456:2;16451:3;16392:67;:::i;:::-;16385:74;;16468:93;16557:3;16468:93;:::i;:::-;16586:2;16581:3;16577:12;16570:19;;16229:366;;;:::o;16601:::-;16743:3;16764:67;16828:2;16823:3;16764:67;:::i;:::-;16757:74;;16840:93;16929:3;16840:93;:::i;:::-;16958:2;16953:3;16949:12;16942:19;;16601:366;;;:::o;16973:::-;17115:3;17136:67;17200:2;17195:3;17136:67;:::i;:::-;17129:74;;17212:93;17301:3;17212:93;:::i;:::-;17330:2;17325:3;17321:12;17314:19;;16973:366;;;:::o;17345:::-;17487:3;17508:67;17572:2;17567:3;17508:67;:::i;:::-;17501:74;;17584:93;17673:3;17584:93;:::i;:::-;17702:2;17697:3;17693:12;17686:19;;17345:366;;;:::o;17717:::-;17859:3;17880:67;17944:2;17939:3;17880:67;:::i;:::-;17873:74;;17956:93;18045:3;17956:93;:::i;:::-;18074:2;18069:3;18065:12;18058:19;;17717:366;;;:::o;18089:::-;18231:3;18252:67;18316:2;18311:3;18252:67;:::i;:::-;18245:74;;18328:93;18417:3;18328:93;:::i;:::-;18446:2;18441:3;18437:12;18430:19;;18089:366;;;:::o;18461:::-;18603:3;18624:67;18688:2;18683:3;18624:67;:::i;:::-;18617:74;;18700:93;18789:3;18700:93;:::i;:::-;18818:2;18813:3;18809:12;18802:19;;18461:366;;;:::o;18833:::-;18975:3;18996:67;19060:2;19055:3;18996:67;:::i;:::-;18989:74;;19072:93;19161:3;19072:93;:::i;:::-;19190:2;19185:3;19181:12;19174:19;;18833:366;;;:::o;19205:::-;19347:3;19368:67;19432:2;19427:3;19368:67;:::i;:::-;19361:74;;19444:93;19533:3;19444:93;:::i;:::-;19562:2;19557:3;19553:12;19546:19;;19205:366;;;:::o;19577:::-;19719:3;19740:67;19804:2;19799:3;19740:67;:::i;:::-;19733:74;;19816:93;19905:3;19816:93;:::i;:::-;19934:2;19929:3;19925:12;19918:19;;19577:366;;;:::o;19949:::-;20091:3;20112:67;20176:2;20171:3;20112:67;:::i;:::-;20105:74;;20188:93;20277:3;20188:93;:::i;:::-;20306:2;20301:3;20297:12;20290:19;;19949:366;;;:::o;20321:::-;20463:3;20484:67;20548:2;20543:3;20484:67;:::i;:::-;20477:74;;20560:93;20649:3;20560:93;:::i;:::-;20678:2;20673:3;20669:12;20662:19;;20321:366;;;:::o;20693:::-;20835:3;20856:67;20920:2;20915:3;20856:67;:::i;:::-;20849:74;;20932:93;21021:3;20932:93;:::i;:::-;21050:2;21045:3;21041:12;21034:19;;20693:366;;;:::o;21065:::-;21207:3;21228:67;21292:2;21287:3;21228:67;:::i;:::-;21221:74;;21304:93;21393:3;21304:93;:::i;:::-;21422:2;21417:3;21413:12;21406:19;;21065:366;;;:::o;21437:108::-;21514:24;21532:5;21514:24;:::i;:::-;21509:3;21502:37;21437:108;;:::o;21551:118::-;21638:24;21656:5;21638:24;:::i;:::-;21633:3;21626:37;21551:118;;:::o;21675:222::-;21768:4;21806:2;21795:9;21791:18;21783:26;;21819:71;21887:1;21876:9;21872:17;21863:6;21819:71;:::i;:::-;21675:222;;;;:::o;21903:1053::-;22226:4;22264:3;22253:9;22249:19;22241:27;;22278:71;22346:1;22335:9;22331:17;22322:6;22278:71;:::i;:::-;22359:72;22427:2;22416:9;22412:18;22403:6;22359:72;:::i;:::-;22478:9;22472:4;22468:20;22463:2;22452:9;22448:18;22441:48;22506:108;22609:4;22600:6;22506:108;:::i;:::-;22498:116;;22661:9;22655:4;22651:20;22646:2;22635:9;22631:18;22624:48;22689:108;22792:4;22783:6;22689:108;:::i;:::-;22681:116;;22845:9;22839:4;22835:20;22829:3;22818:9;22814:19;22807:49;22873:76;22944:4;22935:6;22873:76;:::i;:::-;22865:84;;21903:1053;;;;;;;;:::o;22962:751::-;23185:4;23223:3;23212:9;23208:19;23200:27;;23237:71;23305:1;23294:9;23290:17;23281:6;23237:71;:::i;:::-;23318:72;23386:2;23375:9;23371:18;23362:6;23318:72;:::i;:::-;23400;23468:2;23457:9;23453:18;23444:6;23400:72;:::i;:::-;23482;23550:2;23539:9;23535:18;23526:6;23482:72;:::i;:::-;23602:9;23596:4;23592:20;23586:3;23575:9;23571:19;23564:49;23630:76;23701:4;23692:6;23630:76;:::i;:::-;23622:84;;22962:751;;;;;;;;:::o;23719:373::-;23862:4;23900:2;23889:9;23885:18;23877:26;;23949:9;23943:4;23939:20;23935:1;23924:9;23920:17;23913:47;23977:108;24080:4;24071:6;23977:108;:::i;:::-;23969:116;;23719:373;;;;:::o;24098:634::-;24319:4;24357:2;24346:9;24342:18;24334:26;;24406:9;24400:4;24396:20;24392:1;24381:9;24377:17;24370:47;24434:108;24537:4;24528:6;24434:108;:::i;:::-;24426:116;;24589:9;24583:4;24579:20;24574:2;24563:9;24559:18;24552:48;24617:108;24720:4;24711:6;24617:108;:::i;:::-;24609:116;;24098:634;;;;;:::o;24738:210::-;24825:4;24863:2;24852:9;24848:18;24840:26;;24876:65;24938:1;24927:9;24923:17;24914:6;24876:65;:::i;:::-;24738:210;;;;:::o;24954:313::-;25067:4;25105:2;25094:9;25090:18;25082:26;;25154:9;25148:4;25144:20;25140:1;25129:9;25125:17;25118:47;25182:78;25255:4;25246:6;25182:78;:::i;:::-;25174:86;;24954:313;;;;:::o;25273:419::-;25439:4;25477:2;25466:9;25462:18;25454:26;;25526:9;25520:4;25516:20;25512:1;25501:9;25497:17;25490:47;25554:131;25680:4;25554:131;:::i;:::-;25546:139;;25273:419;;;:::o;25698:::-;25864:4;25902:2;25891:9;25887:18;25879:26;;25951:9;25945:4;25941:20;25937:1;25926:9;25922:17;25915:47;25979:131;26105:4;25979:131;:::i;:::-;25971:139;;25698:419;;;:::o;26123:::-;26289:4;26327:2;26316:9;26312:18;26304:26;;26376:9;26370:4;26366:20;26362:1;26351:9;26347:17;26340:47;26404:131;26530:4;26404:131;:::i;:::-;26396:139;;26123:419;;;:::o;26548:::-;26714:4;26752:2;26741:9;26737:18;26729:26;;26801:9;26795:4;26791:20;26787:1;26776:9;26772:17;26765:47;26829:131;26955:4;26829:131;:::i;:::-;26821:139;;26548:419;;;:::o;26973:::-;27139:4;27177:2;27166:9;27162:18;27154:26;;27226:9;27220:4;27216:20;27212:1;27201:9;27197:17;27190:47;27254:131;27380:4;27254:131;:::i;:::-;27246:139;;26973:419;;;:::o;27398:::-;27564:4;27602:2;27591:9;27587:18;27579:26;;27651:9;27645:4;27641:20;27637:1;27626:9;27622:17;27615:47;27679:131;27805:4;27679:131;:::i;:::-;27671:139;;27398:419;;;:::o;27823:::-;27989:4;28027:2;28016:9;28012:18;28004:26;;28076:9;28070:4;28066:20;28062:1;28051:9;28047:17;28040:47;28104:131;28230:4;28104:131;:::i;:::-;28096:139;;27823:419;;;:::o;28248:::-;28414:4;28452:2;28441:9;28437:18;28429:26;;28501:9;28495:4;28491:20;28487:1;28476:9;28472:17;28465:47;28529:131;28655:4;28529:131;:::i;:::-;28521:139;;28248:419;;;:::o;28673:::-;28839:4;28877:2;28866:9;28862:18;28854:26;;28926:9;28920:4;28916:20;28912:1;28901:9;28897:17;28890:47;28954:131;29080:4;28954:131;:::i;:::-;28946:139;;28673:419;;;:::o;29098:::-;29264:4;29302:2;29291:9;29287:18;29279:26;;29351:9;29345:4;29341:20;29337:1;29326:9;29322:17;29315:47;29379:131;29505:4;29379:131;:::i;:::-;29371:139;;29098:419;;;:::o;29523:::-;29689:4;29727:2;29716:9;29712:18;29704:26;;29776:9;29770:4;29766:20;29762:1;29751:9;29747:17;29740:47;29804:131;29930:4;29804:131;:::i;:::-;29796:139;;29523:419;;;:::o;29948:::-;30114:4;30152:2;30141:9;30137:18;30129:26;;30201:9;30195:4;30191:20;30187:1;30176:9;30172:17;30165:47;30229:131;30355:4;30229:131;:::i;:::-;30221:139;;29948:419;;;:::o;30373:::-;30539:4;30577:2;30566:9;30562:18;30554:26;;30626:9;30620:4;30616:20;30612:1;30601:9;30597:17;30590:47;30654:131;30780:4;30654:131;:::i;:::-;30646:139;;30373:419;;;:::o;30798:::-;30964:4;31002:2;30991:9;30987:18;30979:26;;31051:9;31045:4;31041:20;31037:1;31026:9;31022:17;31015:47;31079:131;31205:4;31079:131;:::i;:::-;31071:139;;30798:419;;;:::o;31223:::-;31389:4;31427:2;31416:9;31412:18;31404:26;;31476:9;31470:4;31466:20;31462:1;31451:9;31447:17;31440:47;31504:131;31630:4;31504:131;:::i;:::-;31496:139;;31223:419;;;:::o;31648:::-;31814:4;31852:2;31841:9;31837:18;31829:26;;31901:9;31895:4;31891:20;31887:1;31876:9;31872:17;31865:47;31929:131;32055:4;31929:131;:::i;:::-;31921:139;;31648:419;;;:::o;32073:::-;32239:4;32277:2;32266:9;32262:18;32254:26;;32326:9;32320:4;32316:20;32312:1;32301:9;32297:17;32290:47;32354:131;32480:4;32354:131;:::i;:::-;32346:139;;32073:419;;;:::o;32498:222::-;32591:4;32629:2;32618:9;32614:18;32606:26;;32642:71;32710:1;32699:9;32695:17;32686:6;32642:71;:::i;:::-;32498:222;;;;:::o;32726:332::-;32847:4;32885:2;32874:9;32870:18;32862:26;;32898:71;32966:1;32955:9;32951:17;32942:6;32898:71;:::i;:::-;32979:72;33047:2;33036:9;33032:18;33023:6;32979:72;:::i;:::-;32726:332;;;;;:::o;33064:129::-;33098:6;33125:20;;:::i;:::-;33115:30;;33154:33;33182:4;33174:6;33154:33;:::i;:::-;33064:129;;;:::o;33199:75::-;33232:6;33265:2;33259:9;33249:19;;33199:75;:::o;33280:311::-;33357:4;33447:18;33439:6;33436:30;33433:56;;;33469:18;;:::i;:::-;33433:56;33519:4;33511:6;33507:17;33499:25;;33579:4;33573;33569:15;33561:23;;33280:311;;;:::o;33597:::-;33674:4;33764:18;33756:6;33753:30;33750:56;;;33786:18;;:::i;:::-;33750:56;33836:4;33828:6;33824:17;33816:25;;33896:4;33890;33886:15;33878:23;;33597:311;;;:::o;33914:307::-;33975:4;34065:18;34057:6;34054:30;34051:56;;;34087:18;;:::i;:::-;34051:56;34125:29;34147:6;34125:29;:::i;:::-;34117:37;;34209:4;34203;34199:15;34191:23;;33914:307;;;:::o;34227:308::-;34289:4;34379:18;34371:6;34368:30;34365:56;;;34401:18;;:::i;:::-;34365:56;34439:29;34461:6;34439:29;:::i;:::-;34431:37;;34523:4;34517;34513:15;34505:23;;34227:308;;;:::o;34541:132::-;34608:4;34631:3;34623:11;;34661:4;34656:3;34652:14;34644:22;;34541:132;;;:::o;34679:114::-;34746:6;34780:5;34774:12;34764:22;;34679:114;;;:::o;34799:98::-;34850:6;34884:5;34878:12;34868:22;;34799:98;;;:::o;34903:99::-;34955:6;34989:5;34983:12;34973:22;;34903:99;;;:::o;35008:113::-;35078:4;35110;35105:3;35101:14;35093:22;;35008:113;;;:::o;35127:184::-;35226:11;35260:6;35255:3;35248:19;35300:4;35295:3;35291:14;35276:29;;35127:184;;;;:::o;35317:168::-;35400:11;35434:6;35429:3;35422:19;35474:4;35469:3;35465:14;35450:29;;35317:168;;;;:::o;35491:169::-;35575:11;35609:6;35604:3;35597:19;35649:4;35644:3;35640:14;35625:29;;35491:169;;;;:::o;35666:305::-;35706:3;35725:20;35743:1;35725:20;:::i;:::-;35720:25;;35759:20;35777:1;35759:20;:::i;:::-;35754:25;;35913:1;35845:66;35841:74;35838:1;35835:81;35832:107;;;35919:18;;:::i;:::-;35832:107;35963:1;35960;35956:9;35949:16;;35666:305;;;;:::o;35977:96::-;36014:7;36043:24;36061:5;36043:24;:::i;:::-;36032:35;;35977:96;;;:::o;36079:90::-;36113:7;36156:5;36149:13;36142:21;36131:32;;36079:90;;;:::o;36175:149::-;36211:7;36251:66;36244:5;36240:78;36229:89;;36175:149;;;:::o;36330:126::-;36367:7;36407:42;36400:5;36396:54;36385:65;;36330:126;;;:::o;36462:77::-;36499:7;36528:5;36517:16;;36462:77;;;:::o;36545:154::-;36629:6;36624:3;36619;36606:30;36691:1;36682:6;36677:3;36673:16;36666:27;36545:154;;;:::o;36705:307::-;36773:1;36783:113;36797:6;36794:1;36791:13;36783:113;;;36882:1;36877:3;36873:11;36867:18;36863:1;36858:3;36854:11;36847:39;36819:2;36816:1;36812:10;36807:15;;36783:113;;;36914:6;36911:1;36908:13;36905:101;;;36994:1;36985:6;36980:3;36976:16;36969:27;36905:101;36754:258;36705:307;;;:::o;37018:320::-;37062:6;37099:1;37093:4;37089:12;37079:22;;37146:1;37140:4;37136:12;37167:18;37157:81;;37223:4;37215:6;37211:17;37201:27;;37157:81;37285:2;37277:6;37274:14;37254:18;37251:38;37248:84;;;37304:18;;:::i;:::-;37248:84;37069:269;37018:320;;;:::o;37344:281::-;37427:27;37449:4;37427:27;:::i;:::-;37419:6;37415:40;37557:6;37545:10;37542:22;37521:18;37509:10;37506:34;37503:62;37500:88;;;37568:18;;:::i;:::-;37500:88;37608:10;37604:2;37597:22;37387:238;37344:281;;:::o;37631:233::-;37670:3;37693:24;37711:5;37693:24;:::i;:::-;37684:33;;37739:66;37732:5;37729:77;37726:103;;;37809:18;;:::i;:::-;37726:103;37856:1;37849:5;37845:13;37838:20;;37631:233;;;:::o;37870:180::-;37918:77;37915:1;37908:88;38015:4;38012:1;38005:15;38039:4;38036:1;38029:15;38056:180;38104:77;38101:1;38094:88;38201:4;38198:1;38191:15;38225:4;38222:1;38215:15;38242:180;38290:77;38287:1;38280:88;38387:4;38384:1;38377:15;38411:4;38408:1;38401:15;38428:180;38476:77;38473:1;38466:88;38573:4;38570:1;38563:15;38597:4;38594:1;38587:15;38614:183;38649:3;38687:1;38669:16;38666:23;38663:128;;;38725:1;38722;38719;38704:23;38747:34;38778:1;38772:8;38747:34;:::i;:::-;38740:41;;38663:128;38614:183;:::o;38803:117::-;38912:1;38909;38902:12;38926:117;39035:1;39032;39025:12;39049:117;39158:1;39155;39148:12;39172:117;39281:1;39278;39271:12;39295:117;39404:1;39401;39394:12;39418:102;39459:6;39510:2;39506:7;39501:2;39494:5;39490:14;39486:28;39476:38;;39418:102;;;:::o;39526:106::-;39570:8;39619:5;39614:3;39610:15;39589:36;;39526:106;;;:::o;39638:239::-;39778:34;39774:1;39766:6;39762:14;39755:58;39847:22;39842:2;39834:6;39830:15;39823:47;39638:239;:::o;39883:227::-;40023:34;40019:1;40011:6;40007:14;40000:58;40092:10;40087:2;40079:6;40075:15;40068:35;39883:227;:::o;40116:230::-;40256:34;40252:1;40244:6;40240:14;40233:58;40325:13;40320:2;40312:6;40308:15;40301:38;40116:230;:::o;40352:225::-;40492:34;40488:1;40480:6;40476:14;40469:58;40561:8;40556:2;40548:6;40544:15;40537:33;40352:225;:::o;40583:223::-;40723:34;40719:1;40711:6;40707:14;40700:58;40792:6;40787:2;40779:6;40775:15;40768:31;40583:223;:::o;40812:228::-;40952:34;40948:1;40940:6;40936:14;40929:58;41021:11;41016:2;41008:6;41004:15;40997:36;40812:228;:::o;41046:224::-;41186:34;41182:1;41174:6;41170:14;41163:58;41255:7;41250:2;41242:6;41238:15;41231:32;41046:224;:::o;41276:237::-;41416:34;41412:1;41404:6;41400:14;41393:58;41485:20;41480:2;41472:6;41468:15;41461:45;41276:237;:::o;41519:222::-;41659:34;41655:1;41647:6;41643:14;41636:58;41728:5;41723:2;41715:6;41711:15;41704:30;41519:222;:::o;41747:229::-;41887:34;41883:1;41875:6;41871:14;41864:58;41956:12;41951:2;41943:6;41939:15;41932:37;41747:229;:::o;41982:162::-;42122:14;42118:1;42110:6;42106:14;42099:38;41982:162;:::o;42150:182::-;42290:34;42286:1;42278:6;42274:14;42267:58;42150:182;:::o;42338:228::-;42478:34;42474:1;42466:6;42462:14;42455:58;42547:11;42542:2;42534:6;42530:15;42523:36;42338:228;:::o;42572:::-;42712:34;42708:1;42700:6;42696:14;42689:58;42781:11;42776:2;42768:6;42764:15;42757:36;42572:228;:::o;42806:227::-;42946:34;42942:1;42934:6;42930:14;42923:58;43015:10;43010:2;43002:6;42998:15;42991:35;42806:227;:::o;43039:220::-;43179:34;43175:1;43167:6;43163:14;43156:58;43248:3;43243:2;43235:6;43231:15;43224:28;43039:220;:::o;43265:173::-;43405:25;43401:1;43393:6;43389:14;43382:49;43265:173;:::o;43444:711::-;43483:3;43521:4;43503:16;43500:26;43497:39;;;43529:5;;43497:39;43558:20;;:::i;:::-;43633:1;43615:16;43611:24;43608:1;43602:4;43587:49;43666:4;43660:11;43765:16;43758:4;43750:6;43746:17;43743:39;43710:18;43702:6;43699:30;43683:113;43680:146;;;43811:5;;;;43680:146;43857:6;43851:4;43847:17;43893:3;43887:10;43920:18;43912:6;43909:30;43906:43;;;43942:5;;;;;;43906:43;43990:6;43983:4;43978:3;43974:14;43970:27;44049:1;44031:16;44027:24;44021:4;44017:35;44012:3;44009:44;44006:57;;;44056:5;;;;;;;44006:57;44073;44121:6;44115:4;44111:17;44103:6;44099:30;44093:4;44073:57;:::i;:::-;44146:3;44139:10;;43487:668;;;;;43444:711;;:::o;44161:122::-;44234:24;44252:5;44234:24;:::i;:::-;44227:5;44224:35;44214:63;;44273:1;44270;44263:12;44214:63;44161:122;:::o;44289:116::-;44359:21;44374:5;44359:21;:::i;:::-;44352:5;44349:32;44339:60;;44395:1;44392;44385:12;44339:60;44289:116;:::o;44411:120::-;44483:23;44500:5;44483:23;:::i;:::-;44476:5;44473:34;44463:62;;44521:1;44518;44511:12;44463:62;44411:120;:::o;44537:122::-;44610:24;44628:5;44610:24;:::i;:::-;44603:5;44600:35;44590:63;;44649:1;44646;44639:12;44590:63;44537:122;:::o

Swarm Source

ipfs://e6f75f47085749705c68bb967fb69cf505958768cfaf5bb4153f3cdae50417ee
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.