ETH Price: $2,551.39 (-2.27%)

Token

 

Overview

Max Total Supply

119

Holders

108

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
0x2aceb736145a4f9fab4251497ece741ba26fe31f
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:
ANONmodeSpecial

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity Multiple files format)

File 2 of 11: ANONmodeSpecial.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;

import "./ERC1155.sol";
import "./IERC1155.sol";
import "./Ownable.sol";
import "./Strings.sol";

contract ANONmodeSpecial is ERC1155, Ownable {
	using Strings for string;

	mapping(uint256 => uint256) private _totalSupply;

	//constants	
	uint256 public totalMinted;

	uint256 constant nft1 = 1;
	uint256 constant nft2 = 2;
	uint256 constant nft3 = 3;
	uint256 constant nft4 = 4;

	event Redeemed(address indexed from, uint256 id, uint256 uuid);

	string public _baseURI;
	string public _contractURI;

	bool saleLive = false;

	constructor() ERC1155(_baseURI) {}

	// airdrop function
    function airdropnft1(uint256[] calldata qty, address[] calldata addr) public onlyOwner {
        for(uint256 i = 0; i < addr.length; i++) {
            _mint(addr[i], nft1, qty[i], "");
        }
    }
	function airdropnft2(uint256[] calldata qty, address[] calldata addr) public onlyOwner {
        for(uint256 i = 0; i < addr.length; i++) {
            _mint(addr[i], nft2, qty[i], "");
        }
    }
	function airdropnft3(uint256[] calldata qty, address[] calldata addr) public onlyOwner {
        for(uint256 i = 0; i < addr.length; i++) {
            _mint(addr[i], nft3, qty[i], "");
        }
    }
	function airdropnft4(uint256[] calldata qty, address[] calldata addr) public onlyOwner {
        for(uint256 i = 0; i < addr.length; i++) {
            _mint(addr[i], nft4, qty[i], "");
        }
    }

	function setBaseURI(string memory newuri) public onlyOwner {
		_baseURI = newuri;
	}
	function setContractURI(string memory newuri) public onlyOwner {
		_contractURI = newuri;
	}

	function uri(uint256 tokenId) public view override returns (string memory) {
		return string(abi.encodePacked(_baseURI, uint2str(tokenId)));
	}
	function contractURI() public view returns (string memory) {
		return _contractURI;
	}
	function uint2str(uint256 _i) internal pure returns (string memory _uintAsString) {
		if (_i == 0) {return "0";}
			uint256 j = _i;
			uint256 len;
		while (j != 0) {len++; j /= 10;}
			bytes memory bstr = new bytes(len);
			uint256 k = len;
		while (_i != 0) {
			k = k - 1;
			uint8 temp = (48 + uint8(_i - (_i / 10) * 10));
			bytes1 b1 = bytes1(temp);
			bstr[k] = b1;
			_i /= 10;
		}
		return string(bstr);
	}

	function totalSupply(uint256 id) public view virtual returns (uint256) {
		return _totalSupply[id];
	}

	function exists(uint256 id) public view virtual returns (bool) {
		return totalSupply(id) > 0;
	}

	function withdrawToOwner() external onlyOwner {
		payable(msg.sender).transfer(address(this).balance);
	}
}

File 1 of 11: Address.sol
// SPDX-License-Identifier: MIT

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

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private 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 3 of 11: Context.sol
// SPDX-License-Identifier: MIT

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 4 of 11: ERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC1155.sol";
import "./IERC1155Receiver.sol";
import "./IERC1155MetadataURI.sol";
import "./Address.sol";
import "./Context.sol";
import "./ERC165.sol";

/**
 * @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 {
        require(_msgSender() != operator, "ERC1155: setting approval status for self");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_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 `account`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - If `account` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address account,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(account != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();

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

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

        _doSafeTransferAcceptanceCheck(operator, address(0), account, 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 `account`
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address account,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();

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

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

        emit TransferSingle(operator, account, 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 account,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(account != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

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

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

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

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

    /**
     * @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(to).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(to).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 5 of 11: ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 6 of 11: IERC1155.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 7 of 11: IERC1155MetadataURI.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC1155.sol";

/**
 * @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 8 of 11: IERC1155Receiver.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 9 of 11: IERC165.sol
// SPDX-License-Identifier: MIT

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 10 of 11: Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./Context.sol";

/**
 * @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() {
        _setOwner(_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 {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 11 of 11: Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

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

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":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"uuid","type":"uint256"}],"name":"Redeemed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"_baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"qty","type":"uint256[]"},{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"airdropnft1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"qty","type":"uint256[]"},{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"airdropnft2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"qty","type":"uint256[]"},{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"airdropnft3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"qty","type":"uint256[]"},{"internalType":"address[]","name":"addr","type":"address[]"}],"name":"airdropnft4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"string","name":"newuri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526000600860006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b50600680546200003c90620002c1565b80601f01602080910402602001604051908101604052809291908181526020018280546200006a90620002c1565b8015620000bb5780601f106200008f57610100808354040283529160200191620000bb565b820191906000526020600020905b8154815290600101906020018083116200009d57829003601f168201915b5050505050620000d181620000f860201b60201c565b50620000f2620000e66200011460201b60201c565b6200011c60201b60201c565b620002f7565b806002908051906020019062000110929190620001e2565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001f090620002c1565b90600052602060002090601f01602090048101928262000214576000855562000260565b82601f106200022f57805160ff191683800117855562000260565b8280016001018555821562000260579182015b828111156200025f57825182559160200191906001019062000242565b5b5090506200026f919062000273565b5090565b5b808211156200028e57600081600090555060010162000274565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002da57607f821691505b60208210811415620002f157620002f062000292565b5b50919050565b613bfe80620003076000396000f3fe608060405234801561001057600080fd5b50600436106101575760003560e01c80638da5cb5b116100c3578063e0efa8a31161007c578063e0efa8a3146103b0578063e8a3d485146103cc578063e985e9c5146103ea578063f0120c611461041a578063f242432a14610436578063f2fde38b1461045257610157565b80638da5cb5b146102ee578063938e3d7b1461030c578063a22cb46514610328578063a2309ff814610344578063bd85b03914610362578063c0e727401461039257610157565b80633cb40e16116101155780633cb40e16146102405780634e1273f41461024a5780634f558e791461027a57806355f804b3146102aa578063715018a6146102c6578063743976a0146102d057610157565b8062fdd58e1461015c57806301ffc9a71461018c5780630e89341c146101bc5780632486ab09146101ec5780632eb2c2d6146102085780633547b02d14610224575b600080fd5b610176600480360381019061017191906123d8565b61046e565b6040516101839190612427565b60405180910390f35b6101a660048036038101906101a1919061249a565b610537565b6040516101b391906124e2565b60405180910390f35b6101d660048036038101906101d191906124fd565b610619565b6040516101e391906125c3565b60405180910390f35b610206600480360381019061020191906126a0565b61064d565b005b610222600480360381019061021d9190612914565b61074d565b005b61023e600480360381019061023991906126a0565b6107ee565b005b6102486108ee565b005b610264600480360381019061025f9190612aa6565b6109b3565b6040516102719190612bdc565b60405180910390f35b610294600480360381019061028f91906124fd565b610acc565b6040516102a191906124e2565b60405180910390f35b6102c460048036038101906102bf9190612c9f565b610ae0565b005b6102ce610b76565b005b6102d8610bfe565b6040516102e591906125c3565b60405180910390f35b6102f6610c8c565b6040516103039190612cf7565b60405180910390f35b61032660048036038101906103219190612c9f565b610cb6565b005b610342600480360381019061033d9190612d3e565b610d4c565b005b61034c610ecd565b6040516103599190612427565b60405180910390f35b61037c600480360381019061037791906124fd565b610ed3565b6040516103899190612427565b60405180910390f35b61039a610ef0565b6040516103a791906125c3565b60405180910390f35b6103ca60048036038101906103c591906126a0565b610f7e565b005b6103d461107e565b6040516103e191906125c3565b60405180910390f35b61040460048036038101906103ff9190612d7e565b611110565b60405161041191906124e2565b60405180910390f35b610434600480360381019061042f91906126a0565b6111a4565b005b610450600480360381019061044b9190612dbe565b6112a4565b005b61046c60048036038101906104679190612e55565b611345565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d690612ef4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061060257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061061257506106118261143d565b5b9050919050565b60606006610626836114a7565b604051602001610637929190613045565b6040516020818303038152906040529050919050565b610655611630565b73ffffffffffffffffffffffffffffffffffffffff16610673610c8c565b73ffffffffffffffffffffffffffffffffffffffff16146106c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c0906130b5565b60405180910390fd5b60005b82829050811015610746576107338383838181106106ed576106ec6130d5565b5b90506020020160208101906107029190612e55565b6004878785818110610717576107166130d5565b5b9050602002013560405180602001604052806000815250611638565b808061073e90613133565b9150506106cc565b5050505050565b610755611630565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079b575061079a85610795611630565b611110565b5b6107da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d1906131ee565b60405180910390fd5b6107e785858585856117ce565b5050505050565b6107f6611630565b73ffffffffffffffffffffffffffffffffffffffff16610814610c8c565b73ffffffffffffffffffffffffffffffffffffffff161461086a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610861906130b5565b60405180910390fd5b60005b828290508110156108e7576108d483838381811061088e5761088d6130d5565b5b90506020020160208101906108a39190612e55565b60028787858181106108b8576108b76130d5565b5b9050602002013560405180602001604052806000815250611638565b80806108df90613133565b91505061086d565b5050505050565b6108f6611630565b73ffffffffffffffffffffffffffffffffffffffff16610914610c8c565b73ffffffffffffffffffffffffffffffffffffffff161461096a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610961906130b5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156109b0573d6000803e3d6000fd5b50565b606081518351146109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090613280565b60405180910390fd5b6000835167ffffffffffffffff811115610a1657610a15612721565b5b604051908082528060200260200182016040528015610a445781602001602082028036833780820191505090505b50905060005b8451811015610ac157610a91858281518110610a6957610a686130d5565b5b6020026020010151858381518110610a8457610a836130d5565b5b602002602001015161046e565b828281518110610aa457610aa36130d5565b5b60200260200101818152505080610aba90613133565b9050610a4a565b508091505092915050565b600080610ad883610ed3565b119050919050565b610ae8611630565b73ffffffffffffffffffffffffffffffffffffffff16610b06610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906130b5565b60405180910390fd5b8060069080519060200190610b7292919061228d565b5050565b610b7e611630565b73ffffffffffffffffffffffffffffffffffffffff16610b9c610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be9906130b5565b60405180910390fd5b610bfc6000611ae2565b565b60068054610c0b90612f43565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3790612f43565b8015610c845780601f10610c5957610100808354040283529160200191610c84565b820191906000526020600020905b815481529060010190602001808311610c6757829003601f168201915b505050505081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610cbe611630565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d29906130b5565b60405180910390fd5b8060079080519060200190610d4892919061228d565b5050565b8173ffffffffffffffffffffffffffffffffffffffff16610d6b611630565b73ffffffffffffffffffffffffffffffffffffffff161415610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990613312565b60405180910390fd5b8060016000610dcf611630565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e7c611630565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ec191906124e2565b60405180910390a35050565b60055481565b600060046000838152602001908152602001600020549050919050565b60078054610efd90612f43565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2990612f43565b8015610f765780601f10610f4b57610100808354040283529160200191610f76565b820191906000526020600020905b815481529060010190602001808311610f5957829003601f168201915b505050505081565b610f86611630565b73ffffffffffffffffffffffffffffffffffffffff16610fa4610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906130b5565b60405180910390fd5b60005b828290508110156110775761106483838381811061101e5761101d6130d5565b5b90506020020160208101906110339190612e55565b6003878785818110611048576110476130d5565b5b9050602002013560405180602001604052806000815250611638565b808061106f90613133565b915050610ffd565b5050505050565b60606007805461108d90612f43565b80601f01602080910402602001604051908101604052809291908181526020018280546110b990612f43565b80156111065780601f106110db57610100808354040283529160200191611106565b820191906000526020600020905b8154815290600101906020018083116110e957829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111ac611630565b73ffffffffffffffffffffffffffffffffffffffff166111ca610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906130b5565b60405180910390fd5b60005b8282905081101561129d5761128a838383818110611244576112436130d5565b5b90506020020160208101906112599190612e55565b600187878581811061126e5761126d6130d5565b5b9050602002013560405180602001604052806000815250611638565b808061129590613133565b915050611223565b5050505050565b6112ac611630565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112f257506112f1856112ec611630565b611110565b5b611331576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611328906133a4565b60405180910390fd5b61133e8585858585611ba8565b5050505050565b61134d611630565b73ffffffffffffffffffffffffffffffffffffffff1661136b610c8c565b73ffffffffffffffffffffffffffffffffffffffff16146113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b8906130b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890613436565b60405180910390fd5b61143a81611ae2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008214156114ef576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061162b565b600082905060005b6000821461152157808061150a90613133565b915050600a8261151a9190613485565b91506114f7565b60008167ffffffffffffffff81111561153d5761153c612721565b5b6040519080825280601f01601f19166020018201604052801561156f5781602001600182028036833780820191505090505b50905060008290505b600086146116235760018161158d91906134b6565b90506000600a808861159f9190613485565b6115a991906134ea565b876115b491906134b6565b60306115c09190613551565b905060008160f81b9050808484815181106115de576115dd6130d5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8861161a9190613485565b97505050611578565b819450505050505b919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f906135fa565b60405180910390fd5b60006116b2611630565b90506116d3816000876116c488611e2a565b6116cd88611e2a565b87611ea4565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611732919061361a565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516117b0929190613670565b60405180910390a46117c781600087878787611eac565b5050505050565b8151835114611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061370b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118799061379d565b60405180910390fd5b600061188c611630565b905061189c818787878787611ea4565b60005b8451811015611a4d5760008582815181106118bd576118bc6130d5565b5b6020026020010151905060008583815181106118dc576118db6130d5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119749061382f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a32919061361a565b9250508190555050505080611a4690613133565b905061189f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ac492919061384f565b60405180910390a4611ada818787878787612093565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f9061379d565b60405180910390fd5b6000611c22611630565b9050611c42818787611c3388611e2a565b611c3c88611e2a565b87611ea4565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd09061382f565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d8e919061361a565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e0b929190613670565b60405180910390a4611e21828888888888611eac565b50505050505050565b60606000600167ffffffffffffffff811115611e4957611e48612721565b5b604051908082528060200260200182016040528015611e775781602001602082028036833780820191505090505b5090508281600081518110611e8f57611e8e6130d5565b5b60200260200101818152505080915050919050565b505050505050565b611ecb8473ffffffffffffffffffffffffffffffffffffffff1661227a565b1561208b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611f119594939291906138db565b602060405180830381600087803b158015611f2b57600080fd5b505af1925050508015611f5c57506040513d601f19601f82011682018060405250810190611f59919061394a565b60015b61200257611f68613984565b806308c379a01415611fc55750611f7d6139a6565b80611f885750611fc7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc91906125c3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990613aae565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090613b40565b60405180910390fd5b505b505050505050565b6120b28473ffffffffffffffffffffffffffffffffffffffff1661227a565b15612272578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120f8959493929190613b60565b602060405180830381600087803b15801561211257600080fd5b505af192505050801561214357506040513d601f19601f82011682018060405250810190612140919061394a565b60015b6121e95761214f613984565b806308c379a014156121ac57506121646139a6565b8061216f57506121ae565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a391906125c3565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090613aae565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790613b40565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461229990612f43565b90600052602060002090601f0160209004810192826122bb5760008555612302565b82601f106122d457805160ff1916838001178555612302565b82800160010185558215612302579182015b828111156123015782518255916020019190600101906122e6565b5b50905061230f9190612313565b5090565b5b8082111561232c576000816000905550600101612314565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061236f82612344565b9050919050565b61237f81612364565b811461238a57600080fd5b50565b60008135905061239c81612376565b92915050565b6000819050919050565b6123b5816123a2565b81146123c057600080fd5b50565b6000813590506123d2816123ac565b92915050565b600080604083850312156123ef576123ee61233a565b5b60006123fd8582860161238d565b925050602061240e858286016123c3565b9150509250929050565b612421816123a2565b82525050565b600060208201905061243c6000830184612418565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61247781612442565b811461248257600080fd5b50565b6000813590506124948161246e565b92915050565b6000602082840312156124b0576124af61233a565b5b60006124be84828501612485565b91505092915050565b60008115159050919050565b6124dc816124c7565b82525050565b60006020820190506124f760008301846124d3565b92915050565b6000602082840312156125135761251261233a565b5b6000612521848285016123c3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612564578082015181840152602081019050612549565b83811115612573576000848401525b50505050565b6000601f19601f8301169050919050565b60006125958261252a565b61259f8185612535565b93506125af818560208601612546565b6125b881612579565b840191505092915050565b600060208201905081810360008301526125dd818461258a565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261260a576126096125e5565b5b8235905067ffffffffffffffff811115612627576126266125ea565b5b602083019150836020820283011115612643576126426125ef565b5b9250929050565b60008083601f8401126126605761265f6125e5565b5b8235905067ffffffffffffffff81111561267d5761267c6125ea565b5b602083019150836020820283011115612699576126986125ef565b5b9250929050565b600080600080604085870312156126ba576126b961233a565b5b600085013567ffffffffffffffff8111156126d8576126d761233f565b5b6126e4878288016125f4565b9450945050602085013567ffffffffffffffff8111156127075761270661233f565b5b6127138782880161264a565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61275982612579565b810181811067ffffffffffffffff8211171561277857612777612721565b5b80604052505050565b600061278b612330565b90506127978282612750565b919050565b600067ffffffffffffffff8211156127b7576127b6612721565b5b602082029050602081019050919050565b60006127db6127d68461279c565b612781565b905080838252602082019050602084028301858111156127fe576127fd6125ef565b5b835b81811015612827578061281388826123c3565b845260208401935050602081019050612800565b5050509392505050565b600082601f830112612846576128456125e5565b5b81356128568482602086016127c8565b91505092915050565b600080fd5b600067ffffffffffffffff82111561287f5761287e612721565b5b61288882612579565b9050602081019050919050565b82818337600083830152505050565b60006128b76128b284612864565b612781565b9050828152602081018484840111156128d3576128d261285f565b5b6128de848285612895565b509392505050565b600082601f8301126128fb576128fa6125e5565b5b813561290b8482602086016128a4565b91505092915050565b600080600080600060a086880312156129305761292f61233a565b5b600061293e8882890161238d565b955050602061294f8882890161238d565b945050604086013567ffffffffffffffff8111156129705761296f61233f565b5b61297c88828901612831565b935050606086013567ffffffffffffffff81111561299d5761299c61233f565b5b6129a988828901612831565b925050608086013567ffffffffffffffff8111156129ca576129c961233f565b5b6129d6888289016128e6565b9150509295509295909350565b600067ffffffffffffffff8211156129fe576129fd612721565b5b602082029050602081019050919050565b6000612a22612a1d846129e3565b612781565b90508083825260208201905060208402830185811115612a4557612a446125ef565b5b835b81811015612a6e5780612a5a888261238d565b845260208401935050602081019050612a47565b5050509392505050565b600082601f830112612a8d57612a8c6125e5565b5b8135612a9d848260208601612a0f565b91505092915050565b60008060408385031215612abd57612abc61233a565b5b600083013567ffffffffffffffff811115612adb57612ada61233f565b5b612ae785828601612a78565b925050602083013567ffffffffffffffff811115612b0857612b0761233f565b5b612b1485828601612831565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b53816123a2565b82525050565b6000612b658383612b4a565b60208301905092915050565b6000602082019050919050565b6000612b8982612b1e565b612b938185612b29565b9350612b9e83612b3a565b8060005b83811015612bcf578151612bb68882612b59565b9750612bc183612b71565b925050600181019050612ba2565b5085935050505092915050565b60006020820190508181036000830152612bf68184612b7e565b905092915050565b600067ffffffffffffffff821115612c1957612c18612721565b5b612c2282612579565b9050602081019050919050565b6000612c42612c3d84612bfe565b612781565b905082815260208101848484011115612c5e57612c5d61285f565b5b612c69848285612895565b509392505050565b600082601f830112612c8657612c856125e5565b5b8135612c96848260208601612c2f565b91505092915050565b600060208284031215612cb557612cb461233a565b5b600082013567ffffffffffffffff811115612cd357612cd261233f565b5b612cdf84828501612c71565b91505092915050565b612cf181612364565b82525050565b6000602082019050612d0c6000830184612ce8565b92915050565b612d1b816124c7565b8114612d2657600080fd5b50565b600081359050612d3881612d12565b92915050565b60008060408385031215612d5557612d5461233a565b5b6000612d638582860161238d565b9250506020612d7485828601612d29565b9150509250929050565b60008060408385031215612d9557612d9461233a565b5b6000612da38582860161238d565b9250506020612db48582860161238d565b9150509250929050565b600080600080600060a08688031215612dda57612dd961233a565b5b6000612de88882890161238d565b9550506020612df98882890161238d565b9450506040612e0a888289016123c3565b9350506060612e1b888289016123c3565b925050608086013567ffffffffffffffff811115612e3c57612e3b61233f565b5b612e48888289016128e6565b9150509295509295909350565b600060208284031215612e6b57612e6a61233a565b5b6000612e798482850161238d565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612ede602b83612535565b9150612ee982612e82565b604082019050919050565b60006020820190508181036000830152612f0d81612ed1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f5b57607f821691505b60208210811415612f6f57612f6e612f14565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612fa281612f43565b612fac8186612f75565b94506001821660008114612fc75760018114612fd85761300b565b60ff1983168652818601935061300b565b612fe185612f80565b60005b8381101561300357815481890152600182019150602081019050612fe4565b838801955050505b50505092915050565b600061301f8261252a565b6130298185612f75565b9350613039818560208601612546565b80840191505092915050565b60006130518285612f95565b915061305d8284613014565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061309f602083612535565b91506130aa82613069565b602082019050919050565b600060208201905081810360008301526130ce81613092565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061313e826123a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561317157613170613104565b5b600182019050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006131d8603283612535565b91506131e38261317c565b604082019050919050565b60006020820190508181036000830152613207816131cb565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061326a602983612535565b91506132758261320e565b604082019050919050565b600060208201905081810360008301526132998161325d565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006132fc602983612535565b9150613307826132a0565b604082019050919050565b6000602082019050818103600083015261332b816132ef565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061338e602983612535565b915061339982613332565b604082019050919050565b600060208201905081810360008301526133bd81613381565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613420602683612535565b915061342b826133c4565b604082019050919050565b6000602082019050818103600083015261344f81613413565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613490826123a2565b915061349b836123a2565b9250826134ab576134aa613456565b5b828204905092915050565b60006134c1826123a2565b91506134cc836123a2565b9250828210156134df576134de613104565b5b828203905092915050565b60006134f5826123a2565b9150613500836123a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561353957613538613104565b5b828202905092915050565b600060ff82169050919050565b600061355c82613544565b915061356783613544565b92508260ff0382111561357d5761357c613104565b5b828201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006135e4602183612535565b91506135ef82613588565b604082019050919050565b60006020820190508181036000830152613613816135d7565b9050919050565b6000613625826123a2565b9150613630836123a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561366557613664613104565b5b828201905092915050565b60006040820190506136856000830185612418565b6136926020830184612418565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006136f5602883612535565b915061370082613699565b604082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613787602583612535565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613819602a83612535565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b600060408201905081810360008301526138698185612b7e565b9050818103602083015261387d8184612b7e565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006138ad82613886565b6138b78185613891565b93506138c7818560208601612546565b6138d081612579565b840191505092915050565b600060a0820190506138f06000830188612ce8565b6138fd6020830187612ce8565b61390a6040830186612418565b6139176060830185612418565b818103608083015261392981846138a2565b90509695505050505050565b6000815190506139448161246e565b92915050565b6000602082840312156139605761395f61233a565b5b600061396e84828501613935565b91505092915050565b60008160e01c9050919050565b600060033d11156139a35760046000803e6139a0600051613977565b90505b90565b600060443d10156139b657613a39565b6139be612330565b60043d036004823e80513d602482011167ffffffffffffffff821117156139e6575050613a39565b808201805167ffffffffffffffff811115613a045750505050613a39565b80602083010160043d038501811115613a21575050505050613a39565b613a3082602001850186612750565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613a98603483612535565b9150613aa382613a3c565b604082019050919050565b60006020820190508181036000830152613ac781613a8b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613b2a602883612535565b9150613b3582613ace565b604082019050919050565b60006020820190508181036000830152613b5981613b1d565b9050919050565b600060a082019050613b756000830188612ce8565b613b826020830187612ce8565b8181036040830152613b948186612b7e565b90508181036060830152613ba88185612b7e565b90508181036080830152613bbc81846138a2565b9050969550505050505056fea26469706673582212202425069e96568cdc33fb229b9db3ca47c0c119c3acaaed4b24636464ca29b43564736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101575760003560e01c80638da5cb5b116100c3578063e0efa8a31161007c578063e0efa8a3146103b0578063e8a3d485146103cc578063e985e9c5146103ea578063f0120c611461041a578063f242432a14610436578063f2fde38b1461045257610157565b80638da5cb5b146102ee578063938e3d7b1461030c578063a22cb46514610328578063a2309ff814610344578063bd85b03914610362578063c0e727401461039257610157565b80633cb40e16116101155780633cb40e16146102405780634e1273f41461024a5780634f558e791461027a57806355f804b3146102aa578063715018a6146102c6578063743976a0146102d057610157565b8062fdd58e1461015c57806301ffc9a71461018c5780630e89341c146101bc5780632486ab09146101ec5780632eb2c2d6146102085780633547b02d14610224575b600080fd5b610176600480360381019061017191906123d8565b61046e565b6040516101839190612427565b60405180910390f35b6101a660048036038101906101a1919061249a565b610537565b6040516101b391906124e2565b60405180910390f35b6101d660048036038101906101d191906124fd565b610619565b6040516101e391906125c3565b60405180910390f35b610206600480360381019061020191906126a0565b61064d565b005b610222600480360381019061021d9190612914565b61074d565b005b61023e600480360381019061023991906126a0565b6107ee565b005b6102486108ee565b005b610264600480360381019061025f9190612aa6565b6109b3565b6040516102719190612bdc565b60405180910390f35b610294600480360381019061028f91906124fd565b610acc565b6040516102a191906124e2565b60405180910390f35b6102c460048036038101906102bf9190612c9f565b610ae0565b005b6102ce610b76565b005b6102d8610bfe565b6040516102e591906125c3565b60405180910390f35b6102f6610c8c565b6040516103039190612cf7565b60405180910390f35b61032660048036038101906103219190612c9f565b610cb6565b005b610342600480360381019061033d9190612d3e565b610d4c565b005b61034c610ecd565b6040516103599190612427565b60405180910390f35b61037c600480360381019061037791906124fd565b610ed3565b6040516103899190612427565b60405180910390f35b61039a610ef0565b6040516103a791906125c3565b60405180910390f35b6103ca60048036038101906103c591906126a0565b610f7e565b005b6103d461107e565b6040516103e191906125c3565b60405180910390f35b61040460048036038101906103ff9190612d7e565b611110565b60405161041191906124e2565b60405180910390f35b610434600480360381019061042f91906126a0565b6111a4565b005b610450600480360381019061044b9190612dbe565b6112a4565b005b61046c60048036038101906104679190612e55565b611345565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156104df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d690612ef4565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061060257507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061061257506106118261143d565b5b9050919050565b60606006610626836114a7565b604051602001610637929190613045565b6040516020818303038152906040529050919050565b610655611630565b73ffffffffffffffffffffffffffffffffffffffff16610673610c8c565b73ffffffffffffffffffffffffffffffffffffffff16146106c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c0906130b5565b60405180910390fd5b60005b82829050811015610746576107338383838181106106ed576106ec6130d5565b5b90506020020160208101906107029190612e55565b6004878785818110610717576107166130d5565b5b9050602002013560405180602001604052806000815250611638565b808061073e90613133565b9150506106cc565b5050505050565b610755611630565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061079b575061079a85610795611630565b611110565b5b6107da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d1906131ee565b60405180910390fd5b6107e785858585856117ce565b5050505050565b6107f6611630565b73ffffffffffffffffffffffffffffffffffffffff16610814610c8c565b73ffffffffffffffffffffffffffffffffffffffff161461086a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610861906130b5565b60405180910390fd5b60005b828290508110156108e7576108d483838381811061088e5761088d6130d5565b5b90506020020160208101906108a39190612e55565b60028787858181106108b8576108b76130d5565b5b9050602002013560405180602001604052806000815250611638565b80806108df90613133565b91505061086d565b5050505050565b6108f6611630565b73ffffffffffffffffffffffffffffffffffffffff16610914610c8c565b73ffffffffffffffffffffffffffffffffffffffff161461096a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610961906130b5565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156109b0573d6000803e3d6000fd5b50565b606081518351146109f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f090613280565b60405180910390fd5b6000835167ffffffffffffffff811115610a1657610a15612721565b5b604051908082528060200260200182016040528015610a445781602001602082028036833780820191505090505b50905060005b8451811015610ac157610a91858281518110610a6957610a686130d5565b5b6020026020010151858381518110610a8457610a836130d5565b5b602002602001015161046e565b828281518110610aa457610aa36130d5565b5b60200260200101818152505080610aba90613133565b9050610a4a565b508091505092915050565b600080610ad883610ed3565b119050919050565b610ae8611630565b73ffffffffffffffffffffffffffffffffffffffff16610b06610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614610b5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b53906130b5565b60405180910390fd5b8060069080519060200190610b7292919061228d565b5050565b610b7e611630565b73ffffffffffffffffffffffffffffffffffffffff16610b9c610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614610bf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be9906130b5565b60405180910390fd5b610bfc6000611ae2565b565b60068054610c0b90612f43565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3790612f43565b8015610c845780601f10610c5957610100808354040283529160200191610c84565b820191906000526020600020905b815481529060010190602001808311610c6757829003601f168201915b505050505081565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610cbe611630565b73ffffffffffffffffffffffffffffffffffffffff16610cdc610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614610d32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d29906130b5565b60405180910390fd5b8060079080519060200190610d4892919061228d565b5050565b8173ffffffffffffffffffffffffffffffffffffffff16610d6b611630565b73ffffffffffffffffffffffffffffffffffffffff161415610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990613312565b60405180910390fd5b8060016000610dcf611630565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16610e7c611630565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051610ec191906124e2565b60405180910390a35050565b60055481565b600060046000838152602001908152602001600020549050919050565b60078054610efd90612f43565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2990612f43565b8015610f765780601f10610f4b57610100808354040283529160200191610f76565b820191906000526020600020905b815481529060010190602001808311610f5957829003601f168201915b505050505081565b610f86611630565b73ffffffffffffffffffffffffffffffffffffffff16610fa4610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff1906130b5565b60405180910390fd5b60005b828290508110156110775761106483838381811061101e5761101d6130d5565b5b90506020020160208101906110339190612e55565b6003878785818110611048576110476130d5565b5b9050602002013560405180602001604052806000815250611638565b808061106f90613133565b915050610ffd565b5050505050565b60606007805461108d90612f43565b80601f01602080910402602001604051908101604052809291908181526020018280546110b990612f43565b80156111065780601f106110db57610100808354040283529160200191611106565b820191906000526020600020905b8154815290600101906020018083116110e957829003601f168201915b5050505050905090565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6111ac611630565b73ffffffffffffffffffffffffffffffffffffffff166111ca610c8c565b73ffffffffffffffffffffffffffffffffffffffff1614611220576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611217906130b5565b60405180910390fd5b60005b8282905081101561129d5761128a838383818110611244576112436130d5565b5b90506020020160208101906112599190612e55565b600187878581811061126e5761126d6130d5565b5b9050602002013560405180602001604052806000815250611638565b808061129590613133565b915050611223565b5050505050565b6112ac611630565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112f257506112f1856112ec611630565b611110565b5b611331576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611328906133a4565b60405180910390fd5b61133e8585858585611ba8565b5050505050565b61134d611630565b73ffffffffffffffffffffffffffffffffffffffff1661136b610c8c565b73ffffffffffffffffffffffffffffffffffffffff16146113c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b8906130b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611431576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142890613436565b60405180910390fd5b61143a81611ae2565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b606060008214156114ef576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061162b565b600082905060005b6000821461152157808061150a90613133565b915050600a8261151a9190613485565b91506114f7565b60008167ffffffffffffffff81111561153d5761153c612721565b5b6040519080825280601f01601f19166020018201604052801561156f5781602001600182028036833780820191505090505b50905060008290505b600086146116235760018161158d91906134b6565b90506000600a808861159f9190613485565b6115a991906134ea565b876115b491906134b6565b60306115c09190613551565b905060008160f81b9050808484815181106115de576115dd6130d5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8861161a9190613485565b97505050611578565b819450505050505b919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156116a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169f906135fa565b60405180910390fd5b60006116b2611630565b90506116d3816000876116c488611e2a565b6116cd88611e2a565b87611ea4565b8260008086815260200190815260200160002060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611732919061361a565b925050819055508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6287876040516117b0929190613670565b60405180910390a46117c781600087878787611eac565b5050505050565b8151835114611812576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118099061370b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611882576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118799061379d565b60405180910390fd5b600061188c611630565b905061189c818787878787611ea4565b60005b8451811015611a4d5760008582815181106118bd576118bc6130d5565b5b6020026020010151905060008583815181106118dc576118db6130d5565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561197d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119749061382f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a32919061361a565b9250508190555050505080611a4690613133565b905061189f565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611ac492919061384f565b60405180910390a4611ada818787878787612093565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611c18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0f9061379d565b60405180910390fd5b6000611c22611630565b9050611c42818787611c3388611e2a565b611c3c88611e2a565b87611ea4565b600080600086815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015611cd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd09061382f565b60405180910390fd5b83810360008087815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508360008087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d8e919061361a565b925050819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628888604051611e0b929190613670565b60405180910390a4611e21828888888888611eac565b50505050505050565b60606000600167ffffffffffffffff811115611e4957611e48612721565b5b604051908082528060200260200182016040528015611e775781602001602082028036833780820191505090505b5090508281600081518110611e8f57611e8e6130d5565b5b60200260200101818152505080915050919050565b505050505050565b611ecb8473ffffffffffffffffffffffffffffffffffffffff1661227a565b1561208b578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611f119594939291906138db565b602060405180830381600087803b158015611f2b57600080fd5b505af1925050508015611f5c57506040513d601f19601f82011682018060405250810190611f59919061394a565b60015b61200257611f68613984565b806308c379a01415611fc55750611f7d6139a6565b80611f885750611fc7565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbc91906125c3565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff990613aae565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612089576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208090613b40565b60405180910390fd5b505b505050505050565b6120b28473ffffffffffffffffffffffffffffffffffffffff1661227a565b15612272578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b81526004016120f8959493929190613b60565b602060405180830381600087803b15801561211257600080fd5b505af192505050801561214357506040513d601f19601f82011682018060405250810190612140919061394a565b60015b6121e95761214f613984565b806308c379a014156121ac57506121646139a6565b8061216f57506121ae565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a391906125c3565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e090613aae565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612270576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226790613b40565b60405180910390fd5b505b505050505050565b600080823b905060008111915050919050565b82805461229990612f43565b90600052602060002090601f0160209004810192826122bb5760008555612302565b82601f106122d457805160ff1916838001178555612302565b82800160010185558215612302579182015b828111156123015782518255916020019190600101906122e6565b5b50905061230f9190612313565b5090565b5b8082111561232c576000816000905550600101612314565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061236f82612344565b9050919050565b61237f81612364565b811461238a57600080fd5b50565b60008135905061239c81612376565b92915050565b6000819050919050565b6123b5816123a2565b81146123c057600080fd5b50565b6000813590506123d2816123ac565b92915050565b600080604083850312156123ef576123ee61233a565b5b60006123fd8582860161238d565b925050602061240e858286016123c3565b9150509250929050565b612421816123a2565b82525050565b600060208201905061243c6000830184612418565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61247781612442565b811461248257600080fd5b50565b6000813590506124948161246e565b92915050565b6000602082840312156124b0576124af61233a565b5b60006124be84828501612485565b91505092915050565b60008115159050919050565b6124dc816124c7565b82525050565b60006020820190506124f760008301846124d3565b92915050565b6000602082840312156125135761251261233a565b5b6000612521848285016123c3565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612564578082015181840152602081019050612549565b83811115612573576000848401525b50505050565b6000601f19601f8301169050919050565b60006125958261252a565b61259f8185612535565b93506125af818560208601612546565b6125b881612579565b840191505092915050565b600060208201905081810360008301526125dd818461258a565b905092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261260a576126096125e5565b5b8235905067ffffffffffffffff811115612627576126266125ea565b5b602083019150836020820283011115612643576126426125ef565b5b9250929050565b60008083601f8401126126605761265f6125e5565b5b8235905067ffffffffffffffff81111561267d5761267c6125ea565b5b602083019150836020820283011115612699576126986125ef565b5b9250929050565b600080600080604085870312156126ba576126b961233a565b5b600085013567ffffffffffffffff8111156126d8576126d761233f565b5b6126e4878288016125f4565b9450945050602085013567ffffffffffffffff8111156127075761270661233f565b5b6127138782880161264a565b925092505092959194509250565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61275982612579565b810181811067ffffffffffffffff8211171561277857612777612721565b5b80604052505050565b600061278b612330565b90506127978282612750565b919050565b600067ffffffffffffffff8211156127b7576127b6612721565b5b602082029050602081019050919050565b60006127db6127d68461279c565b612781565b905080838252602082019050602084028301858111156127fe576127fd6125ef565b5b835b81811015612827578061281388826123c3565b845260208401935050602081019050612800565b5050509392505050565b600082601f830112612846576128456125e5565b5b81356128568482602086016127c8565b91505092915050565b600080fd5b600067ffffffffffffffff82111561287f5761287e612721565b5b61288882612579565b9050602081019050919050565b82818337600083830152505050565b60006128b76128b284612864565b612781565b9050828152602081018484840111156128d3576128d261285f565b5b6128de848285612895565b509392505050565b600082601f8301126128fb576128fa6125e5565b5b813561290b8482602086016128a4565b91505092915050565b600080600080600060a086880312156129305761292f61233a565b5b600061293e8882890161238d565b955050602061294f8882890161238d565b945050604086013567ffffffffffffffff8111156129705761296f61233f565b5b61297c88828901612831565b935050606086013567ffffffffffffffff81111561299d5761299c61233f565b5b6129a988828901612831565b925050608086013567ffffffffffffffff8111156129ca576129c961233f565b5b6129d6888289016128e6565b9150509295509295909350565b600067ffffffffffffffff8211156129fe576129fd612721565b5b602082029050602081019050919050565b6000612a22612a1d846129e3565b612781565b90508083825260208201905060208402830185811115612a4557612a446125ef565b5b835b81811015612a6e5780612a5a888261238d565b845260208401935050602081019050612a47565b5050509392505050565b600082601f830112612a8d57612a8c6125e5565b5b8135612a9d848260208601612a0f565b91505092915050565b60008060408385031215612abd57612abc61233a565b5b600083013567ffffffffffffffff811115612adb57612ada61233f565b5b612ae785828601612a78565b925050602083013567ffffffffffffffff811115612b0857612b0761233f565b5b612b1485828601612831565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612b53816123a2565b82525050565b6000612b658383612b4a565b60208301905092915050565b6000602082019050919050565b6000612b8982612b1e565b612b938185612b29565b9350612b9e83612b3a565b8060005b83811015612bcf578151612bb68882612b59565b9750612bc183612b71565b925050600181019050612ba2565b5085935050505092915050565b60006020820190508181036000830152612bf68184612b7e565b905092915050565b600067ffffffffffffffff821115612c1957612c18612721565b5b612c2282612579565b9050602081019050919050565b6000612c42612c3d84612bfe565b612781565b905082815260208101848484011115612c5e57612c5d61285f565b5b612c69848285612895565b509392505050565b600082601f830112612c8657612c856125e5565b5b8135612c96848260208601612c2f565b91505092915050565b600060208284031215612cb557612cb461233a565b5b600082013567ffffffffffffffff811115612cd357612cd261233f565b5b612cdf84828501612c71565b91505092915050565b612cf181612364565b82525050565b6000602082019050612d0c6000830184612ce8565b92915050565b612d1b816124c7565b8114612d2657600080fd5b50565b600081359050612d3881612d12565b92915050565b60008060408385031215612d5557612d5461233a565b5b6000612d638582860161238d565b9250506020612d7485828601612d29565b9150509250929050565b60008060408385031215612d9557612d9461233a565b5b6000612da38582860161238d565b9250506020612db48582860161238d565b9150509250929050565b600080600080600060a08688031215612dda57612dd961233a565b5b6000612de88882890161238d565b9550506020612df98882890161238d565b9450506040612e0a888289016123c3565b9350506060612e1b888289016123c3565b925050608086013567ffffffffffffffff811115612e3c57612e3b61233f565b5b612e48888289016128e6565b9150509295509295909350565b600060208284031215612e6b57612e6a61233a565b5b6000612e798482850161238d565b91505092915050565b7f455243313135353a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b6000612ede602b83612535565b9150612ee982612e82565b604082019050919050565b60006020820190508181036000830152612f0d81612ed1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f5b57607f821691505b60208210811415612f6f57612f6e612f14565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b60008154612fa281612f43565b612fac8186612f75565b94506001821660008114612fc75760018114612fd85761300b565b60ff1983168652818601935061300b565b612fe185612f80565b60005b8381101561300357815481890152600182019150602081019050612fe4565b838801955050505b50505092915050565b600061301f8261252a565b6130298185612f75565b9350613039818560208601612546565b80840191505092915050565b60006130518285612f95565b915061305d8284613014565b91508190509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061309f602083612535565b91506130aa82613069565b602082019050919050565b600060208201905081810360008301526130ce81613092565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061313e826123a2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561317157613170613104565b5b600182019050919050565b7f455243313135353a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b60006131d8603283612535565b91506131e38261317c565b604082019050919050565b60006020820190508181036000830152613207816131cb565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b600061326a602983612535565b91506132758261320e565b604082019050919050565b600060208201905081810360008301526132998161325d565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006132fc602983612535565b9150613307826132a0565b604082019050919050565b6000602082019050818103600083015261332b816132ef565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f74206f776e6572206e6f7260008201527f20617070726f7665640000000000000000000000000000000000000000000000602082015250565b600061338e602983612535565b915061339982613332565b604082019050919050565b600060208201905081810360008301526133bd81613381565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613420602683612535565b915061342b826133c4565b604082019050919050565b6000602082019050818103600083015261344f81613413565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613490826123a2565b915061349b836123a2565b9250826134ab576134aa613456565b5b828204905092915050565b60006134c1826123a2565b91506134cc836123a2565b9250828210156134df576134de613104565b5b828203905092915050565b60006134f5826123a2565b9150613500836123a2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561353957613538613104565b5b828202905092915050565b600060ff82169050919050565b600061355c82613544565b915061356783613544565b92508260ff0382111561357d5761357c613104565b5b828201905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006135e4602183612535565b91506135ef82613588565b604082019050919050565b60006020820190508181036000830152613613816135d7565b9050919050565b6000613625826123a2565b9150613630836123a2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561366557613664613104565b5b828201905092915050565b60006040820190506136856000830185612418565b6136926020830184612418565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b60006136f5602883612535565b915061370082613699565b604082019050919050565b60006020820190508181036000830152613724816136e8565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613787602583612535565b91506137928261372b565b604082019050919050565b600060208201905081810360008301526137b68161377a565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613819602a83612535565b9150613824826137bd565b604082019050919050565b600060208201905081810360008301526138488161380c565b9050919050565b600060408201905081810360008301526138698185612b7e565b9050818103602083015261387d8184612b7e565b90509392505050565b600081519050919050565b600082825260208201905092915050565b60006138ad82613886565b6138b78185613891565b93506138c7818560208601612546565b6138d081612579565b840191505092915050565b600060a0820190506138f06000830188612ce8565b6138fd6020830187612ce8565b61390a6040830186612418565b6139176060830185612418565b818103608083015261392981846138a2565b90509695505050505050565b6000815190506139448161246e565b92915050565b6000602082840312156139605761395f61233a565b5b600061396e84828501613935565b91505092915050565b60008160e01c9050919050565b600060033d11156139a35760046000803e6139a0600051613977565b90505b90565b600060443d10156139b657613a39565b6139be612330565b60043d036004823e80513d602482011167ffffffffffffffff821117156139e6575050613a39565b808201805167ffffffffffffffff811115613a045750505050613a39565b80602083010160043d038501811115613a21575050505050613a39565b613a3082602001850186612750565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613a98603483612535565b9150613aa382613a3c565b604082019050919050565b60006020820190508181036000830152613ac781613a8b565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b6000613b2a602883612535565b9150613b3582613ace565b604082019050919050565b60006020820190508181036000830152613b5981613b1d565b9050919050565b600060a082019050613b756000830188612ce8565b613b826020830187612ce8565b8181036040830152613b948186612b7e565b90508181036060830152613ba88185612b7e565b90508181036080830152613bbc81846138a2565b9050969550505050505056fea26469706673582212202425069e96568cdc33fb229b9db3ca47c0c119c3acaaed4b24636464ca29b43564736f6c63430008090033

Deployed Bytecode Sourcemap

162:2534:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2122:231:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1145:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1699:145:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1301:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4217:442:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;885:205:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2586:107;;;:::i;:::-;;2519:524:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2482:99:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1511:86;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1650:94:9;;;:::i;:::-;;528:22:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;999:87:9;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1600:94:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3116:311:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;310:26:0;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2373:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;554:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1093:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1847:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3499:168:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;677:205:0;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3739:401:3;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1899:192:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2122:231:3;2208:7;2255:1;2236:21;;:7;:21;;;;2228:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;2323:9;:13;2333:2;2323:13;;;;;;;;;;;:22;2337:7;2323:22;;;;;;;;;;;;;;;;2316:29;;2122:231;;;;:::o;1145:310::-;1247:4;1299:26;1284:41;;;:11;:41;;;;:110;;;;1357:37;1342:52;;;:11;:52;;;;1284:110;:163;;;;1411:36;1435:11;1411:23;:36::i;:::-;1284:163;1264:183;;1145:310;;;:::o;1699:145:0:-;1759:13;1810:8;1820:17;1829:7;1820:8;:17::i;:::-;1793:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;1779:60;;1699:145;;;:::o;1301:205::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1403:9:0::1;1399:100;1422:4;;:11;;1418:1;:15;1399:100;;;1455:32;1461:4;;1466:1;1461:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;453:1;1476:3;;1480:1;1476:6;;;;;;;:::i;:::-;;;;;;;;1455:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;1435:3;;;;;:::i;:::-;;;;1399:100;;;;1301:205:::0;;;;:::o;4217:442:3:-;4458:12;:10;:12::i;:::-;4450:20;;:4;:20;;;:60;;;;4474:36;4491:4;4497:12;:10;:12::i;:::-;4474:16;:36::i;:::-;4450:60;4428:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;4599:52;4622:4;4628:2;4632:3;4637:7;4646:4;4599:22;:52::i;:::-;4217:442;;;;;:::o;885:205:0:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;987:9:0::1;983:100;1006:4;;:11;;1002:1;:15;983:100;;;1039:32;1045:4;;1050:1;1045:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;395:1;1060:3;;1064:1;1060:6;;;;;;;:::i;:::-;;;;;;;;1039:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;1019:3;;;;;:::i;:::-;;;;983:100;;;;885:205:::0;;;;:::o;2586:107::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2645:10:0::1;2637:28;;:51;2666:21;2637:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;2586:107::o:0;2519:524:3:-;2675:16;2736:3;:10;2717:8;:15;:29;2709:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;2805:30;2852:8;:15;2838:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2805:63;;2886:9;2881:122;2905:8;:15;2901:1;:19;2881:122;;;2961:30;2971:8;2980:1;2971:11;;;;;;;;:::i;:::-;;;;;;;;2984:3;2988:1;2984:6;;;;;;;;:::i;:::-;;;;;;;;2961:9;:30::i;:::-;2942:13;2956:1;2942:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;2922:3;;;;:::i;:::-;;;2881:122;;;;3022:13;3015:20;;;2519:524;;;;:::o;2482:99:0:-;2539:4;2575:1;2557:15;2569:2;2557:11;:15::i;:::-;:19;2550:26;;2482:99;;;:::o;1511:86::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1586:6:0::1;1575:8;:17;;;;;;;;;;;;:::i;:::-;;1511:86:::0;:::o;1650:94:9:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1715:21:::1;1733:1;1715:9;:21::i;:::-;1650:94::o:0;528:22:0:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;999:87:9:-;1045:7;1072:6;;;;;;;;;;;1065:13;;999:87;:::o;1600:94:0:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1683:6:0::1;1668:12;:21;;;;;;;;;;;;:::i;:::-;;1600:94:::0;:::o;3116:311:3:-;3235:8;3219:24;;:12;:10;:12::i;:::-;:24;;;;3211:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;3347:8;3302:18;:32;3321:12;:10;:12::i;:::-;3302:32;;;;;;;;;;;;;;;:42;3335:8;3302:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;3400:8;3371:48;;3386:12;:10;:12::i;:::-;3371:48;;;3410:8;3371:48;;;;;;:::i;:::-;;;;;;;;3116:311;;:::o;310:26:0:-;;;;:::o;2373:104::-;2435:7;2456:12;:16;2469:2;2456:16;;;;;;;;;;;;2449:23;;2373:104;;;:::o;554:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1093:205::-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1195:9:0::1;1191:100;1214:4;;:11;;1210:1;:15;1191:100;;;1247:32;1253:4;;1258:1;1253:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;424:1;1268:3;;1272:1;1268:6;;;;;;;:::i;:::-;;;;;;;;1247:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;1227:3;;;;;:::i;:::-;;;;1191:100;;;;1093:205:::0;;;;:::o;1847:88::-;1891:13;1918:12;1911:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1847:88;:::o;3499:168:3:-;3598:4;3622:18;:27;3641:7;3622:27;;;;;;;;;;;;;;;:37;3650:8;3622:37;;;;;;;;;;;;;;;;;;;;;;;;;3615:44;;3499:168;;;;:::o;677:205:0:-;1230:12:9;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;779:9:0::1;775:100;798:4;;:11;;794:1;:15;775:100;;;831:32;837:4;;842:1;837:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;366:1;852:3;;856:1;852:6;;;;;;;:::i;:::-;;;;;;;;831:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;811:3;;;;;:::i;:::-;;;;775:100;;;;677:205:::0;;;;:::o;3739:401:3:-;3955:12;:10;:12::i;:::-;3947:20;;:4;:20;;;:60;;;;3971:36;3988:4;3994:12;:10;:12::i;:::-;3971:16;:36::i;:::-;3947:60;3925:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;4087:45;4105:4;4111:2;4115;4119:6;4127:4;4087:17;:45::i;:::-;3739:401;;;;;:::o;1899:192:9:-;1230:12;:10;:12::i;:::-;1219:23;;:7;:5;:7::i;:::-;:23;;;1211:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2008:1:::1;1988:22;;:8;:22;;;;1980:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2064:19;2074:8;2064:9;:19::i;:::-;1899:192:::0;:::o;787:157:4:-;872:4;911:25;896:40;;;:11;:40;;;;889:47;;787:157;;;:::o;1938:430:0:-;1991:27;2035:1;2029:2;:7;2025:26;;;2039:10;;;;;;;;;;;;;;;;;;;;;2025:26;2056:9;2068:2;2056:14;;2076:11;2092:32;2104:1;2099;:6;2092:32;;2108:5;;;;;:::i;:::-;;;;2120:2;2115:7;;;;;:::i;:::-;;;2092:32;;;2129:17;2159:3;2149:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2129:34;;2169:9;2181:3;2169:15;;2189:151;2202:1;2196:2;:7;2189:151;;2219:1;2215;:5;;;;:::i;:::-;2211:9;;2226:10;2268:2;2262;2257;:7;;;;:::i;:::-;2256:14;;;;:::i;:::-;2251:2;:19;;;;:::i;:::-;2240:2;:31;;;;:::i;:::-;2226:46;;2278:9;2297:4;2290:12;;2278:24;;2318:2;2308:4;2313:1;2308:7;;;;;;;;:::i;:::-;;;;;:12;;;;;;;;;;;2332:2;2326:8;;;;;:::i;:::-;;;2205:135;;2189:151;;;2358:4;2344:19;;;;;;1938:430;;;;:::o;601:98:2:-;654:7;681:10;674:17;;601:98;:::o;8708:599:3:-;8885:1;8866:21;;:7;:21;;;;8858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;8938:16;8957:12;:10;:12::i;:::-;8938:31;;8982:107;9003:8;9021:1;9025:7;9034:21;9052:2;9034:17;:21::i;:::-;9057:25;9075:6;9057:17;:25::i;:::-;9084:4;8982:20;:107::i;:::-;9128:6;9102:9;:13;9112:2;9102:13;;;;;;;;;;;:22;9116:7;9102:22;;;;;;;;;;;;;;;;:32;;;;;;;:::i;:::-;;;;;;;;9187:7;9150:57;;9183:1;9150:57;;9165:8;9150:57;;;9196:2;9200:6;9150:57;;;;;;;:::i;:::-;;;;;;;;9220:79;9251:8;9269:1;9273:7;9282:2;9286:6;9294:4;9220:30;:79::i;:::-;8847:460;8708:599;;;;:::o;6301:1074::-;6528:7;:14;6514:3;:10;:28;6506:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;6620:1;6606:16;;:2;:16;;;;6598:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;6677:16;6696:12;:10;:12::i;:::-;6677:31;;6721:60;6742:8;6752:4;6758:2;6762:3;6767:7;6776:4;6721:20;:60::i;:::-;6799:9;6794:421;6818:3;:10;6814:1;:14;6794:421;;;6850:10;6863:3;6867:1;6863:6;;;;;;;;:::i;:::-;;;;;;;;6850:19;;6884:14;6901:7;6909:1;6901:10;;;;;;;;:::i;:::-;;;;;;;;6884:27;;6928:19;6950:9;:13;6960:2;6950:13;;;;;;;;;;;:19;6964:4;6950:19;;;;;;;;;;;;;;;;6928:41;;7007:6;6992:11;:21;;6984:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;7140:6;7126:11;:20;7104:9;:13;7114:2;7104:13;;;;;;;;;;;:19;7118:4;7104:19;;;;;;;;;;;;;;;:42;;;;7197:6;7176:9;:13;7186:2;7176:13;;;;;;;;;;;:17;7190:2;7176:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;6835:380;;;6830:3;;;;:::i;:::-;;;6794:421;;;;7262:2;7232:47;;7256:4;7232:47;;7246:8;7232:47;;;7266:3;7271:7;7232:47;;;;;;;:::i;:::-;;;;;;;;7292:75;7328:8;7338:4;7344:2;7348:3;7353:7;7362:4;7292:35;:75::i;:::-;6495:880;6301:1074;;;;;:::o;2099:173:9:-;2155:16;2174:6;;;;;;;;;;;2155:25;;2200:8;2191:6;;:17;;;;;;;;;;;;;;;;;;2255:8;2224:40;;2245:8;2224:40;;;;;;;;;;;;2144:128;2099:173;:::o;5123:820:3:-;5325:1;5311:16;;:2;:16;;;;5303:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;5382:16;5401:12;:10;:12::i;:::-;5382:31;;5426:96;5447:8;5457:4;5463:2;5467:21;5485:2;5467:17;:21::i;:::-;5490:25;5508:6;5490:17;:25::i;:::-;5517:4;5426:20;:96::i;:::-;5535:19;5557:9;:13;5567:2;5557:13;;;;;;;;;;;:19;5571:4;5557:19;;;;;;;;;;;;;;;;5535:41;;5610:6;5595:11;:21;;5587:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5735:6;5721:11;:20;5699:9;:13;5709:2;5699:13;;;;;;;;;;;:19;5713:4;5699:19;;;;;;;;;;;;;;;:42;;;;5784:6;5763:9;:13;5773:2;5763:13;;;;;;;;;;;:17;5777:2;5763:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;5839:2;5808:46;;5833:4;5808:46;;5823:8;5808:46;;;5843:2;5847:6;5808:46;;;;;;;:::i;:::-;;;;;;;;5867:68;5898:8;5908:4;5914:2;5918;5922:6;5930:4;5867:30;:68::i;:::-;5292:651;;5123:820;;;;;:::o;15219:198::-;15285:16;15314:22;15353:1;15339:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15314:41;;15377:7;15366:5;15372:1;15366:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;15404:5;15397:12;;;15219:198;;;:::o;13409:221::-;;;;;;;:::o;13638:748::-;13853:15;:2;:13;;;:15::i;:::-;13849:530;;;13906:2;13889:38;;;13928:8;13938:4;13944:2;13948:6;13956:4;13889:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;13885:483;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;14241:6;14234:14;;;;;;;;;;;:::i;:::-;;;;;;;;13885:483;;;14290:62;;;;;;;;;;:::i;:::-;;;;;;;;13885:483;14023:47;;;14011:59;;;:8;:59;;;;14007:158;;14095:50;;;;;;;;;;:::i;:::-;;;;;;;;14007:158;13962:218;13849:530;13638:748;;;;;;:::o;14394:817::-;14634:15;:2;:13;;;:15::i;:::-;14630:574;;;14687:2;14670:43;;;14714:8;14724:4;14730:3;14735:7;14744:4;14670:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;14666:527;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;15066:6;15059:14;;;;;;;;;;;:::i;:::-;;;;;;;;14666:527;;;15115:62;;;;;;;;;;:::i;:::-;;;;;;;;14666:527;14843:52;;;14831:64;;;:8;:64;;;;14827:163;;14920:50;;;;;;;;;;:::i;:::-;;;;;;;;14827:163;14750:255;14630:574;14394:817;;;;;;:::o;743:387:1:-;803:4;1011:12;1078:7;1066:20;1058:28;;1121:1;1114:4;:8;1107:15;;;743:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:11:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:329::-;3272:6;3321:2;3309:9;3300:7;3296:23;3292:32;3289:119;;;3327:79;;:::i;:::-;3289:119;3447:1;3472:53;3517:7;3508:6;3497:9;3493:22;3472:53;:::i;:::-;3462:63;;3418:117;3213:329;;;;:::o;3548:99::-;3600:6;3634:5;3628:12;3618:22;;3548:99;;;:::o;3653:169::-;3737:11;3771:6;3766:3;3759:19;3811:4;3806:3;3802:14;3787:29;;3653:169;;;;:::o;3828:307::-;3896:1;3906:113;3920:6;3917:1;3914:13;3906:113;;;4005:1;4000:3;3996:11;3990:18;3986:1;3981:3;3977:11;3970:39;3942:2;3939:1;3935:10;3930:15;;3906:113;;;4037:6;4034:1;4031:13;4028:101;;;4117:1;4108:6;4103:3;4099:16;4092:27;4028:101;3877:258;3828:307;;;:::o;4141:102::-;4182:6;4233:2;4229:7;4224:2;4217:5;4213:14;4209:28;4199:38;;4141:102;;;:::o;4249:364::-;4337:3;4365:39;4398:5;4365:39;:::i;:::-;4420:71;4484:6;4479:3;4420:71;:::i;:::-;4413:78;;4500:52;4545:6;4540:3;4533:4;4526:5;4522:16;4500:52;:::i;:::-;4577:29;4599:6;4577:29;:::i;:::-;4572:3;4568:39;4561:46;;4341:272;4249:364;;;;:::o;4619:313::-;4732:4;4770:2;4759:9;4755:18;4747:26;;4819:9;4813:4;4809:20;4805:1;4794:9;4790:17;4783:47;4847:78;4920:4;4911:6;4847:78;:::i;:::-;4839:86;;4619:313;;;;:::o;4938:117::-;5047:1;5044;5037:12;5061:117;5170:1;5167;5160:12;5184:117;5293:1;5290;5283:12;5324:568;5397:8;5407:6;5457:3;5450:4;5442:6;5438:17;5434:27;5424:122;;5465:79;;:::i;:::-;5424:122;5578:6;5565:20;5555:30;;5608:18;5600:6;5597:30;5594:117;;;5630:79;;:::i;:::-;5594:117;5744:4;5736:6;5732:17;5720:29;;5798:3;5790:4;5782:6;5778:17;5768:8;5764:32;5761:41;5758:128;;;5805:79;;:::i;:::-;5758:128;5324:568;;;;;:::o;5915:::-;5988:8;5998:6;6048:3;6041:4;6033:6;6029:17;6025:27;6015:122;;6056:79;;:::i;:::-;6015:122;6169:6;6156:20;6146:30;;6199:18;6191:6;6188:30;6185:117;;;6221:79;;:::i;:::-;6185:117;6335:4;6327:6;6323:17;6311:29;;6389:3;6381:4;6373:6;6369:17;6359:8;6355:32;6352:41;6349:128;;;6396:79;;:::i;:::-;6349:128;5915:568;;;;;:::o;6489:934::-;6611:6;6619;6627;6635;6684:2;6672:9;6663:7;6659:23;6655:32;6652:119;;;6690:79;;:::i;:::-;6652:119;6838:1;6827:9;6823:17;6810:31;6868:18;6860:6;6857:30;6854:117;;;6890:79;;:::i;:::-;6854:117;7003:80;7075:7;7066:6;7055:9;7051:22;7003:80;:::i;:::-;6985:98;;;;6781:312;7160:2;7149:9;7145:18;7132:32;7191:18;7183:6;7180:30;7177:117;;;7213:79;;:::i;:::-;7177:117;7326:80;7398:7;7389:6;7378:9;7374:22;7326:80;:::i;:::-;7308:98;;;;7103:313;6489:934;;;;;;;:::o;7429:180::-;7477:77;7474:1;7467:88;7574:4;7571:1;7564:15;7598:4;7595:1;7588:15;7615:281;7698:27;7720:4;7698:27;:::i;:::-;7690:6;7686:40;7828:6;7816:10;7813:22;7792:18;7780:10;7777:34;7774:62;7771:88;;;7839:18;;:::i;:::-;7771:88;7879:10;7875:2;7868:22;7658:238;7615:281;;:::o;7902:129::-;7936:6;7963:20;;:::i;:::-;7953:30;;7992:33;8020:4;8012:6;7992:33;:::i;:::-;7902:129;;;:::o;8037:311::-;8114:4;8204:18;8196:6;8193:30;8190:56;;;8226:18;;:::i;:::-;8190:56;8276:4;8268:6;8264:17;8256:25;;8336:4;8330;8326:15;8318:23;;8037:311;;;:::o;8371:710::-;8467:5;8492:81;8508:64;8565:6;8508:64;:::i;:::-;8492:81;:::i;:::-;8483:90;;8593:5;8622:6;8615:5;8608:21;8656:4;8649:5;8645:16;8638:23;;8709:4;8701:6;8697:17;8689:6;8685:30;8738:3;8730:6;8727:15;8724:122;;;8757:79;;:::i;:::-;8724:122;8872:6;8855:220;8889:6;8884:3;8881:15;8855:220;;;8964:3;8993:37;9026:3;9014:10;8993:37;:::i;:::-;8988:3;8981:50;9060:4;9055:3;9051:14;9044:21;;8931:144;8915:4;8910:3;8906:14;8899:21;;8855:220;;;8859:21;8473:608;;8371:710;;;;;:::o;9104:370::-;9175:5;9224:3;9217:4;9209:6;9205:17;9201:27;9191:122;;9232:79;;:::i;:::-;9191:122;9349:6;9336:20;9374:94;9464:3;9456:6;9449:4;9441:6;9437:17;9374:94;:::i;:::-;9365:103;;9181:293;9104:370;;;;:::o;9480:117::-;9589:1;9586;9579:12;9603:307;9664:4;9754:18;9746:6;9743:30;9740:56;;;9776:18;;:::i;:::-;9740:56;9814:29;9836:6;9814:29;:::i;:::-;9806:37;;9898:4;9892;9888:15;9880:23;;9603:307;;;:::o;9916:154::-;10000:6;9995:3;9990;9977:30;10062:1;10053:6;10048:3;10044:16;10037:27;9916:154;;;:::o;10076:410::-;10153:5;10178:65;10194:48;10235:6;10194:48;:::i;:::-;10178:65;:::i;:::-;10169:74;;10266:6;10259:5;10252:21;10304:4;10297:5;10293:16;10342:3;10333:6;10328:3;10324:16;10321:25;10318:112;;;10349:79;;:::i;:::-;10318:112;10439:41;10473:6;10468:3;10463;10439:41;:::i;:::-;10159:327;10076:410;;;;;:::o;10505:338::-;10560:5;10609:3;10602:4;10594:6;10590:17;10586:27;10576:122;;10617:79;;:::i;:::-;10576:122;10734:6;10721:20;10759:78;10833:3;10825:6;10818:4;10810:6;10806:17;10759:78;:::i;:::-;10750:87;;10566:277;10505:338;;;;:::o;10849:1509::-;11003:6;11011;11019;11027;11035;11084:3;11072:9;11063:7;11059:23;11055:33;11052:120;;;11091:79;;:::i;:::-;11052:120;11211:1;11236:53;11281:7;11272:6;11261:9;11257:22;11236:53;:::i;:::-;11226:63;;11182:117;11338:2;11364:53;11409:7;11400:6;11389:9;11385:22;11364:53;:::i;:::-;11354:63;;11309:118;11494:2;11483:9;11479:18;11466:32;11525:18;11517:6;11514:30;11511:117;;;11547:79;;:::i;:::-;11511:117;11652:78;11722:7;11713:6;11702:9;11698:22;11652:78;:::i;:::-;11642:88;;11437:303;11807:2;11796:9;11792:18;11779:32;11838:18;11830:6;11827:30;11824:117;;;11860:79;;:::i;:::-;11824:117;11965:78;12035:7;12026:6;12015:9;12011:22;11965:78;:::i;:::-;11955:88;;11750:303;12120:3;12109:9;12105:19;12092:33;12152:18;12144:6;12141:30;12138:117;;;12174:79;;:::i;:::-;12138:117;12279:62;12333:7;12324:6;12313:9;12309:22;12279:62;:::i;:::-;12269:72;;12063:288;10849:1509;;;;;;;;:::o;12364:311::-;12441:4;12531:18;12523:6;12520:30;12517:56;;;12553:18;;:::i;:::-;12517:56;12603:4;12595:6;12591:17;12583:25;;12663:4;12657;12653:15;12645:23;;12364:311;;;:::o;12698:710::-;12794:5;12819:81;12835:64;12892:6;12835:64;:::i;:::-;12819:81;:::i;:::-;12810:90;;12920:5;12949:6;12942:5;12935:21;12983:4;12976:5;12972:16;12965:23;;13036:4;13028:6;13024:17;13016:6;13012:30;13065:3;13057:6;13054:15;13051:122;;;13084:79;;:::i;:::-;13051:122;13199:6;13182:220;13216:6;13211:3;13208:15;13182:220;;;13291:3;13320:37;13353:3;13341:10;13320:37;:::i;:::-;13315:3;13308:50;13387:4;13382:3;13378:14;13371:21;;13258:144;13242:4;13237:3;13233:14;13226:21;;13182:220;;;13186:21;12800:608;;12698:710;;;;;:::o;13431:370::-;13502:5;13551:3;13544:4;13536:6;13532:17;13528:27;13518:122;;13559:79;;:::i;:::-;13518:122;13676:6;13663:20;13701:94;13791:3;13783:6;13776:4;13768:6;13764:17;13701:94;:::i;:::-;13692:103;;13508:293;13431:370;;;;:::o;13807:894::-;13925:6;13933;13982:2;13970:9;13961:7;13957:23;13953:32;13950:119;;;13988:79;;:::i;:::-;13950:119;14136:1;14125:9;14121:17;14108:31;14166:18;14158:6;14155:30;14152:117;;;14188:79;;:::i;:::-;14152:117;14293:78;14363:7;14354:6;14343:9;14339:22;14293:78;:::i;:::-;14283:88;;14079:302;14448:2;14437:9;14433:18;14420:32;14479:18;14471:6;14468:30;14465:117;;;14501:79;;:::i;:::-;14465:117;14606:78;14676:7;14667:6;14656:9;14652:22;14606:78;:::i;:::-;14596:88;;14391:303;13807:894;;;;;:::o;14707:114::-;14774:6;14808:5;14802:12;14792:22;;14707:114;;;:::o;14827:184::-;14926:11;14960:6;14955:3;14948:19;15000:4;14995:3;14991:14;14976:29;;14827:184;;;;:::o;15017:132::-;15084:4;15107:3;15099:11;;15137:4;15132:3;15128:14;15120:22;;15017:132;;;:::o;15155:108::-;15232:24;15250:5;15232:24;:::i;:::-;15227:3;15220:37;15155:108;;:::o;15269:179::-;15338:10;15359:46;15401:3;15393:6;15359:46;:::i;:::-;15437:4;15432:3;15428:14;15414:28;;15269:179;;;;:::o;15454:113::-;15524:4;15556;15551:3;15547:14;15539:22;;15454:113;;;:::o;15603:732::-;15722:3;15751:54;15799:5;15751:54;:::i;:::-;15821:86;15900:6;15895:3;15821:86;:::i;:::-;15814:93;;15931:56;15981:5;15931:56;:::i;:::-;16010:7;16041:1;16026:284;16051:6;16048:1;16045:13;16026:284;;;16127:6;16121:13;16154:63;16213:3;16198:13;16154:63;:::i;:::-;16147:70;;16240:60;16293:6;16240:60;:::i;:::-;16230:70;;16086:224;16073:1;16070;16066:9;16061:14;;16026:284;;;16030:14;16326:3;16319:10;;15727:608;;;15603:732;;;;:::o;16341:373::-;16484:4;16522:2;16511:9;16507:18;16499:26;;16571:9;16565:4;16561:20;16557:1;16546:9;16542:17;16535:47;16599:108;16702:4;16693:6;16599:108;:::i;:::-;16591:116;;16341:373;;;;:::o;16720:308::-;16782:4;16872:18;16864:6;16861:30;16858:56;;;16894:18;;:::i;:::-;16858:56;16932:29;16954:6;16932:29;:::i;:::-;16924:37;;17016:4;17010;17006:15;16998:23;;16720:308;;;:::o;17034:412::-;17112:5;17137:66;17153:49;17195:6;17153:49;:::i;:::-;17137:66;:::i;:::-;17128:75;;17226:6;17219:5;17212:21;17264:4;17257:5;17253:16;17302:3;17293:6;17288:3;17284:16;17281:25;17278:112;;;17309:79;;:::i;:::-;17278:112;17399:41;17433:6;17428:3;17423;17399:41;:::i;:::-;17118:328;17034:412;;;;;:::o;17466:340::-;17522:5;17571:3;17564:4;17556:6;17552:17;17548:27;17538:122;;17579:79;;:::i;:::-;17538:122;17696:6;17683:20;17721:79;17796:3;17788:6;17781:4;17773:6;17769:17;17721:79;:::i;:::-;17712:88;;17528:278;17466:340;;;;:::o;17812:509::-;17881:6;17930:2;17918:9;17909:7;17905:23;17901:32;17898:119;;;17936:79;;:::i;:::-;17898:119;18084:1;18073:9;18069:17;18056:31;18114:18;18106:6;18103:30;18100:117;;;18136:79;;:::i;:::-;18100:117;18241:63;18296:7;18287:6;18276:9;18272:22;18241:63;:::i;:::-;18231:73;;18027:287;17812:509;;;;:::o;18327:118::-;18414:24;18432:5;18414:24;:::i;:::-;18409:3;18402:37;18327:118;;:::o;18451:222::-;18544:4;18582:2;18571:9;18567:18;18559:26;;18595:71;18663:1;18652:9;18648:17;18639:6;18595:71;:::i;:::-;18451:222;;;;:::o;18679:116::-;18749:21;18764:5;18749:21;:::i;:::-;18742:5;18739:32;18729:60;;18785:1;18782;18775:12;18729:60;18679:116;:::o;18801:133::-;18844:5;18882:6;18869:20;18860:29;;18898:30;18922:5;18898:30;:::i;:::-;18801:133;;;;:::o;18940:468::-;19005:6;19013;19062:2;19050:9;19041:7;19037:23;19033:32;19030:119;;;19068:79;;:::i;:::-;19030:119;19188:1;19213:53;19258:7;19249:6;19238:9;19234:22;19213:53;:::i;:::-;19203:63;;19159:117;19315:2;19341:50;19383:7;19374:6;19363:9;19359:22;19341:50;:::i;:::-;19331:60;;19286:115;18940:468;;;;;:::o;19414:474::-;19482:6;19490;19539:2;19527:9;19518:7;19514:23;19510:32;19507:119;;;19545:79;;:::i;:::-;19507:119;19665:1;19690:53;19735:7;19726:6;19715:9;19711:22;19690:53;:::i;:::-;19680:63;;19636:117;19792:2;19818:53;19863:7;19854:6;19843:9;19839:22;19818:53;:::i;:::-;19808:63;;19763:118;19414:474;;;;;:::o;19894:1089::-;19998:6;20006;20014;20022;20030;20079:3;20067:9;20058:7;20054:23;20050:33;20047:120;;;20086:79;;:::i;:::-;20047:120;20206:1;20231:53;20276:7;20267:6;20256:9;20252:22;20231:53;:::i;:::-;20221:63;;20177:117;20333:2;20359:53;20404:7;20395:6;20384:9;20380:22;20359:53;:::i;:::-;20349:63;;20304:118;20461:2;20487:53;20532:7;20523:6;20512:9;20508:22;20487:53;:::i;:::-;20477:63;;20432:118;20589:2;20615:53;20660:7;20651:6;20640:9;20636:22;20615:53;:::i;:::-;20605:63;;20560:118;20745:3;20734:9;20730:19;20717:33;20777:18;20769:6;20766:30;20763:117;;;20799:79;;:::i;:::-;20763:117;20904:62;20958:7;20949:6;20938:9;20934:22;20904:62;:::i;:::-;20894:72;;20688:288;19894:1089;;;;;;;;:::o;20989:329::-;21048:6;21097:2;21085:9;21076:7;21072:23;21068:32;21065:119;;;21103:79;;:::i;:::-;21065:119;21223:1;21248:53;21293:7;21284:6;21273:9;21269:22;21248:53;:::i;:::-;21238:63;;21194:117;20989:329;;;;:::o;21324:230::-;21464:34;21460:1;21452:6;21448:14;21441:58;21533:13;21528:2;21520:6;21516:15;21509:38;21324:230;:::o;21560:366::-;21702:3;21723:67;21787:2;21782:3;21723:67;:::i;:::-;21716:74;;21799:93;21888:3;21799:93;:::i;:::-;21917:2;21912:3;21908:12;21901:19;;21560:366;;;:::o;21932:419::-;22098:4;22136:2;22125:9;22121:18;22113:26;;22185:9;22179:4;22175:20;22171:1;22160:9;22156:17;22149:47;22213:131;22339:4;22213:131;:::i;:::-;22205:139;;21932:419;;;:::o;22357:180::-;22405:77;22402:1;22395:88;22502:4;22499:1;22492:15;22526:4;22523:1;22516:15;22543:320;22587:6;22624:1;22618:4;22614:12;22604:22;;22671:1;22665:4;22661:12;22692:18;22682:81;;22748:4;22740:6;22736:17;22726:27;;22682:81;22810:2;22802:6;22799:14;22779:18;22776:38;22773:84;;;22829:18;;:::i;:::-;22773:84;22594:269;22543:320;;;:::o;22869:148::-;22971:11;23008:3;22993:18;;22869:148;;;;:::o;23023:141::-;23072:4;23095:3;23087:11;;23118:3;23115:1;23108:14;23152:4;23149:1;23139:18;23131:26;;23023:141;;;:::o;23194:845::-;23297:3;23334:5;23328:12;23363:36;23389:9;23363:36;:::i;:::-;23415:89;23497:6;23492:3;23415:89;:::i;:::-;23408:96;;23535:1;23524:9;23520:17;23551:1;23546:137;;;;23697:1;23692:341;;;;23513:520;;23546:137;23630:4;23626:9;23615;23611:25;23606:3;23599:38;23666:6;23661:3;23657:16;23650:23;;23546:137;;23692:341;23759:38;23791:5;23759:38;:::i;:::-;23819:1;23833:154;23847:6;23844:1;23841:13;23833:154;;;23921:7;23915:14;23911:1;23906:3;23902:11;23895:35;23971:1;23962:7;23958:15;23947:26;;23869:4;23866:1;23862:12;23857:17;;23833:154;;;24016:6;24011:3;24007:16;24000:23;;23699:334;;23513:520;;23301:738;;23194:845;;;;:::o;24045:377::-;24151:3;24179:39;24212:5;24179:39;:::i;:::-;24234:89;24316:6;24311:3;24234:89;:::i;:::-;24227:96;;24332:52;24377:6;24372:3;24365:4;24358:5;24354:16;24332:52;:::i;:::-;24409:6;24404:3;24400:16;24393:23;;24155:267;24045:377;;;;:::o;24428:429::-;24605:3;24627:92;24715:3;24706:6;24627:92;:::i;:::-;24620:99;;24736:95;24827:3;24818:6;24736:95;:::i;:::-;24729:102;;24848:3;24841:10;;24428:429;;;;;:::o;24863:182::-;25003:34;24999:1;24991:6;24987:14;24980:58;24863:182;:::o;25051:366::-;25193:3;25214:67;25278:2;25273:3;25214:67;:::i;:::-;25207:74;;25290:93;25379:3;25290:93;:::i;:::-;25408:2;25403:3;25399:12;25392:19;;25051:366;;;:::o;25423:419::-;25589:4;25627:2;25616:9;25612:18;25604:26;;25676:9;25670:4;25666:20;25662:1;25651:9;25647:17;25640:47;25704:131;25830:4;25704:131;:::i;:::-;25696:139;;25423:419;;;:::o;25848:180::-;25896:77;25893:1;25886:88;25993:4;25990:1;25983:15;26017:4;26014:1;26007:15;26034:180;26082:77;26079:1;26072:88;26179:4;26176:1;26169:15;26203:4;26200:1;26193:15;26220:233;26259:3;26282:24;26300:5;26282:24;:::i;:::-;26273:33;;26328:66;26321:5;26318:77;26315:103;;;26398:18;;:::i;:::-;26315:103;26445:1;26438:5;26434:13;26427:20;;26220:233;;;:::o;26459:237::-;26599:34;26595:1;26587:6;26583:14;26576:58;26668:20;26663:2;26655:6;26651:15;26644:45;26459:237;:::o;26702:366::-;26844:3;26865:67;26929:2;26924:3;26865:67;:::i;:::-;26858:74;;26941:93;27030:3;26941:93;:::i;:::-;27059:2;27054:3;27050:12;27043:19;;26702:366;;;:::o;27074:419::-;27240:4;27278:2;27267:9;27263:18;27255:26;;27327:9;27321:4;27317:20;27313:1;27302:9;27298:17;27291:47;27355:131;27481:4;27355:131;:::i;:::-;27347:139;;27074:419;;;:::o;27499:228::-;27639:34;27635:1;27627:6;27623:14;27616:58;27708:11;27703:2;27695:6;27691:15;27684:36;27499:228;:::o;27733:366::-;27875:3;27896:67;27960:2;27955:3;27896:67;:::i;:::-;27889:74;;27972:93;28061:3;27972:93;:::i;:::-;28090:2;28085:3;28081:12;28074:19;;27733:366;;;:::o;28105:419::-;28271:4;28309:2;28298:9;28294:18;28286:26;;28358:9;28352:4;28348:20;28344:1;28333:9;28329:17;28322:47;28386:131;28512:4;28386:131;:::i;:::-;28378:139;;28105:419;;;:::o;28530:228::-;28670:34;28666:1;28658:6;28654:14;28647:58;28739:11;28734:2;28726:6;28722:15;28715:36;28530:228;:::o;28764:366::-;28906:3;28927:67;28991:2;28986:3;28927:67;:::i;:::-;28920:74;;29003:93;29092:3;29003:93;:::i;:::-;29121:2;29116:3;29112:12;29105:19;;28764:366;;;:::o;29136:419::-;29302:4;29340:2;29329:9;29325:18;29317:26;;29389:9;29383:4;29379:20;29375:1;29364:9;29360:17;29353:47;29417:131;29543:4;29417:131;:::i;:::-;29409:139;;29136:419;;;:::o;29561:228::-;29701:34;29697:1;29689:6;29685:14;29678:58;29770:11;29765:2;29757:6;29753:15;29746:36;29561:228;:::o;29795:366::-;29937:3;29958:67;30022:2;30017:3;29958:67;:::i;:::-;29951:74;;30034:93;30123:3;30034:93;:::i;:::-;30152:2;30147:3;30143:12;30136:19;;29795:366;;;:::o;30167:419::-;30333:4;30371:2;30360:9;30356:18;30348:26;;30420:9;30414:4;30410:20;30406:1;30395:9;30391:17;30384:47;30448:131;30574:4;30448:131;:::i;:::-;30440:139;;30167:419;;;:::o;30592:225::-;30732:34;30728:1;30720:6;30716:14;30709:58;30801:8;30796:2;30788:6;30784:15;30777:33;30592:225;:::o;30823:366::-;30965:3;30986:67;31050:2;31045:3;30986:67;:::i;:::-;30979:74;;31062:93;31151:3;31062:93;:::i;:::-;31180:2;31175:3;31171:12;31164:19;;30823:366;;;:::o;31195:419::-;31361:4;31399:2;31388:9;31384:18;31376:26;;31448:9;31442:4;31438:20;31434:1;31423:9;31419:17;31412:47;31476:131;31602:4;31476:131;:::i;:::-;31468:139;;31195:419;;;:::o;31620:180::-;31668:77;31665:1;31658:88;31765:4;31762:1;31755:15;31789:4;31786:1;31779:15;31806:185;31846:1;31863:20;31881:1;31863:20;:::i;:::-;31858:25;;31897:20;31915:1;31897:20;:::i;:::-;31892:25;;31936:1;31926:35;;31941:18;;:::i;:::-;31926:35;31983:1;31980;31976:9;31971:14;;31806:185;;;;:::o;31997:191::-;32037:4;32057:20;32075:1;32057:20;:::i;:::-;32052:25;;32091:20;32109:1;32091:20;:::i;:::-;32086:25;;32130:1;32127;32124:8;32121:34;;;32135:18;;:::i;:::-;32121:34;32180:1;32177;32173:9;32165:17;;31997:191;;;;:::o;32194:348::-;32234:7;32257:20;32275:1;32257:20;:::i;:::-;32252:25;;32291:20;32309:1;32291:20;:::i;:::-;32286:25;;32479:1;32411:66;32407:74;32404:1;32401:81;32396:1;32389:9;32382:17;32378:105;32375:131;;;32486:18;;:::i;:::-;32375:131;32534:1;32531;32527:9;32516:20;;32194:348;;;;:::o;32548:86::-;32583:7;32623:4;32616:5;32612:16;32601:27;;32548:86;;;:::o;32640:237::-;32678:3;32697:18;32713:1;32697:18;:::i;:::-;32692:23;;32729:18;32745:1;32729:18;:::i;:::-;32724:23;;32819:1;32813:4;32809:12;32806:1;32803:19;32800:45;;;32825:18;;:::i;:::-;32800:45;32869:1;32866;32862:9;32855:16;;32640:237;;;;:::o;32883:220::-;33023:34;33019:1;33011:6;33007:14;33000:58;33092:3;33087:2;33079:6;33075:15;33068:28;32883:220;:::o;33109:366::-;33251:3;33272:67;33336:2;33331:3;33272:67;:::i;:::-;33265:74;;33348:93;33437:3;33348:93;:::i;:::-;33466:2;33461:3;33457:12;33450:19;;33109:366;;;:::o;33481:419::-;33647:4;33685:2;33674:9;33670:18;33662:26;;33734:9;33728:4;33724:20;33720:1;33709:9;33705:17;33698:47;33762:131;33888:4;33762:131;:::i;:::-;33754:139;;33481:419;;;:::o;33906:305::-;33946:3;33965:20;33983:1;33965:20;:::i;:::-;33960:25;;33999:20;34017:1;33999:20;:::i;:::-;33994:25;;34153:1;34085:66;34081:74;34078:1;34075:81;34072:107;;;34159:18;;:::i;:::-;34072:107;34203:1;34200;34196:9;34189:16;;33906:305;;;;:::o;34217:332::-;34338:4;34376:2;34365:9;34361:18;34353:26;;34389:71;34457:1;34446:9;34442:17;34433:6;34389:71;:::i;:::-;34470:72;34538:2;34527:9;34523:18;34514:6;34470:72;:::i;:::-;34217:332;;;;;:::o;34555:227::-;34695:34;34691:1;34683:6;34679:14;34672:58;34764:10;34759:2;34751:6;34747:15;34740:35;34555:227;:::o;34788:366::-;34930:3;34951:67;35015:2;35010:3;34951:67;:::i;:::-;34944:74;;35027:93;35116:3;35027:93;:::i;:::-;35145:2;35140:3;35136:12;35129:19;;34788:366;;;:::o;35160:419::-;35326:4;35364:2;35353:9;35349:18;35341:26;;35413:9;35407:4;35403:20;35399:1;35388:9;35384:17;35377:47;35441:131;35567:4;35441:131;:::i;:::-;35433:139;;35160:419;;;:::o;35585:224::-;35725:34;35721:1;35713:6;35709:14;35702:58;35794:7;35789:2;35781:6;35777:15;35770:32;35585:224;:::o;35815:366::-;35957:3;35978:67;36042:2;36037:3;35978:67;:::i;:::-;35971:74;;36054:93;36143:3;36054:93;:::i;:::-;36172:2;36167:3;36163:12;36156:19;;35815:366;;;:::o;36187:419::-;36353:4;36391:2;36380:9;36376:18;36368:26;;36440:9;36434:4;36430:20;36426:1;36415:9;36411:17;36404:47;36468:131;36594:4;36468:131;:::i;:::-;36460:139;;36187:419;;;:::o;36612:229::-;36752:34;36748:1;36740:6;36736:14;36729:58;36821:12;36816:2;36808:6;36804:15;36797:37;36612:229;:::o;36847:366::-;36989:3;37010:67;37074:2;37069:3;37010:67;:::i;:::-;37003:74;;37086:93;37175:3;37086:93;:::i;:::-;37204:2;37199:3;37195:12;37188:19;;36847:366;;;:::o;37219:419::-;37385:4;37423:2;37412:9;37408:18;37400:26;;37472:9;37466:4;37462:20;37458:1;37447:9;37443:17;37436:47;37500:131;37626:4;37500:131;:::i;:::-;37492:139;;37219:419;;;:::o;37644:634::-;37865:4;37903:2;37892:9;37888:18;37880:26;;37952:9;37946:4;37942:20;37938:1;37927:9;37923:17;37916:47;37980:108;38083:4;38074:6;37980:108;:::i;:::-;37972:116;;38135:9;38129:4;38125:20;38120:2;38109:9;38105:18;38098:48;38163:108;38266:4;38257:6;38163:108;:::i;:::-;38155:116;;37644:634;;;;;:::o;38284:98::-;38335:6;38369:5;38363:12;38353:22;;38284:98;;;:::o;38388:168::-;38471:11;38505:6;38500:3;38493:19;38545:4;38540:3;38536:14;38521:29;;38388:168;;;;:::o;38562:360::-;38648:3;38676:38;38708:5;38676:38;:::i;:::-;38730:70;38793:6;38788:3;38730:70;:::i;:::-;38723:77;;38809:52;38854:6;38849:3;38842:4;38835:5;38831:16;38809:52;:::i;:::-;38886:29;38908:6;38886:29;:::i;:::-;38881:3;38877:39;38870:46;;38652:270;38562:360;;;;:::o;38928:751::-;39151:4;39189:3;39178:9;39174:19;39166:27;;39203:71;39271:1;39260:9;39256:17;39247:6;39203:71;:::i;:::-;39284:72;39352:2;39341:9;39337:18;39328:6;39284:72;:::i;:::-;39366;39434:2;39423:9;39419:18;39410:6;39366:72;:::i;:::-;39448;39516:2;39505:9;39501:18;39492:6;39448:72;:::i;:::-;39568:9;39562:4;39558:20;39552:3;39541:9;39537:19;39530:49;39596:76;39667:4;39658:6;39596:76;:::i;:::-;39588:84;;38928:751;;;;;;;;:::o;39685:141::-;39741:5;39772:6;39766:13;39757:22;;39788:32;39814:5;39788:32;:::i;:::-;39685:141;;;;:::o;39832:349::-;39901:6;39950:2;39938:9;39929:7;39925:23;39921:32;39918:119;;;39956:79;;:::i;:::-;39918:119;40076:1;40101:63;40156:7;40147:6;40136:9;40132:22;40101:63;:::i;:::-;40091:73;;40047:127;39832:349;;;;:::o;40187:106::-;40231:8;40280:5;40275:3;40271:15;40250:36;;40187:106;;;:::o;40299:183::-;40334:3;40372:1;40354:16;40351:23;40348:128;;;40410:1;40407;40404;40389:23;40432:34;40463:1;40457:8;40432:34;:::i;:::-;40425:41;;40348:128;40299:183;:::o;40488:711::-;40527:3;40565:4;40547:16;40544:26;40541:39;;;40573:5;;40541:39;40602:20;;:::i;:::-;40677:1;40659:16;40655:24;40652:1;40646:4;40631:49;40710:4;40704:11;40809:16;40802:4;40794:6;40790:17;40787:39;40754:18;40746:6;40743:30;40727:113;40724:146;;;40855:5;;;;40724:146;40901:6;40895:4;40891:17;40937:3;40931:10;40964:18;40956:6;40953:30;40950:43;;;40986:5;;;;;;40950:43;41034:6;41027:4;41022:3;41018:14;41014:27;41093:1;41075:16;41071:24;41065:4;41061:35;41056:3;41053:44;41050:57;;;41100:5;;;;;;;41050:57;41117;41165:6;41159:4;41155:17;41147:6;41143:30;41137:4;41117:57;:::i;:::-;41190:3;41183:10;;40531:668;;;;;40488:711;;:::o;41205:239::-;41345:34;41341:1;41333:6;41329:14;41322:58;41414:22;41409:2;41401:6;41397:15;41390:47;41205:239;:::o;41450:366::-;41592:3;41613:67;41677:2;41672:3;41613:67;:::i;:::-;41606:74;;41689:93;41778:3;41689:93;:::i;:::-;41807:2;41802:3;41798:12;41791:19;;41450:366;;;:::o;41822:419::-;41988:4;42026:2;42015:9;42011:18;42003:26;;42075:9;42069:4;42065:20;42061:1;42050:9;42046:17;42039:47;42103:131;42229:4;42103:131;:::i;:::-;42095:139;;41822:419;;;:::o;42247:227::-;42387:34;42383:1;42375:6;42371:14;42364:58;42456:10;42451:2;42443:6;42439:15;42432:35;42247:227;:::o;42480:366::-;42622:3;42643:67;42707:2;42702:3;42643:67;:::i;:::-;42636:74;;42719:93;42808:3;42719:93;:::i;:::-;42837:2;42832:3;42828:12;42821:19;;42480:366;;;:::o;42852:419::-;43018:4;43056:2;43045:9;43041:18;43033:26;;43105:9;43099:4;43095:20;43091:1;43080:9;43076:17;43069:47;43133:131;43259:4;43133:131;:::i;:::-;43125:139;;42852:419;;;:::o;43277:1053::-;43600:4;43638:3;43627:9;43623:19;43615:27;;43652:71;43720:1;43709:9;43705:17;43696:6;43652:71;:::i;:::-;43733:72;43801:2;43790:9;43786:18;43777:6;43733:72;:::i;:::-;43852:9;43846:4;43842:20;43837:2;43826:9;43822:18;43815:48;43880:108;43983:4;43974:6;43880:108;:::i;:::-;43872:116;;44035:9;44029:4;44025:20;44020:2;44009:9;44005:18;43998:48;44063:108;44166:4;44157:6;44063:108;:::i;:::-;44055:116;;44219:9;44213:4;44209:20;44203:3;44192:9;44188:19;44181:49;44247:76;44318:4;44309:6;44247:76;:::i;:::-;44239:84;;43277:1053;;;;;;;;:::o

Swarm Source

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