Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
BloodShedBearsGen1
Compiler Version
v0.8.10+commit.fc410830
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-26 */ // SPDX-License-Identifier: GPL-3.0 /* ______ __ __ __ __ |_ _ \ [ | | ] [ | | ] | |_) | | | .--. .--. .--.| | .--. | |--. .---. .--.| | | __'. | | / .'`\ \ / .'`\ \ / /'`\' | ( (`\] | .-. | / /__\\ / /'`\' | _| |__) | | | | \__. | | \__. | | \__/ | `'.'. | | | | | \__., | \__/ | |_______/ [___] '.__.' '.__.' '.__.;__] [\__) ) [___]|__] '.__.' '.__.;__] ________ ___ __ )_____ ______ _________________ __ __ |_ _ \_ __ `/__ ___/__ ___/ _ /_/ / / __// /_/ / _ / _(__ ) /_____/ \___/ \__,_/ /_/ /____/ */ 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; } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _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); } } 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); } } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } 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); } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.10; abstract contract ERC721P is Context, ERC165, IERC721, IERC721Metadata { using Address for address; string private _name; string private _symbol; address[] internal _owners; mapping(uint256 => address) private _tokenApprovals; mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); uint count = 0; uint length = _owners.length; for( uint i = 0; i < length; ++i ){ if( owner == _owners[i] ){ ++count; } } delete length; return count; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721P.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } function _exists(uint256 tokenId) internal view virtual returns (bool) { return tokenId < _owners.length && _owners[tokenId] != address(0); } function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721P.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _owners.push(to); emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721P.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _owners[tokenId] = address(0); emit Transfer(owner, address(0), tokenId); } function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721P.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721P.ownerOf(tokenId), to, tokenId); } function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721P { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } pragma solidity ^0.8.10; abstract contract ERC721Enum is ERC721Burnable, IERC721Enumerable { function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721P) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256 tokenId) { require(index < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint count; for( uint i; i < _owners.length; ++i ){ if( owner == _owners[i] ){ if( count == index ) return i; else ++count; } } require(false, "ERC721Enum: owner ioob"); } function tokensOfOwner(address owner) public view returns (uint256[] memory) { require(0 < ERC721P.balanceOf(owner), "ERC721Enum: owner ioob"); uint256 tokenCount = balanceOf(owner); uint256[] memory tokenIds = new uint256[](tokenCount); for (uint256 i = 0; i < tokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(owner, i); } return tokenIds; } function totalSupply() public view virtual override returns (uint256) { return _owners.length; } function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enum.totalSupply(), "ERC721Enum: global ioob"); return index; } } pragma solidity ^0.8.0; interface LinkTokenInterface { function allowance(address owner, address spender) external view returns (uint256 remaining); function approve(address spender, uint256 value) external returns (bool success); function balanceOf(address owner) external view returns (uint256 balance); function decimals() external view returns (uint8 decimalPlaces); function decreaseApproval(address spender, uint256 addedValue) external returns (bool success); function increaseApproval(address spender, uint256 subtractedValue) external; function name() external view returns (string memory tokenName); function symbol() external view returns (string memory tokenSymbol); function totalSupply() external view returns (uint256 totalTokensIssued); function transfer(address to, uint256 value) external returns (bool success); function transferAndCall( address to, uint256 value, bytes calldata data ) external returns (bool success); function transferFrom( address from, address to, uint256 value ) external returns (bool success); } pragma solidity ^0.8.0; contract VRFRequestIDBase { /** * @notice returns the seed which is actually input to the VRF coordinator * * @dev To prevent repetition of VRF output due to repetition of the * @dev user-supplied seed, that seed is combined in a hash with the * @dev user-specific nonce, and the address of the consuming contract. The * @dev risk of repetition is mostly mitigated by inclusion of a blockhash in * @dev the final seed, but the nonce does protect against repetition in * @dev requests which are included in a single block. * * @param _userSeed VRF seed input provided by user * @param _requester Address of the requesting contract * @param _nonce User-specific nonce at the time of the request */ function makeVRFInputSeed( bytes32 _keyHash, uint256 _userSeed, address _requester, uint256 _nonce ) internal pure returns (uint256) { return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce))); } /** * @notice Returns the id for this request * @param _keyHash The serviceAgreement ID to be used for this request * @param _vRFInputSeed The seed to be passed directly to the VRF * @return The id for this request * * @dev Note that _vRFInputSeed is not the seed passed by the consuming * @dev contract, but the one generated by makeVRFInputSeed */ function makeRequestId(bytes32 _keyHash, uint256 _vRFInputSeed) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed)); } } pragma solidity ^0.8.0; /** **************************************************************************** * @notice Interface for contracts using VRF randomness * ***************************************************************************** * @dev PURPOSE * * @dev Reggie the Random Oracle (not his real job) wants to provide randomness * @dev to Vera the verifier in such a way that Vera can be sure he's not * @dev making his output up to suit himself. Reggie provides Vera a public key * @dev to which he knows the secret key. Each time Vera provides a seed to * @dev Reggie, he gives back a value which is computed completely * @dev deterministically from the seed and the secret key. * * @dev Reggie provides a proof by which Vera can verify that the output was * @dev correctly computed once Reggie tells it to her, but without that proof, * @dev the output is indistinguishable to her from a uniform random sample * @dev from the output space. * * @dev The purpose of this contract is to make it easy for unrelated contracts * @dev to talk to Vera the verifier about the work Reggie is doing, to provide * @dev simple access to a verifiable source of randomness. * ***************************************************************************** * @dev USAGE * * @dev Calling contracts must inherit from VRFConsumerBase, and can * @dev initialize VRFConsumerBase's attributes in their constructor as * @dev shown: * * @dev contract VRFConsumer { * @dev constructor(<other arguments>, address _vrfCoordinator, address _link) * @dev VRFConsumerBase(_vrfCoordinator, _link) public { * @dev <initialization with other arguments goes here> * @dev } * @dev } * * @dev The oracle will have given you an ID for the VRF keypair they have * @dev committed to (let's call it keyHash), and have told you the minimum LINK * @dev price for VRF service. Make sure your contract has sufficient LINK, and * @dev call requestRandomness(keyHash, fee, seed), where seed is the input you * @dev want to generate randomness from. * * @dev Once the VRFCoordinator has received and validated the oracle's response * @dev to your request, it will call your contract's fulfillRandomness method. * * @dev The randomness argument to fulfillRandomness is the actual random value * @dev generated from your seed. * * @dev The requestId argument is generated from the keyHash and the seed by * @dev makeRequestId(keyHash, seed). If your contract could have concurrent * @dev requests open, you can use the requestId to track which seed is * @dev associated with which randomness. See VRFRequestIDBase.sol for more * @dev details. (See "SECURITY CONSIDERATIONS" for principles to keep in mind, * @dev if your contract could have multiple requests in flight simultaneously.) * * @dev Colliding `requestId`s are cryptographically impossible as long as seeds * @dev differ. (Which is critical to making unpredictable randomness! See the * @dev next section.) * * ***************************************************************************** * @dev SECURITY CONSIDERATIONS * * @dev A method with the ability to call your fulfillRandomness method directly * @dev could spoof a VRF response with any random value, so it's critical that * @dev it cannot be directly called by anything other than this base contract * @dev (specifically, by the VRFConsumerBase.rawFulfillRandomness method). * * @dev For your users to trust that your contract's random behavior is free * @dev from malicious interference, it's best if you can write it so that all * @dev behaviors implied by a VRF response are executed *during* your * @dev fulfillRandomness method. If your contract must store the response (or * @dev anything derived from it) and use it later, you must ensure that any * @dev user-significant behavior which depends on that stored value cannot be * @dev manipulated by a subsequent VRF request. * * @dev Similarly, both miners and the VRF oracle itself have some influence * @dev over the order in which VRF responses appear on the blockchain, so if * @dev your contract could have multiple VRF requests in flight simultaneously, * @dev you must ensure that the order in which the VRF responses arrive cannot * @dev be used to manipulate your contract's user-significant behavior. * * @dev Since the ultimate input to the VRF is mixed with the block hash of the * @dev block in which the request is made, user-provided seeds have no impact * @dev on its economic security properties. They are only included for API * @dev compatability with previous versions of this contract. * * @dev Since the block hash of the block which contains the requestRandomness * @dev call is mixed into the input to the VRF *last*, a sufficiently powerful * @dev miner could, in principle, fork the blockchain to evict the block * @dev containing the request, forcing the request to be included in a * @dev different block with a different hash, and therefore a different input * @dev to the VRF. However, such an attack would incur a substantial economic * @dev cost. This cost scales with the number of blocks the VRF oracle waits * @dev until it calls responds to a request. */ abstract contract VRFConsumerBase is VRFRequestIDBase { /** * @notice fulfillRandomness handles the VRF response. Your contract must * @notice implement it. See "SECURITY CONSIDERATIONS" above for important * @notice principles to keep in mind when implementing your fulfillRandomness * @notice method. * * @dev VRFConsumerBase expects its subcontracts to have a method with this * @dev signature, and will call it once it has verified the proof * @dev associated with the randomness. (It is triggered via a call to * @dev rawFulfillRandomness, below.) * * @param requestId The Id initially returned by requestRandomness * @param randomness the VRF output */ function fulfillRandomness(bytes32 requestId, uint256 randomness) internal virtual; /** * @dev In order to keep backwards compatibility we have kept the user * seed field around. We remove the use of it because given that the blockhash * enters later, it overrides whatever randomness the used seed provides. * Given that it adds no security, and can easily lead to misunderstandings, * we have removed it from usage and can now provide a simpler API. */ uint256 private constant USER_SEED_PLACEHOLDER = 0; /** * @notice requestRandomness initiates a request for VRF output given _seed * * @dev The fulfillRandomness method receives the output, once it's provided * @dev by the Oracle, and verified by the vrfCoordinator. * * @dev The _keyHash must already be registered with the VRFCoordinator, and * @dev the _fee must exceed the fee specified during registration of the * @dev _keyHash. * * @dev The _seed parameter is vestigial, and is kept only for API * @dev compatibility with older versions. It can't *hurt* to mix in some of * @dev your own randomness, here, but it's not necessary because the VRF * @dev oracle will mix the hash of the block containing your request into the * @dev VRF seed it ultimately uses. * * @param _keyHash ID of public key against which randomness is generated * @param _fee The amount of LINK to send with the request * * @return requestId unique ID for this request * * @dev The returned requestId can be used to distinguish responses to * @dev concurrent requests. It is passed as the first argument to * @dev fulfillRandomness. */ function requestRandomness(bytes32 _keyHash, uint256 _fee) internal returns (bytes32 requestId) { LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, USER_SEED_PLACEHOLDER)); // This is the seed passed to VRFCoordinator. The oracle will mix this with // the hash of the block containing this request to obtain the seed/input // which is finally passed to the VRF cryptographic machinery. uint256 vRFSeed = makeVRFInputSeed(_keyHash, USER_SEED_PLACEHOLDER, address(this), nonces[_keyHash]); // nonces[_keyHash] must stay in sync with // VRFCoordinator.nonces[_keyHash][this], which was incremented by the above // successful LINK.transferAndCall (in VRFCoordinator.randomnessRequest). // This provides protection against the user repeating their input seed, // which would result in a predictable/duplicate output, if multiple such // requests appeared in the same block. nonces[_keyHash] = nonces[_keyHash] + 1; return makeRequestId(_keyHash, vRFSeed); } LinkTokenInterface internal immutable LINK; address private immutable vrfCoordinator; // Nonces for each VRF key from which randomness has been requested. // // Must stay in sync with VRFCoordinator[_keyHash][this] mapping(bytes32 => uint256) /* keyHash */ /* nonce */ private nonces; /** * @param _vrfCoordinator address of VRFCoordinator contract * @param _link address of LINK token contract * * @dev https://docs.chain.link/docs/link-token-contracts */ constructor(address _vrfCoordinator, address _link) { vrfCoordinator = _vrfCoordinator; LINK = LinkTokenInterface(_link); } // rawFulfillRandomness is called by VRFCoordinator when it receives a valid VRF // proof. rawFulfillRandomness then calls fulfillRandomness, after validating // the origin of the call function rawFulfillRandomness(bytes32 requestId, uint256 randomness) external { require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill"); fulfillRandomness(requestId, randomness); } } pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } pragma solidity ^0.8.10; interface IBloodTokenContract { function walletsBalances(address wallet) external view returns (uint256); function spend(address owner, uint256 amount) external; } interface IGameStats { function pickWinnerFromElites(bool faction) external returns (address); } contract BloodShedBearsGen1 is ERC721Enum, Ownable, VRFConsumerBase, Pausable { using Strings for uint256; //sale settings uint256 constant private maxSupply = 20000; uint256 private teamReserveAvailableMints = 200; uint256 private cost = 20000 ether; address public bloodTokenContract = 0x0000000000000000000000000000000000000000; address public gameStatsContract = 0x0000000000000000000000000000000000000000; mapping(uint256 => bool) public tokenFactions; string private baseURI; uint256 private vrfFee; bytes32 private vrfKeyHash; uint256 private riskSeed; uint256 private factionSeed; bytes32 private riskSeedReqId; bytes32 private factionSeedReqId; event SeedFulfilled(string seedType); constructor( string memory initBaseURI_, address vrfCoordinatorAddr_, address linkTokenAddr_, bytes32 vrfKeyHash_, uint256 fee_ ) VRFConsumerBase(vrfCoordinatorAddr_, linkTokenAddr_) ERC721P("BloodShed Bears Reinforcements", "BSBR") { setBaseURI(initBaseURI_); vrfKeyHash = vrfKeyHash_; vrfFee = fee_; pause(); } function _baseURI() internal view virtual returns (string memory) { return baseURI; } function setBloodTokenContract(address contractAddress_) external onlyOwner { bloodTokenContract = contractAddress_; } function setGameStatsContract(address contractAddress_) external onlyOwner { gameStatsContract = contractAddress_; } function setCost(uint256 _newCost) external onlyOwner { cost = _newCost; } function mint(uint256 mintAmount_) external payable whenNotPaused returns (uint256) { require(riskSeed != 0, "Seed not set"); require(factionSeed != 0, "Seed not set"); require(IBloodTokenContract(bloodTokenContract).walletsBalances(msg.sender) >= mintAmount_ * cost, "NOT ENOUGH"); IBloodTokenContract(bloodTokenContract).spend(msg.sender, mintAmount_ * cost); uint256 totalSupply = totalSupply(); uint256 lostBears; for (uint256 i = 0; i < mintAmount_; i++) { tokenFactions[totalSupply + i] = _getFaction(totalSupply + i); address recipient = msg.sender; if(_isLost(totalSupply + i)) { address winner = IGameStats(gameStatsContract).pickWinnerFromElites(tokenFactions[totalSupply + i]); if(winner != address(0)) { ++lostBears; recipient = winner; } } _safeMint(recipient, totalSupply + i); delete recipient; } delete totalSupply; return lostBears; } function tokenURI(uint256 _tokenId) external view virtual override returns (string memory) { require(_exists(_tokenId), "ERC721Metadata: Nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), ".json")) : ""; } function reserve(address _to, uint256 _reserveAmount) external onlyOwner { uint256 supply = totalSupply(); require( _reserveAmount > 0 && _reserveAmount <= teamReserveAvailableMints, "Not enough reserve left for team" ); for (uint256 i = 0; i < _reserveAmount; i++) { tokenFactions[supply + i] = _getFaction(supply + i); _safeMint(_to, supply + i); } teamReserveAvailableMints -= _reserveAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function isOwnerOfBatch(uint256[] calldata tokenIds_, address address_) external view returns (bool) { bool ownership = true; for (uint256 i = 0; i < tokenIds_.length; ++i) { ownership = ownership && (ownerOf(tokenIds_[i]) == address_); } return ownership; } function _isLost(uint256 tokenId) internal view returns (bool) { return uint256( keccak256( abi.encodePacked( riskSeed, tokenId, tx.origin, blockhash(block.number - 1), block.timestamp ) ) ) % 5 == 0; } function _getFaction(uint256 tokenId) internal view returns (bool) { return uint256( keccak256( abi.encodePacked( factionSeed, tokenId, tx.origin, blockhash(block.number - 1), block.timestamp ) ) ) & 1 == 1; } function initSeedGeneration(bool seedType) public onlyOwner returns (bytes32) { require(LINK.balanceOf(address(this)) >= vrfFee, "Not enough LINK"); bytes32 requestId = requestRandomness(vrfKeyHash, vrfFee); if (seedType) { riskSeedReqId = requestId; } else { factionSeedReqId = requestId; } return requestId; } function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override { if (requestId == riskSeedReqId) { riskSeed = randomness; emit SeedFulfilled("Risk"); } else if (requestId == factionSeedReqId) { factionSeed = randomness; emit SeedFulfilled("Faction"); } } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function getFactions(uint256[] calldata tokenIds_) external view returns (bool[] memory) { bool[] memory factions = new bool[](tokenIds_.length); for (uint256 i = 0; i < tokenIds_.length; ++i) { require(_exists(tokenIds_[i]), "Token doesn't exist"); factions[i] = tokenFactions[tokenIds_[i]]; } return factions; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"initBaseURI_","type":"string"},{"internalType":"address","name":"vrfCoordinatorAddr_","type":"address"},{"internalType":"address","name":"linkTokenAddr_","type":"address"},{"internalType":"bytes32","name":"vrfKeyHash_","type":"bytes32"},{"internalType":"uint256","name":"fee_","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"seedType","type":"string"}],"name":"SeedFulfilled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"bloodTokenContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gameStatsContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"}],"name":"getFactions","outputs":[{"internalType":"bool[]","name":"","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"seedType","type":"bool"}],"name":"initSeedGeneration","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"address","name":"address_","type":"address"}],"name":"isOwnerOfBatch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintAmount_","type":"uint256"}],"name":"mint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"uint256","name":"randomness","type":"uint256"}],"name":"rawFulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress_","type":"address"}],"name":"setBloodTokenContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"contractAddress_","type":"address"}],"name":"setGameStatsContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenFactions","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60c060405260c860085569043c33c19375648000006009556000600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000a857600080fd5b506040516200601e3803806200601e8339818101604052810190620000ce91906200088a565b83836040518060400160405280601e81526020017f426c6f6f6453686564204265617273205265696e666f7263656d656e747300008152506040518060400160405280600481526020017f425342520000000000000000000000000000000000000000000000000000000081525081600090805190602001906200015492919062000562565b5080600190805190602001906200016d92919062000562565b50505062000190620001846200024f60201b60201c565b6200025760201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505050506000600760006101000a81548160ff02191690831515021790555062000226856200031d60201b60201c565b81600f8190555080600e8190555062000244620003c860201b60201c565b505050505062000ab9565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200032d6200024f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003536200046960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003ac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003a39062000992565b60405180910390fd5b80600d9080519060200190620003c492919062000562565b5050565b620003d86200024f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003fe6200046960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000457576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200044e9062000992565b60405180910390fd5b620004676200049360201b60201c565b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004a36200054b60201b60201c565b15620004e6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004dd9062000a04565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258620005326200024f60201b60201c565b60405162000541919062000a37565b60405180910390a1565b6000600760009054906101000a900460ff16905090565b828054620005709062000a83565b90600052602060002090601f016020900481019282620005945760008555620005e0565b82601f10620005af57805160ff1916838001178555620005e0565b82800160010185558215620005e0579182015b82811115620005df578251825591602001919060010190620005c2565b5b509050620005ef9190620005f3565b5090565b5b808211156200060e576000816000905550600101620005f4565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200067b8262000630565b810181811067ffffffffffffffff821117156200069d576200069c62000641565b5b80604052505050565b6000620006b262000612565b9050620006c0828262000670565b919050565b600067ffffffffffffffff821115620006e357620006e262000641565b5b620006ee8262000630565b9050602081019050919050565b60005b838110156200071b578082015181840152602081019050620006fe565b838111156200072b576000848401525b50505050565b6000620007486200074284620006c5565b620006a6565b9050828152602081018484840111156200076757620007666200062b565b5b62000774848285620006fb565b509392505050565b600082601f83011262000794576200079362000626565b5b8151620007a684826020860162000731565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007dc82620007af565b9050919050565b620007ee81620007cf565b8114620007fa57600080fd5b50565b6000815190506200080e81620007e3565b92915050565b6000819050919050565b620008298162000814565b81146200083557600080fd5b50565b60008151905062000849816200081e565b92915050565b6000819050919050565b62000864816200084f565b81146200087057600080fd5b50565b600081519050620008848162000859565b92915050565b600080600080600060a08688031215620008a957620008a86200061c565b5b600086015167ffffffffffffffff811115620008ca57620008c962000621565b5b620008d8888289016200077c565b9550506020620008eb88828901620007fd565b9450506040620008fe88828901620007fd565b9350506060620009118882890162000838565b9250506080620009248882890162000873565b9150509295509295909350565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200097a60208362000931565b9150620009878262000942565b602082019050919050565b60006020820190508181036000830152620009ad816200096b565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000620009ec60108362000931565b9150620009f982620009b4565b602082019050919050565b6000602082019050818103600083015262000a1f81620009dd565b9050919050565b62000a3181620007cf565b82525050565b600060208201905062000a4e600083018462000a26565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000a9c57607f821691505b6020821081141562000ab35762000ab262000a54565b5b50919050565b60805160a05161553162000aed6000396000818161178a0152612919015260008181610c8801526128dd01526155316000f3fe60806040526004361061021a5760003560e01c806370a0823111610123578063a0712d68116100ab578063b88d4fde1161006f578063b88d4fde146107fa578063c87b56dd14610823578063cc47a40b14610860578063e985e9c514610889578063f2fde38b146108c65761021a565b8063a0712d68146106fc578063a09ac5571461072c578063a22cb46514610769578063a6dbf79114610792578063ada670e7146107cf5761021a565b80638462151c116100f25780638462151c146106155780638da5cb5b1461065257806394985ddd1461067d57806395d89b41146106a65780639b355c20146106d15761021a565b806370a0823114610581578063715018a6146105be5780637f9a62dc146105d55780638456cb59146105fe5761021a565b806342842e0e116101a657806355f804b31161017557806355f804b31461048a5780635c975abb146104b35780635e089142146104de5780636352211e146105075780636f9bdf65146105445761021a565b806342842e0e146103d257806342966c68146103fb57806344a0d68a146104245780634f6ccce71461044d5761021a565b806318160ddd116101ed57806318160ddd146102ed57806323b872dd1461031857806324d10317146103415780632f745c591461037e5780633f4ba83a146103bb5761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061362f565b6108ef565b6040516102539190613677565b60405180910390f35b34801561026857600080fd5b50610271610969565b60405161027e919061372b565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613783565b6109fb565b6040516102bb91906137f1565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613838565b610a80565b005b3480156102f957600080fd5b50610302610b98565b60405161030f9190613887565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906138a2565b610ba5565b005b34801561034d57600080fd5b5061036860048036038101906103639190613921565b610c05565b6040516103759190613967565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613838565b610d96565b6040516103b29190613887565b60405180910390f35b3480156103c757600080fd5b506103d0610edf565b005b3480156103de57600080fd5b506103f960048036038101906103f491906138a2565b610f65565b005b34801561040757600080fd5b50610422600480360381019061041d9190613783565b610f85565b005b34801561043057600080fd5b5061044b60048036038101906104469190613783565b610fe1565b005b34801561045957600080fd5b50610474600480360381019061046f9190613783565b611067565b6040516104819190613887565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190613ab7565b6110ba565b005b3480156104bf57600080fd5b506104c8611150565b6040516104d59190613677565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190613b00565b611167565b005b34801561051357600080fd5b5061052e60048036038101906105299190613783565b611227565b60405161053b91906137f1565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613b8d565b6112e4565b6040516105789190613677565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190613b00565b611371565b6040516105b59190613887565b60405180910390f35b3480156105ca57600080fd5b506105d3611497565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190613b00565b61151f565b005b34801561060a57600080fd5b506106136115df565b005b34801561062157600080fd5b5061063c60048036038101906106379190613b00565b611665565b6040516106499190613cab565b60405180910390f35b34801561065e57600080fd5b5061066761175e565b60405161067491906137f1565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613cf9565b611788565b005b3480156106b257600080fd5b506106bb611824565b6040516106c8919061372b565b60405180910390f35b3480156106dd57600080fd5b506106e66118b6565b6040516106f391906137f1565b60405180910390f35b61071660048036038101906107119190613783565b6118dc565b6040516107239190613887565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190613783565b611d0b565b6040516107609190613677565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190613d39565b611d2b565b005b34801561079e57600080fd5b506107b960048036038101906107b49190613d79565b611eac565b6040516107c69190613e84565b60405180910390f35b3480156107db57600080fd5b506107e4611fe8565b6040516107f191906137f1565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190613f47565b61200e565b005b34801561082f57600080fd5b5061084a60048036038101906108459190613783565b612070565b604051610857919061372b565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613838565b612117565b005b34801561089557600080fd5b506108b060048036038101906108ab9190613fca565b61228b565b6040516108bd9190613677565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190613b00565b61231f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610962575061096182612417565b5b9050919050565b60606000805461097890614039565b80601f01602080910402602001604051908101604052809291908181526020018280546109a490614039565b80156109f15780601f106109c6576101008083540402835291602001916109f1565b820191906000526020600020905b8154815290600101906020018083116109d457829003601f168201915b5050505050905090565b6000610a06826124f9565b610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906140dd565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8b82611227565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af39061416f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1b612581565b73ffffffffffffffffffffffffffffffffffffffff161480610b4a5750610b4981610b44612581565b61228b565b5b610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090614201565b60405180910390fd5b610b938383612589565b505050565b6000600280549050905090565b610bb6610bb0612581565b82612642565b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90614293565b60405180910390fd5b610c00838383612720565b505050565b6000610c0f612581565b73ffffffffffffffffffffffffffffffffffffffff16610c2d61175e565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a906142ff565b60405180910390fd5b600e547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cdf91906137f1565b602060405180830381865afa158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d209190614334565b1015610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906143ad565b60405180910390fd5b6000610d71600f54600e546128d9565b90508215610d855780601281905550610d8d565b806013819055505b80915050919050565b6000610da183611371565b8210610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614419565b60405180910390fd5b6000805b600280549050811015610e955760028181548110610e0757610e06614439565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610e845783821415610e77578092505050610ed9565b81610e8190614497565b91505b80610e8e90614497565b9050610de6565b506000610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90614419565b60405180910390fd5b505b92915050565b610ee7612581565b73ffffffffffffffffffffffffffffffffffffffff16610f0561175e565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f52906142ff565b60405180910390fd5b610f63612a2c565b565b610f808383836040518060200160405280600081525061200e565b505050565b610f96610f90612581565b82612642565b610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90614552565b60405180910390fd5b610fde81612ace565b50565b610fe9612581565b73ffffffffffffffffffffffffffffffffffffffff1661100761175e565b73ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611054906142ff565b60405180910390fd5b8060098190555050565b6000611071610b98565b82106110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a9906145be565b60405180910390fd5b819050919050565b6110c2612581565b73ffffffffffffffffffffffffffffffffffffffff166110e061175e565b73ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d906142ff565b60405180910390fd5b80600d908051906020019061114c929190613520565b5050565b6000600760009054906101000a900460ff16905090565b61116f612581565b73ffffffffffffffffffffffffffffffffffffffff1661118d61175e565b73ffffffffffffffffffffffffffffffffffffffff16146111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906142ff565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002838154811061123e5761123d614439565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290614650565b60405180910390fd5b80915050919050565b6000806001905060005b858590508110156113655781801561135257508373ffffffffffffffffffffffffffffffffffffffff1661133a87878481811061132e5761132d614439565b5b90506020020135611227565b73ffffffffffffffffffffffffffffffffffffffff16145b91508061135e90614497565b90506112ee565b50809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d9906146e2565b60405180910390fd5b600080600280549050905060005b81811015611488576002818154811061140c5761140b614439565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611477578261147490614497565b92505b8061148190614497565b90506113f0565b50600090508192505050919050565b61149f612581565b73ffffffffffffffffffffffffffffffffffffffff166114bd61175e565b73ffffffffffffffffffffffffffffffffffffffff1614611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a906142ff565b60405180910390fd5b61151d6000612bb0565b565b611527612581565b73ffffffffffffffffffffffffffffffffffffffff1661154561175e565b73ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906142ff565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115e7612581565b73ffffffffffffffffffffffffffffffffffffffff1661160561175e565b73ffffffffffffffffffffffffffffffffffffffff161461165b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611652906142ff565b60405180910390fd5b611663612c76565b565b606061167082611371565b6000106116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a990614419565b60405180910390fd5b60006116bd83611371565b905060008167ffffffffffffffff8111156116db576116da61398c565b5b6040519080825280602002602001820160405280156117095781602001602082028036833780820191505090505b50905060005b82811015611753576117218582610d96565b82828151811061173457611733614439565b5b602002602001018181525050808061174b90614497565b91505061170f565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d9061474e565b60405180910390fd5b6118208282612d19565b5050565b60606001805461183390614039565b80601f016020809104026020016040519081016040528092919081815260200182805461185f90614039565b80156118ac5780601f10611881576101008083540402835291602001916118ac565b820191906000526020600020905b81548152906001019060200180831161188f57829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118e6611150565b15611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d906147ba565b60405180910390fd5b6000601054141561196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390614826565b60405180910390fd5b600060115414156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614826565b60405180910390fd5b600954826119c09190614846565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663590a4d6a336040518263ffffffff1660e01b8152600401611a1b91906137f1565b602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614334565b1015611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a94906148ec565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af7d6ca33360095485611aea9190614846565b6040518363ffffffff1660e01b8152600401611b0792919061490c565b600060405180830381600087803b158015611b2157600080fd5b505af1158015611b35573d6000803e3d6000fd5b505050506000611b43610b98565b9050600080600090505b84811015611cfc57611b698184611b649190614935565b612db0565b600c60008386611b799190614935565b815260200190815260200160002060006101000a81548160ff0219169083151502179055506000339050611bb78285611bb29190614935565b612dff565b15611ccf576000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663644856a7600c60008689611c0c9190614935565b815260200190815260200160002060009054906101000a900460ff166040518263ffffffff1660e01b8152600401611c449190613677565b6020604051808303816000875af1158015611c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8791906149a0565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ccd5783611cc790614497565b93508091505b505b611ce4818386611cdf9190614935565b612e57565b60009050508080611cf490614497565b915050611b4d565b50600091508092505050919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b611d33612581565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890614a19565b60405180910390fd5b8060046000611dae612581565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e5b612581565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ea09190613677565b60405180910390a35050565b606060008383905067ffffffffffffffff811115611ecd57611ecc61398c565b5b604051908082528060200260200182016040528015611efb5781602001602082028036833780820191505090505b50905060005b84849050811015611fdd57611f2e858583818110611f2257611f21614439565b5b905060200201356124f9565b611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614a85565b60405180910390fd5b600c6000868684818110611f8457611f83614439565b5b90506020020135815260200190815260200160002060009054906101000a900460ff16828281518110611fba57611fb9614439565b5b60200260200101901515908115158152505080611fd690614497565b9050611f01565b508091505092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61201f612019612581565b83612642565b61205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590614293565b60405180910390fd5b61206a84848484612e75565b50505050565b606061207b826124f9565b6120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190614b17565b60405180910390fd5b60006120c4612ed1565b905060008151116120e4576040518060200160405280600081525061210f565b806120ee84612f63565b6040516020016120ff929190614bbf565b6040516020818303038152906040525b915050919050565b61211f612581565b73ffffffffffffffffffffffffffffffffffffffff1661213d61175e565b73ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906142ff565b60405180910390fd5b600061219d610b98565b90506000821180156121b157506008548211155b6121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614c3a565b60405180910390fd5b60005b8281101561226c5761220f818361220a9190614935565b612db0565b600c6000838561221f9190614935565b815260200190815260200160002060006101000a81548160ff0219169083151502179055506122598482846122549190614935565b612e57565b808061226490614497565b9150506121f3565b50816008600082825461227f9190614c5a565b92505081905550505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612327612581565b73ffffffffffffffffffffffffffffffffffffffff1661234561175e565b73ffffffffffffffffffffffffffffffffffffffff161461239b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612392906142ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614d00565b60405180910390fd5b61241481612bb0565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124e257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124f257506124f1826130c4565b5b9050919050565b60006002805490508210801561257a5750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061253657612535614439565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125fc83611227565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061264d826124f9565b61268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268390614d92565b60405180910390fd5b600061269783611227565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061270657508373ffffffffffffffffffffffffffffffffffffffff166126ee846109fb565b73ffffffffffffffffffffffffffffffffffffffff16145b806127175750612716818561228b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661274082611227565b73ffffffffffffffffffffffffffffffffffffffff1614612796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278d90614e24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd90614eb6565b60405180910390fd5b61281183838361312e565b61281c600082612589565b816002828154811061283157612830614439565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634000aea07f00000000000000000000000000000000000000000000000000000000000000008486600060405160200161294d929190614ed6565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161297a93929190614f54565b6020604051808303816000875af1158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd9190614fa7565b5060006129e0846000306006600089815260200190815260200160002054613133565b905060016006600086815260200190815260200160002054612a029190614935565b6006600086815260200190815260200160002081905550612a23848261316f565b91505092915050565b612a34611150565b612a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6a90615020565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612ab7612581565b604051612ac491906137f1565b60405180910390a1565b6000612ad982611227565b9050612ae78160008461312e565b612af2600083612589565b600060028381548110612b0857612b07614439565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c7e611150565b15612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb5906147ba565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d02612581565b604051612d0f91906137f1565b60405180910390a1565b601254821415612d6457806010819055507f8285849ac2f8c43fa9e5558aff7636443132b0b98389868b53f89b3983c79545604051612d579061508c565b60405180910390a1612dac565b601354821415612dab57806011819055507f8285849ac2f8c43fa9e5558aff7636443132b0b98389868b53f89b3983c79545604051612da2906150f8565b60405180910390a15b5b5050565b60006001806011548432600143612dc79190614c5a565b4042604051602001612ddd9594939291906151a2565b6040516020818303038152906040528051906020012060001c16149050919050565b60008060056010548432600143612e169190614c5a565b4042604051602001612e2c9594939291906151a2565b6040516020818303038152906040528051906020012060001c612e4f9190615230565b149050919050565b612e718282604051806020016040528060008152506131a2565b5050565b612e80848484612720565b612e8c848484846131fd565b612ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec2906152d3565b60405180910390fd5b50505050565b6060600d8054612ee090614039565b80601f0160208091040260200160405190810160405280929190818152602001828054612f0c90614039565b8015612f595780601f10612f2e57610100808354040283529160200191612f59565b820191906000526020600020905b815481529060010190602001808311612f3c57829003601f168201915b5050505050905090565b60606000821415612fab576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130bf565b600082905060005b60008214612fdd578080612fc690614497565b915050600a82612fd691906152f3565b9150612fb3565b60008167ffffffffffffffff811115612ff957612ff861398c565b5b6040519080825280601f01601f19166020018201604052801561302b5781602001600182028036833780820191505090505b5090505b600085146130b8576001826130449190614c5a565b9150600a856130539190615230565b603061305f9190614935565b60f81b81838151811061307557613074614439565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130b191906152f3565b945061302f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b60008484848460405160200161314c9493929190615324565b6040516020818303038152906040528051906020012060001c9050949350505050565b60008282604051602001613184929190615369565b60405160208183030381529060405280519060200120905092915050565b6131ac8383613385565b6131b960008484846131fd565b6131f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ef906152d3565b60405180910390fd5b505050565b600061321e8473ffffffffffffffffffffffffffffffffffffffff1661350d565b15613378578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613247612581565b8786866040518563ffffffff1660e01b81526004016132699493929190615395565b6020604051808303816000875af19250505080156132a557506040513d601f19601f820116820180604052508101906132a291906153f6565b60015b613328573d80600081146132d5576040519150601f19603f3d011682016040523d82523d6000602084013e6132da565b606091505b50600081511415613320576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613317906152d3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061337d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ec9061546f565b60405180910390fd5b6133fe816124f9565b1561343e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613435906154db565b60405180910390fd5b61344a6000838361312e565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461352c90614039565b90600052602060002090601f01602090048101928261354e5760008555613595565b82601f1061356757805160ff1916838001178555613595565b82800160010185558215613595579182015b82811115613594578251825591602001919060010190613579565b5b5090506135a291906135a6565b5090565b5b808211156135bf5760008160009055506001016135a7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61360c816135d7565b811461361757600080fd5b50565b60008135905061362981613603565b92915050565b600060208284031215613645576136446135cd565b5b60006136538482850161361a565b91505092915050565b60008115159050919050565b6136718161365c565b82525050565b600060208201905061368c6000830184613668565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136cc5780820151818401526020810190506136b1565b838111156136db576000848401525b50505050565b6000601f19601f8301169050919050565b60006136fd82613692565b613707818561369d565b93506137178185602086016136ae565b613720816136e1565b840191505092915050565b6000602082019050818103600083015261374581846136f2565b905092915050565b6000819050919050565b6137608161374d565b811461376b57600080fd5b50565b60008135905061377d81613757565b92915050565b600060208284031215613799576137986135cd565b5b60006137a78482850161376e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137db826137b0565b9050919050565b6137eb816137d0565b82525050565b600060208201905061380660008301846137e2565b92915050565b613815816137d0565b811461382057600080fd5b50565b6000813590506138328161380c565b92915050565b6000806040838503121561384f5761384e6135cd565b5b600061385d85828601613823565b925050602061386e8582860161376e565b9150509250929050565b6138818161374d565b82525050565b600060208201905061389c6000830184613878565b92915050565b6000806000606084860312156138bb576138ba6135cd565b5b60006138c986828701613823565b93505060206138da86828701613823565b92505060406138eb8682870161376e565b9150509250925092565b6138fe8161365c565b811461390957600080fd5b50565b60008135905061391b816138f5565b92915050565b600060208284031215613937576139366135cd565b5b60006139458482850161390c565b91505092915050565b6000819050919050565b6139618161394e565b82525050565b600060208201905061397c6000830184613958565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139c4826136e1565b810181811067ffffffffffffffff821117156139e3576139e261398c565b5b80604052505050565b60006139f66135c3565b9050613a0282826139bb565b919050565b600067ffffffffffffffff821115613a2257613a2161398c565b5b613a2b826136e1565b9050602081019050919050565b82818337600083830152505050565b6000613a5a613a5584613a07565b6139ec565b905082815260208101848484011115613a7657613a75613987565b5b613a81848285613a38565b509392505050565b600082601f830112613a9e57613a9d613982565b5b8135613aae848260208601613a47565b91505092915050565b600060208284031215613acd57613acc6135cd565b5b600082013567ffffffffffffffff811115613aeb57613aea6135d2565b5b613af784828501613a89565b91505092915050565b600060208284031215613b1657613b156135cd565b5b6000613b2484828501613823565b91505092915050565b600080fd5b600080fd5b60008083601f840112613b4d57613b4c613982565b5b8235905067ffffffffffffffff811115613b6a57613b69613b2d565b5b602083019150836020820283011115613b8657613b85613b32565b5b9250929050565b600080600060408486031215613ba657613ba56135cd565b5b600084013567ffffffffffffffff811115613bc457613bc36135d2565b5b613bd086828701613b37565b93509350506020613be386828701613823565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c228161374d565b82525050565b6000613c348383613c19565b60208301905092915050565b6000602082019050919050565b6000613c5882613bed565b613c628185613bf8565b9350613c6d83613c09565b8060005b83811015613c9e578151613c858882613c28565b9750613c9083613c40565b925050600181019050613c71565b5085935050505092915050565b60006020820190508181036000830152613cc58184613c4d565b905092915050565b613cd68161394e565b8114613ce157600080fd5b50565b600081359050613cf381613ccd565b92915050565b60008060408385031215613d1057613d0f6135cd565b5b6000613d1e85828601613ce4565b9250506020613d2f8582860161376e565b9150509250929050565b60008060408385031215613d5057613d4f6135cd565b5b6000613d5e85828601613823565b9250506020613d6f8582860161390c565b9150509250929050565b60008060208385031215613d9057613d8f6135cd565b5b600083013567ffffffffffffffff811115613dae57613dad6135d2565b5b613dba85828601613b37565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dfb8161365c565b82525050565b6000613e0d8383613df2565b60208301905092915050565b6000602082019050919050565b6000613e3182613dc6565b613e3b8185613dd1565b9350613e4683613de2565b8060005b83811015613e77578151613e5e8882613e01565b9750613e6983613e19565b925050600181019050613e4a565b5085935050505092915050565b60006020820190508181036000830152613e9e8184613e26565b905092915050565b600067ffffffffffffffff821115613ec157613ec061398c565b5b613eca826136e1565b9050602081019050919050565b6000613eea613ee584613ea6565b6139ec565b905082815260208101848484011115613f0657613f05613987565b5b613f11848285613a38565b509392505050565b600082601f830112613f2e57613f2d613982565b5b8135613f3e848260208601613ed7565b91505092915050565b60008060008060808587031215613f6157613f606135cd565b5b6000613f6f87828801613823565b9450506020613f8087828801613823565b9350506040613f918782880161376e565b925050606085013567ffffffffffffffff811115613fb257613fb16135d2565b5b613fbe87828801613f19565b91505092959194509250565b60008060408385031215613fe157613fe06135cd565b5b6000613fef85828601613823565b925050602061400085828601613823565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061405157607f821691505b602082108114156140655761406461400a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140c7602c8361369d565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061415960218361369d565b9150614164826140fd565b604082019050919050565b600060208201905081810360008301526141888161414c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006141eb60388361369d565b91506141f68261418f565b604082019050919050565b6000602082019050818103600083015261421a816141de565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061427d60318361369d565b915061428882614221565b604082019050919050565b600060208201905081810360008301526142ac81614270565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142e960208361369d565b91506142f4826142b3565b602082019050919050565b60006020820190508181036000830152614318816142dc565b9050919050565b60008151905061432e81613757565b92915050565b60006020828403121561434a576143496135cd565b5b60006143588482850161431f565b91505092915050565b7f4e6f7420656e6f756768204c494e4b0000000000000000000000000000000000600082015250565b6000614397600f8361369d565b91506143a282614361565b602082019050919050565b600060208201905081810360008301526143c68161438a565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b600061440360168361369d565b915061440e826143cd565b602082019050919050565b60006020820190508181036000830152614432816143f6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144a28261374d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144d5576144d4614468565b5b600182019050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b600061453c60308361369d565b9150614547826144e0565b604082019050919050565b6000602082019050818103600083015261456b8161452f565b9050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b60006145a860178361369d565b91506145b382614572565b602082019050919050565b600060208201905081810360008301526145d78161459b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061463a60298361369d565b9150614645826145de565b604082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006146cc602a8361369d565b91506146d782614670565b604082019050919050565b600060208201905081810360008301526146fb816146bf565b9050919050565b7f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00600082015250565b6000614738601f8361369d565b915061474382614702565b602082019050919050565b600060208201905081810360008301526147678161472b565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006147a460108361369d565b91506147af8261476e565b602082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b7f53656564206e6f74207365740000000000000000000000000000000000000000600082015250565b6000614810600c8361369d565b915061481b826147da565b602082019050919050565b6000602082019050818103600083015261483f81614803565b9050919050565b60006148518261374d565b915061485c8361374d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561489557614894614468565b5b828202905092915050565b7f4e4f5420454e4f55474800000000000000000000000000000000000000000000600082015250565b60006148d6600a8361369d565b91506148e1826148a0565b602082019050919050565b60006020820190508181036000830152614905816148c9565b9050919050565b600060408201905061492160008301856137e2565b61492e6020830184613878565b9392505050565b60006149408261374d565b915061494b8361374d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149805761497f614468565b5b828201905092915050565b60008151905061499a8161380c565b92915050565b6000602082840312156149b6576149b56135cd565b5b60006149c48482850161498b565b91505092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a0360198361369d565b9150614a0e826149cd565b602082019050919050565b60006020820190508181036000830152614a32816149f6565b9050919050565b7f546f6b656e20646f65736e277420657869737400000000000000000000000000600082015250565b6000614a6f60138361369d565b9150614a7a82614a39565b602082019050919050565b60006020820190508181036000830152614a9e81614a62565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b0160218361369d565b9150614b0c82614aa5565b604082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b600081905092915050565b6000614b4d82613692565b614b578185614b37565b9350614b678185602086016136ae565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614ba9600583614b37565b9150614bb482614b73565b600582019050919050565b6000614bcb8285614b42565b9150614bd78284614b42565b9150614be282614b9c565b91508190509392505050565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b6000614c2460208361369d565b9150614c2f82614bee565b602082019050919050565b60006020820190508181036000830152614c5381614c17565b9050919050565b6000614c658261374d565b9150614c708361374d565b925082821015614c8357614c82614468565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cea60268361369d565b9150614cf582614c8e565b604082019050919050565b60006020820190508181036000830152614d1981614cdd565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614d7c602c8361369d565b9150614d8782614d20565b604082019050919050565b60006020820190508181036000830152614dab81614d6f565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e0e60298361369d565b9150614e1982614db2565b604082019050919050565b60006020820190508181036000830152614e3d81614e01565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ea060248361369d565b9150614eab82614e44565b604082019050919050565b60006020820190508181036000830152614ecf81614e93565b9050919050565b6000604082019050614eeb6000830185613958565b614ef86020830184613878565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000614f2682614eff565b614f308185614f0a565b9350614f408185602086016136ae565b614f49816136e1565b840191505092915050565b6000606082019050614f6960008301866137e2565b614f766020830185613878565b8181036040830152614f888184614f1b565b9050949350505050565b600081519050614fa1816138f5565b92915050565b600060208284031215614fbd57614fbc6135cd565b5b6000614fcb84828501614f92565b91505092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061500a60148361369d565b915061501582614fd4565b602082019050919050565b6000602082019050818103600083015261503981614ffd565b9050919050565b7f5269736b00000000000000000000000000000000000000000000000000000000600082015250565b600061507660048361369d565b915061508182615040565b602082019050919050565b600060208201905081810360008301526150a581615069565b9050919050565b7f46616374696f6e00000000000000000000000000000000000000000000000000600082015250565b60006150e260078361369d565b91506150ed826150ac565b602082019050919050565b60006020820190508181036000830152615111816150d5565b9050919050565b6000819050919050565b61513361512e8261374d565b615118565b82525050565b60008160601b9050919050565b600061515182615139565b9050919050565b600061516382615146565b9050919050565b61517b615176826137d0565b615158565b82525050565b6000819050919050565b61519c6151978261394e565b615181565b82525050565b60006151ae8288615122565b6020820191506151be8287615122565b6020820191506151ce828661516a565b6014820191506151de828561518b565b6020820191506151ee8284615122565b6020820191508190509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061523b8261374d565b91506152468361374d565b92508261525657615255615201565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006152bd60328361369d565b91506152c882615261565b604082019050919050565b600060208201905081810360008301526152ec816152b0565b9050919050565b60006152fe8261374d565b91506153098361374d565b92508261531957615318615201565b5b828204905092915050565b60006080820190506153396000830187613958565b6153466020830186613878565b61535360408301856137e2565b6153606060830184613878565b95945050505050565b6000615375828561518b565b6020820191506153858284615122565b6020820191508190509392505050565b60006080820190506153aa60008301876137e2565b6153b760208301866137e2565b6153c46040830185613878565b81810360608301526153d68184614f1b565b905095945050505050565b6000815190506153f081613603565b92915050565b60006020828403121561540c5761540b6135cd565b5b600061541a848285016153e1565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061545960208361369d565b915061546482615423565b602082019050919050565b600060208201905081810360008301526154888161544c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006154c5601c8361369d565b91506154d08261548f565b602082019050919050565b600060208201905081810360008301526154f4816154b8565b905091905056fea2646970667358221220d28039bc565d79a94fe15cf4d7c8922e9957caaa5d96bbcf8a515b320979317864736f6c634300080a003300000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb7952000000000000000000000000514910771af9ca656af840dff83e8264ecf986caaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af4450000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f626c6f6f642d736865642d62656172732f6d657461646174612d67656e312f0000
Deployed Bytecode
0x60806040526004361061021a5760003560e01c806370a0823111610123578063a0712d68116100ab578063b88d4fde1161006f578063b88d4fde146107fa578063c87b56dd14610823578063cc47a40b14610860578063e985e9c514610889578063f2fde38b146108c65761021a565b8063a0712d68146106fc578063a09ac5571461072c578063a22cb46514610769578063a6dbf79114610792578063ada670e7146107cf5761021a565b80638462151c116100f25780638462151c146106155780638da5cb5b1461065257806394985ddd1461067d57806395d89b41146106a65780639b355c20146106d15761021a565b806370a0823114610581578063715018a6146105be5780637f9a62dc146105d55780638456cb59146105fe5761021a565b806342842e0e116101a657806355f804b31161017557806355f804b31461048a5780635c975abb146104b35780635e089142146104de5780636352211e146105075780636f9bdf65146105445761021a565b806342842e0e146103d257806342966c68146103fb57806344a0d68a146104245780634f6ccce71461044d5761021a565b806318160ddd116101ed57806318160ddd146102ed57806323b872dd1461031857806324d10317146103415780632f745c591461037e5780633f4ba83a146103bb5761021a565b806301ffc9a71461021f57806306fdde031461025c578063081812fc14610287578063095ea7b3146102c4575b600080fd5b34801561022b57600080fd5b506102466004803603810190610241919061362f565b6108ef565b6040516102539190613677565b60405180910390f35b34801561026857600080fd5b50610271610969565b60405161027e919061372b565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613783565b6109fb565b6040516102bb91906137f1565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613838565b610a80565b005b3480156102f957600080fd5b50610302610b98565b60405161030f9190613887565b60405180910390f35b34801561032457600080fd5b5061033f600480360381019061033a91906138a2565b610ba5565b005b34801561034d57600080fd5b5061036860048036038101906103639190613921565b610c05565b6040516103759190613967565b60405180910390f35b34801561038a57600080fd5b506103a560048036038101906103a09190613838565b610d96565b6040516103b29190613887565b60405180910390f35b3480156103c757600080fd5b506103d0610edf565b005b3480156103de57600080fd5b506103f960048036038101906103f491906138a2565b610f65565b005b34801561040757600080fd5b50610422600480360381019061041d9190613783565b610f85565b005b34801561043057600080fd5b5061044b60048036038101906104469190613783565b610fe1565b005b34801561045957600080fd5b50610474600480360381019061046f9190613783565b611067565b6040516104819190613887565b60405180910390f35b34801561049657600080fd5b506104b160048036038101906104ac9190613ab7565b6110ba565b005b3480156104bf57600080fd5b506104c8611150565b6040516104d59190613677565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190613b00565b611167565b005b34801561051357600080fd5b5061052e60048036038101906105299190613783565b611227565b60405161053b91906137f1565b60405180910390f35b34801561055057600080fd5b5061056b60048036038101906105669190613b8d565b6112e4565b6040516105789190613677565b60405180910390f35b34801561058d57600080fd5b506105a860048036038101906105a39190613b00565b611371565b6040516105b59190613887565b60405180910390f35b3480156105ca57600080fd5b506105d3611497565b005b3480156105e157600080fd5b506105fc60048036038101906105f79190613b00565b61151f565b005b34801561060a57600080fd5b506106136115df565b005b34801561062157600080fd5b5061063c60048036038101906106379190613b00565b611665565b6040516106499190613cab565b60405180910390f35b34801561065e57600080fd5b5061066761175e565b60405161067491906137f1565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190613cf9565b611788565b005b3480156106b257600080fd5b506106bb611824565b6040516106c8919061372b565b60405180910390f35b3480156106dd57600080fd5b506106e66118b6565b6040516106f391906137f1565b60405180910390f35b61071660048036038101906107119190613783565b6118dc565b6040516107239190613887565b60405180910390f35b34801561073857600080fd5b50610753600480360381019061074e9190613783565b611d0b565b6040516107609190613677565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b9190613d39565b611d2b565b005b34801561079e57600080fd5b506107b960048036038101906107b49190613d79565b611eac565b6040516107c69190613e84565b60405180910390f35b3480156107db57600080fd5b506107e4611fe8565b6040516107f191906137f1565b60405180910390f35b34801561080657600080fd5b50610821600480360381019061081c9190613f47565b61200e565b005b34801561082f57600080fd5b5061084a60048036038101906108459190613783565b612070565b604051610857919061372b565b60405180910390f35b34801561086c57600080fd5b5061088760048036038101906108829190613838565b612117565b005b34801561089557600080fd5b506108b060048036038101906108ab9190613fca565b61228b565b6040516108bd9190613677565b60405180910390f35b3480156108d257600080fd5b506108ed60048036038101906108e89190613b00565b61231f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610962575061096182612417565b5b9050919050565b60606000805461097890614039565b80601f01602080910402602001604051908101604052809291908181526020018280546109a490614039565b80156109f15780601f106109c6576101008083540402835291602001916109f1565b820191906000526020600020905b8154815290600101906020018083116109d457829003601f168201915b5050505050905090565b6000610a06826124f9565b610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906140dd565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a8b82611227565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af39061416f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b1b612581565b73ffffffffffffffffffffffffffffffffffffffff161480610b4a5750610b4981610b44612581565b61228b565b5b610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090614201565b60405180910390fd5b610b938383612589565b505050565b6000600280549050905090565b610bb6610bb0612581565b82612642565b610bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bec90614293565b60405180910390fd5b610c00838383612720565b505050565b6000610c0f612581565b73ffffffffffffffffffffffffffffffffffffffff16610c2d61175e565b73ffffffffffffffffffffffffffffffffffffffff1614610c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7a906142ff565b60405180910390fd5b600e547f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610cdf91906137f1565b602060405180830381865afa158015610cfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d209190614334565b1015610d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d58906143ad565b60405180910390fd5b6000610d71600f54600e546128d9565b90508215610d855780601281905550610d8d565b806013819055505b80915050919050565b6000610da183611371565b8210610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614419565b60405180910390fd5b6000805b600280549050811015610e955760028181548110610e0757610e06614439565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610e845783821415610e77578092505050610ed9565b81610e8190614497565b91505b80610e8e90614497565b9050610de6565b506000610ed7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ece90614419565b60405180910390fd5b505b92915050565b610ee7612581565b73ffffffffffffffffffffffffffffffffffffffff16610f0561175e565b73ffffffffffffffffffffffffffffffffffffffff1614610f5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f52906142ff565b60405180910390fd5b610f63612a2c565b565b610f808383836040518060200160405280600081525061200e565b505050565b610f96610f90612581565b82612642565b610fd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcc90614552565b60405180910390fd5b610fde81612ace565b50565b610fe9612581565b73ffffffffffffffffffffffffffffffffffffffff1661100761175e565b73ffffffffffffffffffffffffffffffffffffffff161461105d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611054906142ff565b60405180910390fd5b8060098190555050565b6000611071610b98565b82106110b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a9906145be565b60405180910390fd5b819050919050565b6110c2612581565b73ffffffffffffffffffffffffffffffffffffffff166110e061175e565b73ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d906142ff565b60405180910390fd5b80600d908051906020019061114c929190613520565b5050565b6000600760009054906101000a900460ff16905090565b61116f612581565b73ffffffffffffffffffffffffffffffffffffffff1661118d61175e565b73ffffffffffffffffffffffffffffffffffffffff16146111e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111da906142ff565b60405180910390fd5b80600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000806002838154811061123e5761123d614439565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d290614650565b60405180910390fd5b80915050919050565b6000806001905060005b858590508110156113655781801561135257508373ffffffffffffffffffffffffffffffffffffffff1661133a87878481811061132e5761132d614439565b5b90506020020135611227565b73ffffffffffffffffffffffffffffffffffffffff16145b91508061135e90614497565b90506112ee565b50809150509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d9906146e2565b60405180910390fd5b600080600280549050905060005b81811015611488576002818154811061140c5761140b614439565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415611477578261147490614497565b92505b8061148190614497565b90506113f0565b50600090508192505050919050565b61149f612581565b73ffffffffffffffffffffffffffffffffffffffff166114bd61175e565b73ffffffffffffffffffffffffffffffffffffffff1614611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a906142ff565b60405180910390fd5b61151d6000612bb0565b565b611527612581565b73ffffffffffffffffffffffffffffffffffffffff1661154561175e565b73ffffffffffffffffffffffffffffffffffffffff161461159b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611592906142ff565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6115e7612581565b73ffffffffffffffffffffffffffffffffffffffff1661160561175e565b73ffffffffffffffffffffffffffffffffffffffff161461165b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611652906142ff565b60405180910390fd5b611663612c76565b565b606061167082611371565b6000106116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a990614419565b60405180910390fd5b60006116bd83611371565b905060008167ffffffffffffffff8111156116db576116da61398c565b5b6040519080825280602002602001820160405280156117095781602001602082028036833780820191505090505b50905060005b82811015611753576117218582610d96565b82828151811061173457611733614439565b5b602002602001018181525050808061174b90614497565b91505061170f565b508092505050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb795273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611816576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180d9061474e565b60405180910390fd5b6118208282612d19565b5050565b60606001805461183390614039565b80601f016020809104026020016040519081016040528092919081815260200182805461185f90614039565b80156118ac5780601f10611881576101008083540402835291602001916118ac565b820191906000526020600020905b81548152906001019060200180831161188f57829003601f168201915b5050505050905090565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006118e6611150565b15611926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191d906147ba565b60405180910390fd5b6000601054141561196c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196390614826565b60405180910390fd5b600060115414156119b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a990614826565b60405180910390fd5b600954826119c09190614846565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663590a4d6a336040518263ffffffff1660e01b8152600401611a1b91906137f1565b602060405180830381865afa158015611a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5c9190614334565b1015611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a94906148ec565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af7d6ca33360095485611aea9190614846565b6040518363ffffffff1660e01b8152600401611b0792919061490c565b600060405180830381600087803b158015611b2157600080fd5b505af1158015611b35573d6000803e3d6000fd5b505050506000611b43610b98565b9050600080600090505b84811015611cfc57611b698184611b649190614935565b612db0565b600c60008386611b799190614935565b815260200190815260200160002060006101000a81548160ff0219169083151502179055506000339050611bb78285611bb29190614935565b612dff565b15611ccf576000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663644856a7600c60008689611c0c9190614935565b815260200190815260200160002060009054906101000a900460ff166040518263ffffffff1660e01b8152600401611c449190613677565b6020604051808303816000875af1158015611c63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c8791906149a0565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611ccd5783611cc790614497565b93508091505b505b611ce4818386611cdf9190614935565b612e57565b60009050508080611cf490614497565b915050611b4d565b50600091508092505050919050565b600c6020528060005260406000206000915054906101000a900460ff1681565b611d33612581565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611da1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9890614a19565b60405180910390fd5b8060046000611dae612581565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611e5b612581565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611ea09190613677565b60405180910390a35050565b606060008383905067ffffffffffffffff811115611ecd57611ecc61398c565b5b604051908082528060200260200182016040528015611efb5781602001602082028036833780820191505090505b50905060005b84849050811015611fdd57611f2e858583818110611f2257611f21614439565b5b905060200201356124f9565b611f6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6490614a85565b60405180910390fd5b600c6000868684818110611f8457611f83614439565b5b90506020020135815260200190815260200160002060009054906101000a900460ff16828281518110611fba57611fb9614439565b5b60200260200101901515908115158152505080611fd690614497565b9050611f01565b508091505092915050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61201f612019612581565b83612642565b61205e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205590614293565b60405180910390fd5b61206a84848484612e75565b50505050565b606061207b826124f9565b6120ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b190614b17565b60405180910390fd5b60006120c4612ed1565b905060008151116120e4576040518060200160405280600081525061210f565b806120ee84612f63565b6040516020016120ff929190614bbf565b6040516020818303038152906040525b915050919050565b61211f612581565b73ffffffffffffffffffffffffffffffffffffffff1661213d61175e565b73ffffffffffffffffffffffffffffffffffffffff1614612193576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218a906142ff565b60405180910390fd5b600061219d610b98565b90506000821180156121b157506008548211155b6121f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e790614c3a565b60405180910390fd5b60005b8281101561226c5761220f818361220a9190614935565b612db0565b600c6000838561221f9190614935565b815260200190815260200160002060006101000a81548160ff0219169083151502179055506122598482846122549190614935565b612e57565b808061226490614497565b9150506121f3565b50816008600082825461227f9190614c5a565b92505081905550505050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612327612581565b73ffffffffffffffffffffffffffffffffffffffff1661234561175e565b73ffffffffffffffffffffffffffffffffffffffff161461239b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612392906142ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561240b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240290614d00565b60405180910390fd5b61241481612bb0565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124e257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124f257506124f1826130c4565b5b9050919050565b60006002805490508210801561257a5750600073ffffffffffffffffffffffffffffffffffffffff166002838154811061253657612535614439565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125fc83611227565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061264d826124f9565b61268c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268390614d92565b60405180910390fd5b600061269783611227565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061270657508373ffffffffffffffffffffffffffffffffffffffff166126ee846109fb565b73ffffffffffffffffffffffffffffffffffffffff16145b806127175750612716818561228b565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661274082611227565b73ffffffffffffffffffffffffffffffffffffffff1614612796576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161278d90614e24565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612806576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fd90614eb6565b60405180910390fd5b61281183838361312e565b61281c600082612589565b816002828154811061283157612830614439565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60007f000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca73ffffffffffffffffffffffffffffffffffffffff16634000aea07f000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb79528486600060405160200161294d929190614ed6565b6040516020818303038152906040526040518463ffffffff1660e01b815260040161297a93929190614f54565b6020604051808303816000875af1158015612999573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129bd9190614fa7565b5060006129e0846000306006600089815260200190815260200160002054613133565b905060016006600086815260200190815260200160002054612a029190614935565b6006600086815260200190815260200160002081905550612a23848261316f565b91505092915050565b612a34611150565b612a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6a90615020565b60405180910390fd5b6000600760006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa612ab7612581565b604051612ac491906137f1565b60405180910390a1565b6000612ad982611227565b9050612ae78160008461312e565b612af2600083612589565b600060028381548110612b0857612b07614439565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612c7e611150565b15612cbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cb5906147ba565b60405180910390fd5b6001600760006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612d02612581565b604051612d0f91906137f1565b60405180910390a1565b601254821415612d6457806010819055507f8285849ac2f8c43fa9e5558aff7636443132b0b98389868b53f89b3983c79545604051612d579061508c565b60405180910390a1612dac565b601354821415612dab57806011819055507f8285849ac2f8c43fa9e5558aff7636443132b0b98389868b53f89b3983c79545604051612da2906150f8565b60405180910390a15b5b5050565b60006001806011548432600143612dc79190614c5a565b4042604051602001612ddd9594939291906151a2565b6040516020818303038152906040528051906020012060001c16149050919050565b60008060056010548432600143612e169190614c5a565b4042604051602001612e2c9594939291906151a2565b6040516020818303038152906040528051906020012060001c612e4f9190615230565b149050919050565b612e718282604051806020016040528060008152506131a2565b5050565b612e80848484612720565b612e8c848484846131fd565b612ecb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec2906152d3565b60405180910390fd5b50505050565b6060600d8054612ee090614039565b80601f0160208091040260200160405190810160405280929190818152602001828054612f0c90614039565b8015612f595780601f10612f2e57610100808354040283529160200191612f59565b820191906000526020600020905b815481529060010190602001808311612f3c57829003601f168201915b5050505050905090565b60606000821415612fab576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506130bf565b600082905060005b60008214612fdd578080612fc690614497565b915050600a82612fd691906152f3565b9150612fb3565b60008167ffffffffffffffff811115612ff957612ff861398c565b5b6040519080825280601f01601f19166020018201604052801561302b5781602001600182028036833780820191505090505b5090505b600085146130b8576001826130449190614c5a565b9150600a856130539190615230565b603061305f9190614935565b60f81b81838151811061307557613074614439565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856130b191906152f3565b945061302f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b505050565b60008484848460405160200161314c9493929190615324565b6040516020818303038152906040528051906020012060001c9050949350505050565b60008282604051602001613184929190615369565b60405160208183030381529060405280519060200120905092915050565b6131ac8383613385565b6131b960008484846131fd565b6131f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ef906152d3565b60405180910390fd5b505050565b600061321e8473ffffffffffffffffffffffffffffffffffffffff1661350d565b15613378578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02613247612581565b8786866040518563ffffffff1660e01b81526004016132699493929190615395565b6020604051808303816000875af19250505080156132a557506040513d601f19601f820116820180604052508101906132a291906153f6565b60015b613328573d80600081146132d5576040519150601f19603f3d011682016040523d82523d6000602084013e6132da565b606091505b50600081511415613320576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613317906152d3565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061337d565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156133f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ec9061546f565b60405180910390fd5b6133fe816124f9565b1561343e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613435906154db565b60405180910390fd5b61344a6000838361312e565b6002829080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461352c90614039565b90600052602060002090601f01602090048101928261354e5760008555613595565b82601f1061356757805160ff1916838001178555613595565b82800160010185558215613595579182015b82811115613594578251825591602001919060010190613579565b5b5090506135a291906135a6565b5090565b5b808211156135bf5760008160009055506001016135a7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61360c816135d7565b811461361757600080fd5b50565b60008135905061362981613603565b92915050565b600060208284031215613645576136446135cd565b5b60006136538482850161361a565b91505092915050565b60008115159050919050565b6136718161365c565b82525050565b600060208201905061368c6000830184613668565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136cc5780820151818401526020810190506136b1565b838111156136db576000848401525b50505050565b6000601f19601f8301169050919050565b60006136fd82613692565b613707818561369d565b93506137178185602086016136ae565b613720816136e1565b840191505092915050565b6000602082019050818103600083015261374581846136f2565b905092915050565b6000819050919050565b6137608161374d565b811461376b57600080fd5b50565b60008135905061377d81613757565b92915050565b600060208284031215613799576137986135cd565b5b60006137a78482850161376e565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137db826137b0565b9050919050565b6137eb816137d0565b82525050565b600060208201905061380660008301846137e2565b92915050565b613815816137d0565b811461382057600080fd5b50565b6000813590506138328161380c565b92915050565b6000806040838503121561384f5761384e6135cd565b5b600061385d85828601613823565b925050602061386e8582860161376e565b9150509250929050565b6138818161374d565b82525050565b600060208201905061389c6000830184613878565b92915050565b6000806000606084860312156138bb576138ba6135cd565b5b60006138c986828701613823565b93505060206138da86828701613823565b92505060406138eb8682870161376e565b9150509250925092565b6138fe8161365c565b811461390957600080fd5b50565b60008135905061391b816138f5565b92915050565b600060208284031215613937576139366135cd565b5b60006139458482850161390c565b91505092915050565b6000819050919050565b6139618161394e565b82525050565b600060208201905061397c6000830184613958565b92915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6139c4826136e1565b810181811067ffffffffffffffff821117156139e3576139e261398c565b5b80604052505050565b60006139f66135c3565b9050613a0282826139bb565b919050565b600067ffffffffffffffff821115613a2257613a2161398c565b5b613a2b826136e1565b9050602081019050919050565b82818337600083830152505050565b6000613a5a613a5584613a07565b6139ec565b905082815260208101848484011115613a7657613a75613987565b5b613a81848285613a38565b509392505050565b600082601f830112613a9e57613a9d613982565b5b8135613aae848260208601613a47565b91505092915050565b600060208284031215613acd57613acc6135cd565b5b600082013567ffffffffffffffff811115613aeb57613aea6135d2565b5b613af784828501613a89565b91505092915050565b600060208284031215613b1657613b156135cd565b5b6000613b2484828501613823565b91505092915050565b600080fd5b600080fd5b60008083601f840112613b4d57613b4c613982565b5b8235905067ffffffffffffffff811115613b6a57613b69613b2d565b5b602083019150836020820283011115613b8657613b85613b32565b5b9250929050565b600080600060408486031215613ba657613ba56135cd565b5b600084013567ffffffffffffffff811115613bc457613bc36135d2565b5b613bd086828701613b37565b93509350506020613be386828701613823565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613c228161374d565b82525050565b6000613c348383613c19565b60208301905092915050565b6000602082019050919050565b6000613c5882613bed565b613c628185613bf8565b9350613c6d83613c09565b8060005b83811015613c9e578151613c858882613c28565b9750613c9083613c40565b925050600181019050613c71565b5085935050505092915050565b60006020820190508181036000830152613cc58184613c4d565b905092915050565b613cd68161394e565b8114613ce157600080fd5b50565b600081359050613cf381613ccd565b92915050565b60008060408385031215613d1057613d0f6135cd565b5b6000613d1e85828601613ce4565b9250506020613d2f8582860161376e565b9150509250929050565b60008060408385031215613d5057613d4f6135cd565b5b6000613d5e85828601613823565b9250506020613d6f8582860161390c565b9150509250929050565b60008060208385031215613d9057613d8f6135cd565b5b600083013567ffffffffffffffff811115613dae57613dad6135d2565b5b613dba85828601613b37565b92509250509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613dfb8161365c565b82525050565b6000613e0d8383613df2565b60208301905092915050565b6000602082019050919050565b6000613e3182613dc6565b613e3b8185613dd1565b9350613e4683613de2565b8060005b83811015613e77578151613e5e8882613e01565b9750613e6983613e19565b925050600181019050613e4a565b5085935050505092915050565b60006020820190508181036000830152613e9e8184613e26565b905092915050565b600067ffffffffffffffff821115613ec157613ec061398c565b5b613eca826136e1565b9050602081019050919050565b6000613eea613ee584613ea6565b6139ec565b905082815260208101848484011115613f0657613f05613987565b5b613f11848285613a38565b509392505050565b600082601f830112613f2e57613f2d613982565b5b8135613f3e848260208601613ed7565b91505092915050565b60008060008060808587031215613f6157613f606135cd565b5b6000613f6f87828801613823565b9450506020613f8087828801613823565b9350506040613f918782880161376e565b925050606085013567ffffffffffffffff811115613fb257613fb16135d2565b5b613fbe87828801613f19565b91505092959194509250565b60008060408385031215613fe157613fe06135cd565b5b6000613fef85828601613823565b925050602061400085828601613823565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061405157607f821691505b602082108114156140655761406461400a565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006140c7602c8361369d565b91506140d28261406b565b604082019050919050565b600060208201905081810360008301526140f6816140ba565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b600061415960218361369d565b9150614164826140fd565b604082019050919050565b600060208201905081810360008301526141888161414c565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b60006141eb60388361369d565b91506141f68261418f565b604082019050919050565b6000602082019050818103600083015261421a816141de565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b600061427d60318361369d565b915061428882614221565b604082019050919050565b600060208201905081810360008301526142ac81614270565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142e960208361369d565b91506142f4826142b3565b602082019050919050565b60006020820190508181036000830152614318816142dc565b9050919050565b60008151905061432e81613757565b92915050565b60006020828403121561434a576143496135cd565b5b60006143588482850161431f565b91505092915050565b7f4e6f7420656e6f756768204c494e4b0000000000000000000000000000000000600082015250565b6000614397600f8361369d565b91506143a282614361565b602082019050919050565b600060208201905081810360008301526143c68161438a565b9050919050565b7f455243373231456e756d3a206f776e657220696f6f6200000000000000000000600082015250565b600061440360168361369d565b915061440e826143cd565b602082019050919050565b60006020820190508181036000830152614432816143f6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144a28261374d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144d5576144d4614468565b5b600182019050919050565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b600061453c60308361369d565b9150614547826144e0565b604082019050919050565b6000602082019050818103600083015261456b8161452f565b9050919050565b7f455243373231456e756d3a20676c6f62616c20696f6f62000000000000000000600082015250565b60006145a860178361369d565b91506145b382614572565b602082019050919050565b600060208201905081810360008301526145d78161459b565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b600061463a60298361369d565b9150614645826145de565b604082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b60006146cc602a8361369d565b91506146d782614670565b604082019050919050565b600060208201905081810360008301526146fb816146bf565b9050919050565b7f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c00600082015250565b6000614738601f8361369d565b915061474382614702565b602082019050919050565b600060208201905081810360008301526147678161472b565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b60006147a460108361369d565b91506147af8261476e565b602082019050919050565b600060208201905081810360008301526147d381614797565b9050919050565b7f53656564206e6f74207365740000000000000000000000000000000000000000600082015250565b6000614810600c8361369d565b915061481b826147da565b602082019050919050565b6000602082019050818103600083015261483f81614803565b9050919050565b60006148518261374d565b915061485c8361374d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561489557614894614468565b5b828202905092915050565b7f4e4f5420454e4f55474800000000000000000000000000000000000000000000600082015250565b60006148d6600a8361369d565b91506148e1826148a0565b602082019050919050565b60006020820190508181036000830152614905816148c9565b9050919050565b600060408201905061492160008301856137e2565b61492e6020830184613878565b9392505050565b60006149408261374d565b915061494b8361374d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149805761497f614468565b5b828201905092915050565b60008151905061499a8161380c565b92915050565b6000602082840312156149b6576149b56135cd565b5b60006149c48482850161498b565b91505092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a0360198361369d565b9150614a0e826149cd565b602082019050919050565b60006020820190508181036000830152614a32816149f6565b9050919050565b7f546f6b656e20646f65736e277420657869737400000000000000000000000000600082015250565b6000614a6f60138361369d565b9150614a7a82614a39565b602082019050919050565b60006020820190508181036000830152614a9e81614a62565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b0160218361369d565b9150614b0c82614aa5565b604082019050919050565b60006020820190508181036000830152614b3081614af4565b9050919050565b600081905092915050565b6000614b4d82613692565b614b578185614b37565b9350614b678185602086016136ae565b80840191505092915050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000614ba9600583614b37565b9150614bb482614b73565b600582019050919050565b6000614bcb8285614b42565b9150614bd78284614b42565b9150614be282614b9c565b91508190509392505050565b7f4e6f7420656e6f7567682072657365727665206c65667420666f72207465616d600082015250565b6000614c2460208361369d565b9150614c2f82614bee565b602082019050919050565b60006020820190508181036000830152614c5381614c17565b9050919050565b6000614c658261374d565b9150614c708361374d565b925082821015614c8357614c82614468565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614cea60268361369d565b9150614cf582614c8e565b604082019050919050565b60006020820190508181036000830152614d1981614cdd565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614d7c602c8361369d565b9150614d8782614d20565b604082019050919050565b60006020820190508181036000830152614dab81614d6f565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614e0e60298361369d565b9150614e1982614db2565b604082019050919050565b60006020820190508181036000830152614e3d81614e01565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ea060248361369d565b9150614eab82614e44565b604082019050919050565b60006020820190508181036000830152614ecf81614e93565b9050919050565b6000604082019050614eeb6000830185613958565b614ef86020830184613878565b9392505050565b600081519050919050565b600082825260208201905092915050565b6000614f2682614eff565b614f308185614f0a565b9350614f408185602086016136ae565b614f49816136e1565b840191505092915050565b6000606082019050614f6960008301866137e2565b614f766020830185613878565b8181036040830152614f888184614f1b565b9050949350505050565b600081519050614fa1816138f5565b92915050565b600060208284031215614fbd57614fbc6135cd565b5b6000614fcb84828501614f92565b91505092915050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b600061500a60148361369d565b915061501582614fd4565b602082019050919050565b6000602082019050818103600083015261503981614ffd565b9050919050565b7f5269736b00000000000000000000000000000000000000000000000000000000600082015250565b600061507660048361369d565b915061508182615040565b602082019050919050565b600060208201905081810360008301526150a581615069565b9050919050565b7f46616374696f6e00000000000000000000000000000000000000000000000000600082015250565b60006150e260078361369d565b91506150ed826150ac565b602082019050919050565b60006020820190508181036000830152615111816150d5565b9050919050565b6000819050919050565b61513361512e8261374d565b615118565b82525050565b60008160601b9050919050565b600061515182615139565b9050919050565b600061516382615146565b9050919050565b61517b615176826137d0565b615158565b82525050565b6000819050919050565b61519c6151978261394e565b615181565b82525050565b60006151ae8288615122565b6020820191506151be8287615122565b6020820191506151ce828661516a565b6014820191506151de828561518b565b6020820191506151ee8284615122565b6020820191508190509695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061523b8261374d565b91506152468361374d565b92508261525657615255615201565b5b828206905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006152bd60328361369d565b91506152c882615261565b604082019050919050565b600060208201905081810360008301526152ec816152b0565b9050919050565b60006152fe8261374d565b91506153098361374d565b92508261531957615318615201565b5b828204905092915050565b60006080820190506153396000830187613958565b6153466020830186613878565b61535360408301856137e2565b6153606060830184613878565b95945050505050565b6000615375828561518b565b6020820191506153858284615122565b6020820191508190509392505050565b60006080820190506153aa60008301876137e2565b6153b760208301866137e2565b6153c46040830185613878565b81810360608301526153d68184614f1b565b905095945050505050565b6000815190506153f081613603565b92915050565b60006020828403121561540c5761540b6135cd565b5b600061541a848285016153e1565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b600061545960208361369d565b915061546482615423565b602082019050919050565b600060208201905081810360008301526154888161544c565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b60006154c5601c8361369d565b91506154d08261548f565b602082019050919050565b600060208201905081810360008301526154f4816154b8565b905091905056fea2646970667358221220d28039bc565d79a94fe15cf4d7c8922e9957caaa5d96bbcf8a515b320979317864736f6c634300080a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb7952000000000000000000000000514910771af9ca656af840dff83e8264ecf986caaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af4450000000000000000000000000000000000000000000000001bc16d674ec80000000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f626c6f6f642d736865642d62656172732f6d657461646174612d67656e312f0000
-----Decoded View---------------
Arg [0] : initBaseURI_ (string): https://storage.googleapis.com/blood-shed-bears/metadata-gen1/
Arg [1] : vrfCoordinatorAddr_ (address): 0xf0d54349aDdcf704F77AE15b96510dEA15cb7952
Arg [2] : linkTokenAddr_ (address): 0x514910771AF9Ca656af840dff83E8264EcF986CA
Arg [3] : vrfKeyHash_ (bytes32): 0xaa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445
Arg [4] : fee_ (uint256): 2000000000000000000
-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 000000000000000000000000f0d54349addcf704f77ae15b96510dea15cb7952
Arg [2] : 000000000000000000000000514910771af9ca656af840dff83e8264ecf986ca
Arg [3] : aa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af445
Arg [4] : 0000000000000000000000000000000000000000000000001bc16d674ec80000
Arg [5] : 000000000000000000000000000000000000000000000000000000000000003e
Arg [6] : 68747470733a2f2f73746f726167652e676f6f676c65617069732e636f6d2f62
Arg [7] : 6c6f6f642d736865642d62656172732f6d657461646174612d67656e312f0000
Deployed Bytecode Sourcemap
50132:6256:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33335:225;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26796:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27430:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27012:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34496:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28128:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55088:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33566:500;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55928:65;;;;;;;;;;;;;:::i;:::-;;28473:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32982:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51731:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34612:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53849:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48634:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51593:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26551:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53961:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26123:422;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3199:94;;;;;;;;;;;;;:::i;:::-;;51453:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55859:61;;;;;;;;;;;;;:::i;:::-;;34072:418;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2548:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47397:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26902:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50416:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51827:1135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50587:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27657:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56001:382;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50501:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28664:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52970:353;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53331:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27958:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3448:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33335:225;33438:4;33477:35;33462:50;;;:11;:50;;;;:90;;;;33516:36;33540:11;33516:23;:36::i;:::-;33462:90;33455:97;;33335:225;;;:::o;26796:100::-;26850:13;26883:5;26876:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26796:100;:::o;27430:221::-;27506:7;27534:16;27542:7;27534;:16::i;:::-;27526:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27619:15;:24;27635:7;27619:24;;;;;;;;;;;;;;;;;;;;;27612:31;;27430:221;;;:::o;27012:412::-;27093:13;27109:24;27125:7;27109:15;:24::i;:::-;27093:40;;27158:5;27152:11;;:2;:11;;;;27144:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27252:5;27236:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27261:37;27278:5;27285:12;:10;:12::i;:::-;27261:16;:37::i;:::-;27236:62;27214:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27395:21;27404:2;27408:7;27395:8;:21::i;:::-;27082:342;27012:412;;:::o;34496:110::-;34557:7;34584;:14;;;;34577:21;;34496:110;:::o;28128:339::-;28323:41;28342:12;:10;:12::i;:::-;28356:7;28323:18;:41::i;:::-;28315:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28431:28;28441:4;28447:2;28451:7;28431:9;:28::i;:::-;28128:339;;;:::o;55088:396::-;55157:7;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55218:6:::1;;55185:4;:14;;;55208:4;55185:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:39;;55177:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;55255:17;55275:37;55293:10;;55305:6;;55275:17;:37::i;:::-;55255:57;;55327:8;55323:127;;;55368:9;55352:13;:25;;;;55323:127;;;55429:9;55410:16;:28;;;;55323:127;55467:9;55460:16;;;55088:396:::0;;;:::o;33566:500::-;33655:15;33699:24;33717:5;33699:17;:24::i;:::-;33691:5;:32;33683:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33761:10;33787:6;33782:226;33799:7;:14;;;;33795:1;:18;33782:226;;;33848:7;33856:1;33848:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33839:19;;:5;:19;;;33835:162;;;33892:5;33883;:14;33879:102;;;33928:1;33921:8;;;;;;33879:102;33974:7;;;;:::i;:::-;;;33835:162;33815:3;;;;:::i;:::-;;;33782:226;;;;34026:5;34018:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;33672:394;33566:500;;;;;:::o;55928:65::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55975:10:::1;:8;:10::i;:::-;55928:65::o:0;28473:185::-;28611:39;28628:4;28634:2;28638:7;28611:39;;;;;;;;;;;;:16;:39::i;:::-;28473:185;;;:::o;32982:245::-;33100:41;33119:12;:10;:12::i;:::-;33133:7;33100:18;:41::i;:::-;33092:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;33205:14;33211:7;33205:5;:14::i;:::-;32982:245;:::o;51731:88::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51803:8:::1;51796:4;:15;;;;51731:88:::0;:::o;34612:194::-;34687:7;34723:24;:22;:24::i;:::-;34715:5;:32;34707:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34793:5;34786:12;;34612:194;;;:::o;53849:104::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53934:11:::1;53924:7;:21;;;;;;;;;;;;:::i;:::-;;53849:104:::0;:::o;48634:86::-;48681:4;48705:7;;;;;;;;;;;48698:14;;48634:86;:::o;51593:130::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51699:16:::1;51679:17;;:36;;;;;;;;;;;;;;;;;;51593:130:::0;:::o;26551:239::-;26623:7;26643:13;26659:7;26667;26659:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26643:32;;26711:1;26694:19;;:5;:19;;;;26686:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26777:5;26770:12;;;26551:239;;;:::o;53961:316::-;54056:4;54073:14;54090:4;54073:21;;54112:9;54107:134;54131:9;;:16;;54127:1;:20;54107:134;;;54181:9;:48;;;;;54220:8;54195:33;;:21;54203:9;;54213:1;54203:12;;;;;;;:::i;:::-;;;;;;;;54195:7;:21::i;:::-;:33;;;54181:48;54169:60;;54149:3;;;;:::i;:::-;;;54107:134;;;;54260:9;54253:16;;;53961:316;;;;;:::o;26123:422::-;26195:7;26240:1;26223:19;;:5;:19;;;;26215:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;26300:10;26325:11;26339:7;:14;;;;26325:28;;26369:6;26364:127;26385:6;26381:1;:10;26364:127;;;26426:7;26434:1;26426:10;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26417:19;;:5;:19;;;26413:67;;;26457:7;;;;:::i;:::-;;;26413:67;26393:3;;;;:::i;:::-;;;26364:127;;;;26501:13;;;26532:5;26525:12;;;;26123:422;;;:::o;3199:94::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3264:21:::1;3282:1;3264:9;:21::i;:::-;3199:94::o:0;51453:132::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51561:16:::1;51540:18;;:37;;;;;;;;;;;;;;;;;;51453:132:::0;:::o;55859:61::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55904:8:::1;:6;:8::i;:::-;55859:61::o:0;34072:418::-;34131:16;34172:24;34190:5;34172:17;:24::i;:::-;34168:1;:28;34160:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;34234:18;34255:16;34265:5;34255:9;:16::i;:::-;34234:37;;34282:25;34324:10;34310:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34282:53;;34351:9;34346:111;34370:10;34366:1;:14;34346:111;;;34416:29;34436:5;34443:1;34416:19;:29::i;:::-;34402:8;34411:1;34402:11;;;;;;;;:::i;:::-;;;;;;;:43;;;;;34382:3;;;;;:::i;:::-;;;;34346:111;;;;34474:8;34467:15;;;;34072:418;;;:::o;2548:87::-;2594:7;2621:6;;;;;;;;;;;2614:13;;2548:87;:::o;47397:220::-;47508:14;47494:28;;:10;:28;;;47486:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;47569:40;47587:9;47598:10;47569:17;:40::i;:::-;47397:220;;:::o;26902:104::-;26958:13;26991:7;26984:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26902:104;:::o;50416:78::-;;;;;;;;;;;;;:::o;51827:1135::-;51902:7;48960:8;:6;:8::i;:::-;48959:9;48951:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51944:1:::1;51932:8;;:13;;51924:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;51996:1;51981:11;;:16;;51973:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;52120:4;;52106:11;:18;;;;:::i;:::-;52055;;;;;;;;;;;52035:55;;;52091:10;52035:67;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:89;;52027:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;52170:18;;;;;;;;;;;52150:45;;;52196:10;52222:4;;52208:11;:18;;;;:::i;:::-;52150:77;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52240:19;52262:13;:11;:13::i;:::-;52240:35;;52286:17;52319:9:::0;52331:1:::1;52319:13;;52314:581;52338:11;52334:1;:15;52314:581;;;52406:28;52432:1;52418:11;:15;;;;:::i;:::-;52406:11;:28::i;:::-;52373:13;:30;52401:1;52387:11;:15;;;;:::i;:::-;52373:30;;;;;;;;;;;;:61;;;;;;;;;;;;;;;;;;52451:17;52471:10;52451:30;;52499:24;52521:1;52507:11;:15;;;;:::i;:::-;52499:7;:24::i;:::-;52496:301;;;52544:14;52572:17;;;;;;;;;;;52561:50;;;52612:13;:30;52640:1;52626:11;:15;;;;:::i;:::-;52612:30;;;;;;;;;;;;;;;;;;;;;52561:82;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52544:99;;52683:1;52665:20;;:6;:20;;;52662:120;;52710:11;;;;:::i;:::-;;;52756:6;52744:18;;52662:120;52525:272;52496:301;52813:37;52823:9;52848:1;52834:11;:15;;;;:::i;:::-;52813:9;:37::i;:::-;52867:16;;;52356:539;52351:3;;;;;:::i;:::-;;;;52314:581;;;;52907:18;;;52945:9;52938:16;;;;51827:1135:::0;;;:::o;50587:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;27657:295::-;27772:12;:10;:12::i;:::-;27760:24;;:8;:24;;;;27752:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;27872:8;27827:18;:32;27846:12;:10;:12::i;:::-;27827:32;;;;;;;;;;;;;;;:42;27860:8;27827:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;27925:8;27896:48;;27911:12;:10;:12::i;:::-;27896:48;;;27935:8;27896:48;;;;;;:::i;:::-;;;;;;;;27657:295;;:::o;56001:382::-;56075:13;56101:22;56137:9;;:16;;56126:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56101:53;;56170:9;56165:183;56189:9;;:16;;56185:1;:20;56165:183;;;56235:21;56243:9;;56253:1;56243:12;;;;;;;:::i;:::-;;;;;;;;56235:7;:21::i;:::-;56227:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;56309:13;:27;56323:9;;56333:1;56323:12;;;;;;;:::i;:::-;;;;;;;;56309:27;;;;;;;;;;;;;;;;;;;;;56295:8;56304:1;56295:11;;;;;;;;:::i;:::-;;;;;;;:41;;;;;;;;;;;56207:3;;;;:::i;:::-;;;56165:183;;;;56367:8;56360:15;;;56001:382;;;;:::o;50501:77::-;;;;;;;;;;;;;:::o;28664:328::-;28839:41;28858:12;:10;:12::i;:::-;28872:7;28839:18;:41::i;:::-;28831:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28945:39;28959:4;28965:2;28969:7;28978:5;28945:13;:39::i;:::-;28664:328;;;;:::o;52970:353::-;53046:13;53080:17;53088:8;53080:7;:17::i;:::-;53072:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;53146:28;53177:10;:8;:10::i;:::-;53146:41;;53236:1;53211:14;53205:28;:32;:110;;;;;;;;;;;;;;;;;53264:14;53280:19;:8;:17;:19::i;:::-;53247:62;;;;;;;;;:::i;:::-;;;;;;;;;;;;;53205:110;53198:117;;;52970:353;;;:::o;53331:510::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53415:14:::1;53432:13;:11;:13::i;:::-;53415:30;;53495:1;53478:14;:18;:65;;;;;53518:25;;53500:14;:43;;53478:65;53456:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;53619:9;53614:166;53638:14;53634:1;:18;53614:166;;;53704:23;53725:1;53716:6;:10;;;;:::i;:::-;53704:11;:23::i;:::-;53676:13;:25;53699:1;53690:6;:10;;;;:::i;:::-;53676:25;;;;;;;;;;;;:51;;;;;;;;;;;;;;;;;;53742:26;53752:3;53766:1;53757:6;:10;;;;:::i;:::-;53742:9;:26::i;:::-;53654:3;;;;;:::i;:::-;;;;53614:166;;;;53819:14;53790:25;;:43;;;;;;;:::i;:::-;;;;;;;;53404:437;53331:510:::0;;:::o;27958:164::-;28055:4;28079:18;:25;28098:5;28079:25;;;;;;;;;;;;;;;:35;28105:8;28079:35;;;;;;;;;;;;;;;;;;;;;;;;;28072:42;;27958:164;;;;:::o;3448:192::-;2779:12;:10;:12::i;:::-;2768:23;;:7;:5;:7::i;:::-;:23;;;2760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3557:1:::1;3537:22;;:8;:22;;;;3529:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3613:19;3623:8;3613:9;:19::i;:::-;3448:192:::0;:::o;25824:293::-;25926:4;25974:25;25959:40;;;:11;:40;;;;:101;;;;26027:33;26012:48;;;:11;:48;;;;25959:101;:150;;;;26073:36;26097:11;26073:23;:36::i;:::-;25959:150;25943:166;;25824:293;;;:::o;29319:155::-;29384:4;29418:7;:14;;;;29408:7;:24;:58;;;;;29464:1;29436:30;;:7;29444;29436:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:30;;;;29408:58;29401:65;;29319:155;;;:::o;1397:98::-;1450:7;1477:10;1470:17;;1397:98;:::o;31492:175::-;31594:2;31567:15;:24;31583:7;31567:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31651:7;31647:2;31612:47;;31621:24;31637:7;31621:15;:24::i;:::-;31612:47;;;;;;;;;;;;31492:175;;:::o;29480:349::-;29573:4;29598:16;29606:7;29598;:16::i;:::-;29590:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29674:13;29690:24;29706:7;29690:15;:24::i;:::-;29674:40;;29744:5;29733:16;;:7;:16;;;:51;;;;29777:7;29753:31;;:20;29765:7;29753:11;:20::i;:::-;:31;;;29733:51;:87;;;;29788:32;29805:5;29812:7;29788:16;:32::i;:::-;29733:87;29725:96;;;29480:349;;;;:::o;30969:517::-;31129:4;31101:32;;:24;31117:7;31101:15;:24::i;:::-;:32;;;31093:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;31212:1;31198:16;;:2;:16;;;;31190:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31268:39;31289:4;31295:2;31299:7;31268:20;:39::i;:::-;31372:29;31389:1;31393:7;31372:8;:29::i;:::-;31431:2;31412:7;31420;31412:16;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31470:7;31466:2;31451:27;;31460:4;31451:27;;;;;;;;;;;;30969:517;;;:::o;45424:1088::-;45501:17;45531:4;:20;;;45552:14;45568:4;45585:8;44248:1;45574:43;;;;;;;;;:::i;:::-;;;;;;;;;;;;;45531:87;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;45869:15;45887:82;45904:8;44248:1;45945:4;45952:6;:16;45959:8;45952:16;;;;;;;;;;;;45887;:82::i;:::-;45869:100;;46453:1;46434:6;:16;46441:8;46434:16;;;;;;;;;;;;:20;;;;:::i;:::-;46415:6;:16;46422:8;46415:16;;;;;;;;;;;:39;;;;46472:32;46486:8;46496:7;46472:13;:32::i;:::-;46465:39;;;45424:1088;;;;:::o;49693:120::-;49237:8;:6;:8::i;:::-;49229:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;49762:5:::1;49752:7;;:15;;;;;;;;;;;;;;;;;;49783:22;49792:12;:10;:12::i;:::-;49783:22;;;;;;:::i;:::-;;;;;;;;49693:120::o:0;30630:333::-;30690:13;30706:24;30722:7;30706:15;:24::i;:::-;30690:40;;30743:48;30764:5;30779:1;30783:7;30743:20;:48::i;:::-;30832:29;30849:1;30853:7;30832:8;:29::i;:::-;30899:1;30872:7;30880;30872:16;;;;;;;;:::i;:::-;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30947:7;30943:1;30919:36;;30928:5;30919:36;;;;;;;;;;;;30679:284;30630:333;:::o;3648:173::-;3704:16;3723:6;;;;;;;;;;;3704:25;;3749:8;3740:6;;:17;;;;;;;;;;;;;;;;;;3804:8;3773:40;;3794:8;3773:40;;;;;;;;;;;;3693:128;3648:173;:::o;49434:118::-;48960:8;:6;:8::i;:::-;48959:9;48951:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;49504:4:::1;49494:7;;:14;;;;;;;;;;;;;;;;;;49524:20;49531:12;:10;:12::i;:::-;49524:20;;;;;;:::i;:::-;;;;;;;;49434:118::o:0;55492:359::-;55604:13;;55591:9;:26;55587:257;;;55645:10;55634:8;:21;;;;55675;;;;;;:::i;:::-;;;;;;;;55587:257;;;55731:16;;55718:9;:29;55714:130;;;55778:10;55764:11;:24;;;;55808;;;;;;:::i;:::-;;;;;;;;55714:130;55587:257;55492:359;;:::o;54683:397::-;54744:4;55071:1;55066;54857:11;;54891:7;54921:9;54978:1;54963:12;:16;;;;:::i;:::-;54953:27;55003:15;54818:219;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54790:262;;;;;;54768:295;;:299;:304;54761:311;;54683:397;;;:::o;54285:390::-;54342:4;54666:1;54661;54455:8;;54486:7;54516:9;54573:1;54558:12;:16;;;;:::i;:::-;54548:27;54598:15;54416:216;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;54388:259;;;;;;54366:292;;:296;;;;:::i;:::-;:301;54359:308;;54285:390;;;:::o;29835:110::-;29911:26;29921:2;29925:7;29911:26;;;;;;;;;;;;:9;:26::i;:::-;29835:110;;:::o;28998:315::-;29155:28;29165:4;29171:2;29175:7;29155:9;:28::i;:::-;29202:48;29225:4;29231:2;29235:7;29244:5;29202:22;:48::i;:::-;29194:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28998:315;;;;:::o;51346:99::-;51397:13;51430:7;51423:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51346:99;:::o;4081:723::-;4137:13;4367:1;4358:5;:10;4354:53;;;4385:10;;;;;;;;;;;;;;;;;;;;;4354:53;4417:12;4432:5;4417:20;;4448:14;4473:78;4488:1;4480:4;:9;4473:78;;4506:8;;;;;:::i;:::-;;;;4537:2;4529:10;;;;;:::i;:::-;;;4473:78;;;4561:19;4593:6;4583:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4561:39;;4611:154;4627:1;4618:5;:10;4611:154;;4655:1;4645:11;;;;;:::i;:::-;;;4722:2;4714:5;:10;;;;:::i;:::-;4701:2;:24;;;;:::i;:::-;4688:39;;4671:6;4678;4671:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4751:2;4742:11;;;;;:::i;:::-;;;4611:154;;;4789:6;4775:21;;;;;4081:723;;;;:::o;25177:157::-;25262:4;25301:25;25286:40;;;:11;:40;;;;25279:47;;25177:157;;;:::o;32478:126::-;;;;:::o;36792:271::-;36957:7;37013:8;37023:9;37034:10;37046:6;37002:51;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;36992:62;;;;;;36984:71;;36977:78;;36792:271;;;;;;:::o;37460:174::-;37547:7;37601:8;37611:13;37584:41;;;;;;;;;:::i;:::-;;;;;;;;;;;;;37574:52;;;;;;37567:59;;37460:174;;;;:::o;29951:321::-;30081:18;30087:2;30091:7;30081:5;:18::i;:::-;30132:54;30163:1;30167:2;30171:7;30180:5;30132:22;:54::i;:::-;30110:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29951:321;;;:::o;31673:799::-;31828:4;31849:15;:2;:13;;;:15::i;:::-;31845:620;;;31901:2;31885:36;;;31922:12;:10;:12::i;:::-;31936:4;31942:7;31951:5;31885:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;31881:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32144:1;32127:6;:13;:18;32123:272;;;32170:60;;;;;;;;;;:::i;:::-;;;;;;;;32123:272;32345:6;32339:13;32330:6;32326:2;32322:15;32315:38;31881:529;32018:41;;;32008:51;;;:6;:51;;;;32001:58;;;;;31845:620;32449:4;32442:11;;31673:799;;;;;;;:::o;30278:346::-;30372:1;30358:16;;:2;:16;;;;30350:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30431:16;30439:7;30431;:16::i;:::-;30430:17;30422:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30493:45;30522:1;30526:2;30530:7;30493:20;:45::i;:::-;30549:7;30562:2;30549:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30608:7;30604:2;30583:33;;30600:1;30583:33;;;;;;;;;;;;30278:346;;:::o;17121:387::-;17181:4;17389:12;17456:7;17444:20;17436:28;;17499:1;17492:4;:8;17485:15;;;17121:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:116::-;5985:21;6000:5;5985:21;:::i;:::-;5978:5;5975:32;5965:60;;6021:1;6018;6011:12;5965:60;5915:116;:::o;6037:133::-;6080:5;6118:6;6105:20;6096:29;;6134:30;6158:5;6134:30;:::i;:::-;6037:133;;;;:::o;6176:323::-;6232:6;6281:2;6269:9;6260:7;6256:23;6252:32;6249:119;;;6287:79;;:::i;:::-;6249:119;6407:1;6432:50;6474:7;6465:6;6454:9;6450:22;6432:50;:::i;:::-;6422:60;;6378:114;6176:323;;;;:::o;6505:77::-;6542:7;6571:5;6560:16;;6505:77;;;:::o;6588:118::-;6675:24;6693:5;6675:24;:::i;:::-;6670:3;6663:37;6588:118;;:::o;6712:222::-;6805:4;6843:2;6832:9;6828:18;6820:26;;6856:71;6924:1;6913:9;6909:17;6900:6;6856:71;:::i;:::-;6712:222;;;;:::o;6940:117::-;7049:1;7046;7039:12;7063:117;7172:1;7169;7162:12;7186:180;7234:77;7231:1;7224:88;7331:4;7328:1;7321:15;7355:4;7352:1;7345:15;7372:281;7455:27;7477:4;7455:27;:::i;:::-;7447:6;7443:40;7585:6;7573:10;7570:22;7549:18;7537:10;7534:34;7531:62;7528:88;;;7596:18;;:::i;:::-;7528:88;7636:10;7632:2;7625:22;7415:238;7372:281;;:::o;7659:129::-;7693:6;7720:20;;:::i;:::-;7710:30;;7749:33;7777:4;7769:6;7749:33;:::i;:::-;7659:129;;;:::o;7794:308::-;7856:4;7946:18;7938:6;7935:30;7932:56;;;7968:18;;:::i;:::-;7932:56;8006:29;8028:6;8006:29;:::i;:::-;7998:37;;8090:4;8084;8080:15;8072:23;;7794:308;;;:::o;8108:154::-;8192:6;8187:3;8182;8169:30;8254:1;8245:6;8240:3;8236:16;8229:27;8108:154;;;:::o;8268:412::-;8346:5;8371:66;8387:49;8429:6;8387:49;:::i;:::-;8371:66;:::i;:::-;8362:75;;8460:6;8453:5;8446:21;8498:4;8491:5;8487:16;8536:3;8527:6;8522:3;8518:16;8515:25;8512:112;;;8543:79;;:::i;:::-;8512:112;8633:41;8667:6;8662:3;8657;8633:41;:::i;:::-;8352:328;8268:412;;;;;:::o;8700:340::-;8756:5;8805:3;8798:4;8790:6;8786:17;8782:27;8772:122;;8813:79;;:::i;:::-;8772:122;8930:6;8917:20;8955:79;9030:3;9022:6;9015:4;9007:6;9003:17;8955:79;:::i;:::-;8946:88;;8762:278;8700:340;;;;:::o;9046:509::-;9115:6;9164:2;9152:9;9143:7;9139:23;9135:32;9132:119;;;9170:79;;:::i;:::-;9132:119;9318:1;9307:9;9303:17;9290:31;9348:18;9340:6;9337:30;9334:117;;;9370:79;;:::i;:::-;9334:117;9475:63;9530:7;9521:6;9510:9;9506:22;9475:63;:::i;:::-;9465:73;;9261:287;9046:509;;;;:::o;9561:329::-;9620:6;9669:2;9657:9;9648:7;9644:23;9640:32;9637:119;;;9675:79;;:::i;:::-;9637:119;9795:1;9820:53;9865:7;9856:6;9845:9;9841:22;9820:53;:::i;:::-;9810:63;;9766:117;9561:329;;;;:::o;9896:117::-;10005:1;10002;9995:12;10019:117;10128:1;10125;10118:12;10159:568;10232:8;10242:6;10292:3;10285:4;10277:6;10273:17;10269:27;10259:122;;10300:79;;:::i;:::-;10259:122;10413:6;10400:20;10390:30;;10443:18;10435:6;10432:30;10429:117;;;10465:79;;:::i;:::-;10429:117;10579:4;10571:6;10567:17;10555:29;;10633:3;10625:4;10617:6;10613:17;10603:8;10599:32;10596:41;10593:128;;;10640:79;;:::i;:::-;10593:128;10159:568;;;;;:::o;10733:704::-;10828:6;10836;10844;10893:2;10881:9;10872:7;10868:23;10864:32;10861:119;;;10899:79;;:::i;:::-;10861:119;11047:1;11036:9;11032:17;11019:31;11077:18;11069:6;11066:30;11063:117;;;11099:79;;:::i;:::-;11063:117;11212:80;11284:7;11275:6;11264:9;11260:22;11212:80;:::i;:::-;11194:98;;;;10990:312;11341:2;11367:53;11412:7;11403:6;11392:9;11388:22;11367:53;:::i;:::-;11357:63;;11312:118;10733:704;;;;;:::o;11443:114::-;11510:6;11544:5;11538:12;11528:22;;11443:114;;;:::o;11563:184::-;11662:11;11696:6;11691:3;11684:19;11736:4;11731:3;11727:14;11712:29;;11563:184;;;;:::o;11753:132::-;11820:4;11843:3;11835:11;;11873:4;11868:3;11864:14;11856:22;;11753:132;;;:::o;11891:108::-;11968:24;11986:5;11968:24;:::i;:::-;11963:3;11956:37;11891:108;;:::o;12005:179::-;12074:10;12095:46;12137:3;12129:6;12095:46;:::i;:::-;12173:4;12168:3;12164:14;12150:28;;12005:179;;;;:::o;12190:113::-;12260:4;12292;12287:3;12283:14;12275:22;;12190:113;;;:::o;12339:732::-;12458:3;12487:54;12535:5;12487:54;:::i;:::-;12557:86;12636:6;12631:3;12557:86;:::i;:::-;12550:93;;12667:56;12717:5;12667:56;:::i;:::-;12746:7;12777:1;12762:284;12787:6;12784:1;12781:13;12762:284;;;12863:6;12857:13;12890:63;12949:3;12934:13;12890:63;:::i;:::-;12883:70;;12976:60;13029:6;12976:60;:::i;:::-;12966:70;;12822:224;12809:1;12806;12802:9;12797:14;;12762:284;;;12766:14;13062:3;13055:10;;12463:608;;;12339:732;;;;:::o;13077:373::-;13220:4;13258:2;13247:9;13243:18;13235:26;;13307:9;13301:4;13297:20;13293:1;13282:9;13278:17;13271:47;13335:108;13438:4;13429:6;13335:108;:::i;:::-;13327:116;;13077:373;;;;:::o;13456:122::-;13529:24;13547:5;13529:24;:::i;:::-;13522:5;13519:35;13509:63;;13568:1;13565;13558:12;13509:63;13456:122;:::o;13584:139::-;13630:5;13668:6;13655:20;13646:29;;13684:33;13711:5;13684:33;:::i;:::-;13584:139;;;;:::o;13729:474::-;13797:6;13805;13854:2;13842:9;13833:7;13829:23;13825:32;13822:119;;;13860:79;;:::i;:::-;13822:119;13980:1;14005:53;14050:7;14041:6;14030:9;14026:22;14005:53;:::i;:::-;13995:63;;13951:117;14107:2;14133:53;14178:7;14169:6;14158:9;14154:22;14133:53;:::i;:::-;14123:63;;14078:118;13729:474;;;;;:::o;14209:468::-;14274:6;14282;14331:2;14319:9;14310:7;14306:23;14302:32;14299:119;;;14337:79;;:::i;:::-;14299:119;14457:1;14482:53;14527:7;14518:6;14507:9;14503:22;14482:53;:::i;:::-;14472:63;;14428:117;14584:2;14610:50;14652:7;14643:6;14632:9;14628:22;14610:50;:::i;:::-;14600:60;;14555:115;14209:468;;;;;:::o;14683:559::-;14769:6;14777;14826:2;14814:9;14805:7;14801:23;14797:32;14794:119;;;14832:79;;:::i;:::-;14794:119;14980:1;14969:9;14965:17;14952:31;15010:18;15002:6;14999:30;14996:117;;;15032:79;;:::i;:::-;14996:117;15145:80;15217:7;15208:6;15197:9;15193:22;15145:80;:::i;:::-;15127:98;;;;14923:312;14683:559;;;;;:::o;15248:111::-;15312:6;15346:5;15340:12;15330:22;;15248:111;;;:::o;15365:181::-;15461:11;15495:6;15490:3;15483:19;15535:4;15530:3;15526:14;15511:29;;15365:181;;;;:::o;15552:129::-;15616:4;15639:3;15631:11;;15669:4;15664:3;15660:14;15652:22;;15552:129;;;:::o;15687:99::-;15758:21;15773:5;15758:21;:::i;:::-;15753:3;15746:34;15687:99;;:::o;15792:167::-;15855:10;15876:40;15912:3;15904:6;15876:40;:::i;:::-;15948:4;15943:3;15939:14;15925:28;;15792:167;;;;:::o;15965:110::-;16032:4;16064;16059:3;16055:14;16047:22;;15965:110;;;:::o;16105:708::-;16218:3;16247:51;16292:5;16247:51;:::i;:::-;16314:83;16390:6;16385:3;16314:83;:::i;:::-;16307:90;;16421:53;16468:5;16421:53;:::i;:::-;16497:7;16528:1;16513:275;16538:6;16535:1;16532:13;16513:275;;;16614:6;16608:13;16641:57;16694:3;16679:13;16641:57;:::i;:::-;16634:64;;16721:57;16771:6;16721:57;:::i;:::-;16711:67;;16573:215;16560:1;16557;16553:9;16548:14;;16513:275;;;16517:14;16804:3;16797:10;;16223:590;;;16105:708;;;;:::o;16819:361::-;16956:4;16994:2;16983:9;16979:18;16971:26;;17043:9;17037:4;17033:20;17029:1;17018:9;17014:17;17007:47;17071:102;17168:4;17159:6;17071:102;:::i;:::-;17063:110;;16819:361;;;;:::o;17186:307::-;17247:4;17337:18;17329:6;17326:30;17323:56;;;17359:18;;:::i;:::-;17323:56;17397:29;17419:6;17397:29;:::i;:::-;17389:37;;17481:4;17475;17471:15;17463:23;;17186:307;;;:::o;17499:410::-;17576:5;17601:65;17617:48;17658:6;17617:48;:::i;:::-;17601:65;:::i;:::-;17592:74;;17689:6;17682:5;17675:21;17727:4;17720:5;17716:16;17765:3;17756:6;17751:3;17747:16;17744:25;17741:112;;;17772:79;;:::i;:::-;17741:112;17862:41;17896:6;17891:3;17886;17862:41;:::i;:::-;17582:327;17499:410;;;;;:::o;17928:338::-;17983:5;18032:3;18025:4;18017:6;18013:17;18009:27;17999:122;;18040:79;;:::i;:::-;17999:122;18157:6;18144:20;18182:78;18256:3;18248:6;18241:4;18233:6;18229:17;18182:78;:::i;:::-;18173:87;;17989:277;17928:338;;;;:::o;18272:943::-;18367:6;18375;18383;18391;18440:3;18428:9;18419:7;18415:23;18411:33;18408:120;;;18447:79;;:::i;:::-;18408:120;18567:1;18592:53;18637:7;18628:6;18617:9;18613:22;18592:53;:::i;:::-;18582:63;;18538:117;18694:2;18720:53;18765:7;18756:6;18745:9;18741:22;18720:53;:::i;:::-;18710:63;;18665:118;18822:2;18848:53;18893:7;18884:6;18873:9;18869:22;18848:53;:::i;:::-;18838:63;;18793:118;18978:2;18967:9;18963:18;18950:32;19009:18;19001:6;18998:30;18995:117;;;19031:79;;:::i;:::-;18995:117;19136:62;19190:7;19181:6;19170:9;19166:22;19136:62;:::i;:::-;19126:72;;18921:287;18272:943;;;;;;;:::o;19221:474::-;19289:6;19297;19346:2;19334:9;19325:7;19321:23;19317:32;19314:119;;;19352:79;;:::i;:::-;19314:119;19472:1;19497:53;19542:7;19533:6;19522:9;19518:22;19497:53;:::i;:::-;19487:63;;19443:117;19599:2;19625:53;19670:7;19661:6;19650:9;19646:22;19625:53;:::i;:::-;19615:63;;19570:118;19221:474;;;;;:::o;19701:180::-;19749:77;19746:1;19739:88;19846:4;19843:1;19836:15;19870:4;19867:1;19860:15;19887:320;19931:6;19968:1;19962:4;19958:12;19948:22;;20015:1;20009:4;20005:12;20036:18;20026:81;;20092:4;20084:6;20080:17;20070:27;;20026:81;20154:2;20146:6;20143:14;20123:18;20120:38;20117:84;;;20173:18;;:::i;:::-;20117:84;19938:269;19887:320;;;:::o;20213:231::-;20353:34;20349:1;20341:6;20337:14;20330:58;20422:14;20417:2;20409:6;20405:15;20398:39;20213:231;:::o;20450:366::-;20592:3;20613:67;20677:2;20672:3;20613:67;:::i;:::-;20606:74;;20689:93;20778:3;20689:93;:::i;:::-;20807:2;20802:3;20798:12;20791:19;;20450:366;;;:::o;20822:419::-;20988:4;21026:2;21015:9;21011:18;21003:26;;21075:9;21069:4;21065:20;21061:1;21050:9;21046:17;21039:47;21103:131;21229:4;21103:131;:::i;:::-;21095:139;;20822:419;;;:::o;21247:220::-;21387:34;21383:1;21375:6;21371:14;21364:58;21456:3;21451:2;21443:6;21439:15;21432:28;21247:220;:::o;21473:366::-;21615:3;21636:67;21700:2;21695:3;21636:67;:::i;:::-;21629:74;;21712:93;21801:3;21712:93;:::i;:::-;21830:2;21825:3;21821:12;21814:19;;21473:366;;;:::o;21845:419::-;22011:4;22049:2;22038:9;22034:18;22026:26;;22098:9;22092:4;22088:20;22084:1;22073:9;22069:17;22062:47;22126:131;22252:4;22126:131;:::i;:::-;22118:139;;21845:419;;;:::o;22270:243::-;22410:34;22406:1;22398:6;22394:14;22387:58;22479:26;22474:2;22466:6;22462:15;22455:51;22270:243;:::o;22519:366::-;22661:3;22682:67;22746:2;22741:3;22682:67;:::i;:::-;22675:74;;22758:93;22847:3;22758:93;:::i;:::-;22876:2;22871:3;22867:12;22860:19;;22519:366;;;:::o;22891:419::-;23057:4;23095:2;23084:9;23080:18;23072:26;;23144:9;23138:4;23134:20;23130:1;23119:9;23115:17;23108:47;23172:131;23298:4;23172:131;:::i;:::-;23164:139;;22891:419;;;:::o;23316:236::-;23456:34;23452:1;23444:6;23440:14;23433:58;23525:19;23520:2;23512:6;23508:15;23501:44;23316:236;:::o;23558:366::-;23700:3;23721:67;23785:2;23780:3;23721:67;:::i;:::-;23714:74;;23797:93;23886:3;23797:93;:::i;:::-;23915:2;23910:3;23906:12;23899:19;;23558:366;;;:::o;23930:419::-;24096:4;24134:2;24123:9;24119:18;24111:26;;24183:9;24177:4;24173:20;24169:1;24158:9;24154:17;24147:47;24211:131;24337:4;24211:131;:::i;:::-;24203:139;;23930:419;;;:::o;24355:182::-;24495:34;24491:1;24483:6;24479:14;24472:58;24355:182;:::o;24543:366::-;24685:3;24706:67;24770:2;24765:3;24706:67;:::i;:::-;24699:74;;24782:93;24871:3;24782:93;:::i;:::-;24900:2;24895:3;24891:12;24884:19;;24543:366;;;:::o;24915:419::-;25081:4;25119:2;25108:9;25104:18;25096:26;;25168:9;25162:4;25158:20;25154:1;25143:9;25139:17;25132:47;25196:131;25322:4;25196:131;:::i;:::-;25188:139;;24915:419;;;:::o;25340:143::-;25397:5;25428:6;25422:13;25413:22;;25444:33;25471:5;25444:33;:::i;:::-;25340:143;;;;:::o;25489:351::-;25559:6;25608:2;25596:9;25587:7;25583:23;25579:32;25576:119;;;25614:79;;:::i;:::-;25576:119;25734:1;25759:64;25815:7;25806:6;25795:9;25791:22;25759:64;:::i;:::-;25749:74;;25705:128;25489:351;;;;:::o;25846:165::-;25986:17;25982:1;25974:6;25970:14;25963:41;25846:165;:::o;26017:366::-;26159:3;26180:67;26244:2;26239:3;26180:67;:::i;:::-;26173:74;;26256:93;26345:3;26256:93;:::i;:::-;26374:2;26369:3;26365:12;26358:19;;26017:366;;;:::o;26389:419::-;26555:4;26593:2;26582:9;26578:18;26570:26;;26642:9;26636:4;26632:20;26628:1;26617:9;26613:17;26606:47;26670:131;26796:4;26670:131;:::i;:::-;26662:139;;26389:419;;;:::o;26814:172::-;26954:24;26950:1;26942:6;26938:14;26931:48;26814:172;:::o;26992:366::-;27134:3;27155:67;27219:2;27214:3;27155:67;:::i;:::-;27148:74;;27231:93;27320:3;27231:93;:::i;:::-;27349:2;27344:3;27340:12;27333:19;;26992:366;;;:::o;27364:419::-;27530:4;27568:2;27557:9;27553:18;27545:26;;27617:9;27611:4;27607:20;27603:1;27592:9;27588:17;27581:47;27645:131;27771:4;27645:131;:::i;:::-;27637:139;;27364:419;;;:::o;27789:180::-;27837:77;27834:1;27827:88;27934:4;27931:1;27924:15;27958:4;27955:1;27948:15;27975:180;28023:77;28020:1;28013:88;28120:4;28117:1;28110:15;28144:4;28141:1;28134:15;28161:233;28200:3;28223:24;28241:5;28223:24;:::i;:::-;28214:33;;28269:66;28262:5;28259:77;28256:103;;;28339:18;;:::i;:::-;28256:103;28386:1;28379:5;28375:13;28368:20;;28161:233;;;:::o;28400:235::-;28540:34;28536:1;28528:6;28524:14;28517:58;28609:18;28604:2;28596:6;28592:15;28585:43;28400:235;:::o;28641:366::-;28783:3;28804:67;28868:2;28863:3;28804:67;:::i;:::-;28797:74;;28880:93;28969:3;28880:93;:::i;:::-;28998:2;28993:3;28989:12;28982:19;;28641:366;;;:::o;29013:419::-;29179:4;29217:2;29206:9;29202:18;29194:26;;29266:9;29260:4;29256:20;29252:1;29241:9;29237:17;29230:47;29294:131;29420:4;29294:131;:::i;:::-;29286:139;;29013:419;;;:::o;29438:173::-;29578:25;29574:1;29566:6;29562:14;29555:49;29438:173;:::o;29617:366::-;29759:3;29780:67;29844:2;29839:3;29780:67;:::i;:::-;29773:74;;29856:93;29945:3;29856:93;:::i;:::-;29974:2;29969:3;29965:12;29958:19;;29617:366;;;:::o;29989:419::-;30155:4;30193:2;30182:9;30178:18;30170:26;;30242:9;30236:4;30232:20;30228:1;30217:9;30213:17;30206:47;30270:131;30396:4;30270:131;:::i;:::-;30262:139;;29989:419;;;:::o;30414:228::-;30554:34;30550:1;30542:6;30538:14;30531:58;30623:11;30618:2;30610:6;30606:15;30599:36;30414:228;:::o;30648:366::-;30790:3;30811:67;30875:2;30870:3;30811:67;:::i;:::-;30804:74;;30887:93;30976:3;30887:93;:::i;:::-;31005:2;31000:3;30996:12;30989:19;;30648:366;;;:::o;31020:419::-;31186:4;31224:2;31213:9;31209:18;31201:26;;31273:9;31267:4;31263:20;31259:1;31248:9;31244:17;31237:47;31301:131;31427:4;31301:131;:::i;:::-;31293:139;;31020:419;;;:::o;31445:229::-;31585:34;31581:1;31573:6;31569:14;31562:58;31654:12;31649:2;31641:6;31637:15;31630:37;31445:229;:::o;31680:366::-;31822:3;31843:67;31907:2;31902:3;31843:67;:::i;:::-;31836:74;;31919:93;32008:3;31919:93;:::i;:::-;32037:2;32032:3;32028:12;32021:19;;31680:366;;;:::o;32052:419::-;32218:4;32256:2;32245:9;32241:18;32233:26;;32305:9;32299:4;32295:20;32291:1;32280:9;32276:17;32269:47;32333:131;32459:4;32333:131;:::i;:::-;32325:139;;32052:419;;;:::o;32477:181::-;32617:33;32613:1;32605:6;32601:14;32594:57;32477:181;:::o;32664:366::-;32806:3;32827:67;32891:2;32886:3;32827:67;:::i;:::-;32820:74;;32903:93;32992:3;32903:93;:::i;:::-;33021:2;33016:3;33012:12;33005:19;;32664:366;;;:::o;33036:419::-;33202:4;33240:2;33229:9;33225:18;33217:26;;33289:9;33283:4;33279:20;33275:1;33264:9;33260:17;33253:47;33317:131;33443:4;33317:131;:::i;:::-;33309:139;;33036:419;;;:::o;33461:166::-;33601:18;33597:1;33589:6;33585:14;33578:42;33461:166;:::o;33633:366::-;33775:3;33796:67;33860:2;33855:3;33796:67;:::i;:::-;33789:74;;33872:93;33961:3;33872:93;:::i;:::-;33990:2;33985:3;33981:12;33974:19;;33633:366;;;:::o;34005:419::-;34171:4;34209:2;34198:9;34194:18;34186:26;;34258:9;34252:4;34248:20;34244:1;34233:9;34229:17;34222:47;34286:131;34412:4;34286:131;:::i;:::-;34278:139;;34005:419;;;:::o;34430:162::-;34570:14;34566:1;34558:6;34554:14;34547:38;34430:162;:::o;34598:366::-;34740:3;34761:67;34825:2;34820:3;34761:67;:::i;:::-;34754:74;;34837:93;34926:3;34837:93;:::i;:::-;34955:2;34950:3;34946:12;34939:19;;34598:366;;;:::o;34970:419::-;35136:4;35174:2;35163:9;35159:18;35151:26;;35223:9;35217:4;35213:20;35209:1;35198:9;35194:17;35187:47;35251:131;35377:4;35251:131;:::i;:::-;35243:139;;34970:419;;;:::o;35395:348::-;35435:7;35458:20;35476:1;35458:20;:::i;:::-;35453:25;;35492:20;35510:1;35492:20;:::i;:::-;35487:25;;35680:1;35612:66;35608:74;35605:1;35602:81;35597:1;35590:9;35583:17;35579:105;35576:131;;;35687:18;;:::i;:::-;35576:131;35735:1;35732;35728:9;35717:20;;35395:348;;;;:::o;35749:160::-;35889:12;35885:1;35877:6;35873:14;35866:36;35749:160;:::o;35915:366::-;36057:3;36078:67;36142:2;36137:3;36078:67;:::i;:::-;36071:74;;36154:93;36243:3;36154:93;:::i;:::-;36272:2;36267:3;36263:12;36256:19;;35915:366;;;:::o;36287:419::-;36453:4;36491:2;36480:9;36476:18;36468:26;;36540:9;36534:4;36530:20;36526:1;36515:9;36511:17;36504:47;36568:131;36694:4;36568:131;:::i;:::-;36560:139;;36287:419;;;:::o;36712:332::-;36833:4;36871:2;36860:9;36856:18;36848:26;;36884:71;36952:1;36941:9;36937:17;36928:6;36884:71;:::i;:::-;36965:72;37033:2;37022:9;37018:18;37009:6;36965:72;:::i;:::-;36712:332;;;;;:::o;37050:305::-;37090:3;37109:20;37127:1;37109:20;:::i;:::-;37104:25;;37143:20;37161:1;37143:20;:::i;:::-;37138:25;;37297:1;37229:66;37225:74;37222:1;37219:81;37216:107;;;37303:18;;:::i;:::-;37216:107;37347:1;37344;37340:9;37333:16;;37050:305;;;;:::o;37361:143::-;37418:5;37449:6;37443:13;37434:22;;37465:33;37492:5;37465:33;:::i;:::-;37361:143;;;;:::o;37510:351::-;37580:6;37629:2;37617:9;37608:7;37604:23;37600:32;37597:119;;;37635:79;;:::i;:::-;37597:119;37755:1;37780:64;37836:7;37827:6;37816:9;37812:22;37780:64;:::i;:::-;37770:74;;37726:128;37510:351;;;;:::o;37867:175::-;38007:27;38003:1;37995:6;37991:14;37984:51;37867:175;:::o;38048:366::-;38190:3;38211:67;38275:2;38270:3;38211:67;:::i;:::-;38204:74;;38287:93;38376:3;38287:93;:::i;:::-;38405:2;38400:3;38396:12;38389:19;;38048:366;;;:::o;38420:419::-;38586:4;38624:2;38613:9;38609:18;38601:26;;38673:9;38667:4;38663:20;38659:1;38648:9;38644:17;38637:47;38701:131;38827:4;38701:131;:::i;:::-;38693:139;;38420:419;;;:::o;38845:169::-;38985:21;38981:1;38973:6;38969:14;38962:45;38845:169;:::o;39020:366::-;39162:3;39183:67;39247:2;39242:3;39183:67;:::i;:::-;39176:74;;39259:93;39348:3;39259:93;:::i;:::-;39377:2;39372:3;39368:12;39361:19;;39020:366;;;:::o;39392:419::-;39558:4;39596:2;39585:9;39581:18;39573:26;;39645:9;39639:4;39635:20;39631:1;39620:9;39616:17;39609:47;39673:131;39799:4;39673:131;:::i;:::-;39665:139;;39392:419;;;:::o;39817:220::-;39957:34;39953:1;39945:6;39941:14;39934:58;40026:3;40021:2;40013:6;40009:15;40002:28;39817:220;:::o;40043:366::-;40185:3;40206:67;40270:2;40265:3;40206:67;:::i;:::-;40199:74;;40282:93;40371:3;40282:93;:::i;:::-;40400:2;40395:3;40391:12;40384:19;;40043:366;;;:::o;40415:419::-;40581:4;40619:2;40608:9;40604:18;40596:26;;40668:9;40662:4;40658:20;40654:1;40643:9;40639:17;40632:47;40696:131;40822:4;40696:131;:::i;:::-;40688:139;;40415:419;;;:::o;40840:148::-;40942:11;40979:3;40964:18;;40840:148;;;;:::o;40994:377::-;41100:3;41128:39;41161:5;41128:39;:::i;:::-;41183:89;41265:6;41260:3;41183:89;:::i;:::-;41176:96;;41281:52;41326:6;41321:3;41314:4;41307:5;41303:16;41281:52;:::i;:::-;41358:6;41353:3;41349:16;41342:23;;41104:267;40994:377;;;;:::o;41377:155::-;41517:7;41513:1;41505:6;41501:14;41494:31;41377:155;:::o;41538:400::-;41698:3;41719:84;41801:1;41796:3;41719:84;:::i;:::-;41712:91;;41812:93;41901:3;41812:93;:::i;:::-;41930:1;41925:3;41921:11;41914:18;;41538:400;;;:::o;41944:701::-;42225:3;42247:95;42338:3;42329:6;42247:95;:::i;:::-;42240:102;;42359:95;42450:3;42441:6;42359:95;:::i;:::-;42352:102;;42471:148;42615:3;42471:148;:::i;:::-;42464:155;;42636:3;42629:10;;41944:701;;;;;:::o;42651:182::-;42791:34;42787:1;42779:6;42775:14;42768:58;42651:182;:::o;42839:366::-;42981:3;43002:67;43066:2;43061:3;43002:67;:::i;:::-;42995:74;;43078:93;43167:3;43078:93;:::i;:::-;43196:2;43191:3;43187:12;43180:19;;42839:366;;;:::o;43211:419::-;43377:4;43415:2;43404:9;43400:18;43392:26;;43464:9;43458:4;43454:20;43450:1;43439:9;43435:17;43428:47;43492:131;43618:4;43492:131;:::i;:::-;43484:139;;43211:419;;;:::o;43636:191::-;43676:4;43696:20;43714:1;43696:20;:::i;:::-;43691:25;;43730:20;43748:1;43730:20;:::i;:::-;43725:25;;43769:1;43766;43763:8;43760:34;;;43774:18;;:::i;:::-;43760:34;43819:1;43816;43812:9;43804:17;;43636:191;;;;:::o;43833:225::-;43973:34;43969:1;43961:6;43957:14;43950:58;44042:8;44037:2;44029:6;44025:15;44018:33;43833:225;:::o;44064:366::-;44206:3;44227:67;44291:2;44286:3;44227:67;:::i;:::-;44220:74;;44303:93;44392:3;44303:93;:::i;:::-;44421:2;44416:3;44412:12;44405:19;;44064:366;;;:::o;44436:419::-;44602:4;44640:2;44629:9;44625:18;44617:26;;44689:9;44683:4;44679:20;44675:1;44664:9;44660:17;44653:47;44717:131;44843:4;44717:131;:::i;:::-;44709:139;;44436:419;;;:::o;44861:231::-;45001:34;44997:1;44989:6;44985:14;44978:58;45070:14;45065:2;45057:6;45053:15;45046:39;44861:231;:::o;45098:366::-;45240:3;45261:67;45325:2;45320:3;45261:67;:::i;:::-;45254:74;;45337:93;45426:3;45337:93;:::i;:::-;45455:2;45450:3;45446:12;45439:19;;45098:366;;;:::o;45470:419::-;45636:4;45674:2;45663:9;45659:18;45651:26;;45723:9;45717:4;45713:20;45709:1;45698:9;45694:17;45687:47;45751:131;45877:4;45751:131;:::i;:::-;45743:139;;45470:419;;;:::o;45895:228::-;46035:34;46031:1;46023:6;46019:14;46012:58;46104:11;46099:2;46091:6;46087:15;46080:36;45895:228;:::o;46129:366::-;46271:3;46292:67;46356:2;46351:3;46292:67;:::i;:::-;46285:74;;46368:93;46457:3;46368:93;:::i;:::-;46486:2;46481:3;46477:12;46470:19;;46129:366;;;:::o;46501:419::-;46667:4;46705:2;46694:9;46690:18;46682:26;;46754:9;46748:4;46744:20;46740:1;46729:9;46725:17;46718:47;46782:131;46908:4;46782:131;:::i;:::-;46774:139;;46501:419;;;:::o;46926:223::-;47066:34;47062:1;47054:6;47050:14;47043:58;47135:6;47130:2;47122:6;47118:15;47111:31;46926:223;:::o;47155:366::-;47297:3;47318:67;47382:2;47377:3;47318:67;:::i;:::-;47311:74;;47394:93;47483:3;47394:93;:::i;:::-;47512:2;47507:3;47503:12;47496:19;;47155:366;;;:::o;47527:419::-;47693:4;47731:2;47720:9;47716:18;47708:26;;47780:9;47774:4;47770:20;47766:1;47755:9;47751:17;47744:47;47808:131;47934:4;47808:131;:::i;:::-;47800:139;;47527:419;;;:::o;47952:332::-;48073:4;48111:2;48100:9;48096:18;48088:26;;48124:71;48192:1;48181:9;48177:17;48168:6;48124:71;:::i;:::-;48205:72;48273:2;48262:9;48258:18;48249:6;48205:72;:::i;:::-;47952:332;;;;;:::o;48290:98::-;48341:6;48375:5;48369:12;48359:22;;48290:98;;;:::o;48394:168::-;48477:11;48511:6;48506:3;48499:19;48551:4;48546:3;48542:14;48527:29;;48394:168;;;;:::o;48568:360::-;48654:3;48682:38;48714:5;48682:38;:::i;:::-;48736:70;48799:6;48794:3;48736:70;:::i;:::-;48729:77;;48815:52;48860:6;48855:3;48848:4;48841:5;48837:16;48815:52;:::i;:::-;48892:29;48914:6;48892:29;:::i;:::-;48887:3;48883:39;48876:46;;48658:270;48568:360;;;;:::o;48934:529::-;49101:4;49139:2;49128:9;49124:18;49116:26;;49152:71;49220:1;49209:9;49205:17;49196:6;49152:71;:::i;:::-;49233:72;49301:2;49290:9;49286:18;49277:6;49233:72;:::i;:::-;49352:9;49346:4;49342:20;49337:2;49326:9;49322:18;49315:48;49380:76;49451:4;49442:6;49380:76;:::i;:::-;49372:84;;48934:529;;;;;;:::o;49469:137::-;49523:5;49554:6;49548:13;49539:22;;49570:30;49594:5;49570:30;:::i;:::-;49469:137;;;;:::o;49612:345::-;49679:6;49728:2;49716:9;49707:7;49703:23;49699:32;49696:119;;;49734:79;;:::i;:::-;49696:119;49854:1;49879:61;49932:7;49923:6;49912:9;49908:22;49879:61;:::i;:::-;49869:71;;49825:125;49612:345;;;;:::o;49963:170::-;50103:22;50099:1;50091:6;50087:14;50080:46;49963:170;:::o;50139:366::-;50281:3;50302:67;50366:2;50361:3;50302:67;:::i;:::-;50295:74;;50378:93;50467:3;50378:93;:::i;:::-;50496:2;50491:3;50487:12;50480:19;;50139:366;;;:::o;50511:419::-;50677:4;50715:2;50704:9;50700:18;50692:26;;50764:9;50758:4;50754:20;50750:1;50739:9;50735:17;50728:47;50792:131;50918:4;50792:131;:::i;:::-;50784:139;;50511:419;;;:::o;50936:154::-;51076:6;51072:1;51064:6;51060:14;51053:30;50936:154;:::o;51096:365::-;51238:3;51259:66;51323:1;51318:3;51259:66;:::i;:::-;51252:73;;51334:93;51423:3;51334:93;:::i;:::-;51452:2;51447:3;51443:12;51436:19;;51096:365;;;:::o;51467:419::-;51633:4;51671:2;51660:9;51656:18;51648:26;;51720:9;51714:4;51710:20;51706:1;51695:9;51691:17;51684:47;51748:131;51874:4;51748:131;:::i;:::-;51740:139;;51467:419;;;:::o;51892:157::-;52032:9;52028:1;52020:6;52016:14;52009:33;51892:157;:::o;52055:365::-;52197:3;52218:66;52282:1;52277:3;52218:66;:::i;:::-;52211:73;;52293:93;52382:3;52293:93;:::i;:::-;52411:2;52406:3;52402:12;52395:19;;52055:365;;;:::o;52426:419::-;52592:4;52630:2;52619:9;52615:18;52607:26;;52679:9;52673:4;52669:20;52665:1;52654:9;52650:17;52643:47;52707:131;52833:4;52707:131;:::i;:::-;52699:139;;52426:419;;;:::o;52851:79::-;52890:7;52919:5;52908:16;;52851:79;;;:::o;52936:157::-;53041:45;53061:24;53079:5;53061:24;:::i;:::-;53041:45;:::i;:::-;53036:3;53029:58;52936:157;;:::o;53099:94::-;53132:8;53180:5;53176:2;53172:14;53151:35;;53099:94;;;:::o;53199:::-;53238:7;53267:20;53281:5;53267:20;:::i;:::-;53256:31;;53199:94;;;:::o;53299:100::-;53338:7;53367:26;53387:5;53367:26;:::i;:::-;53356:37;;53299:100;;;:::o;53405:157::-;53510:45;53530:24;53548:5;53530:24;:::i;:::-;53510:45;:::i;:::-;53505:3;53498:58;53405:157;;:::o;53568:79::-;53607:7;53636:5;53625:16;;53568:79;;;:::o;53653:157::-;53758:45;53778:24;53796:5;53778:24;:::i;:::-;53758:45;:::i;:::-;53753:3;53746:58;53653:157;;:::o;53816:820::-;54040:3;54055:75;54126:3;54117:6;54055:75;:::i;:::-;54155:2;54150:3;54146:12;54139:19;;54168:75;54239:3;54230:6;54168:75;:::i;:::-;54268:2;54263:3;54259:12;54252:19;;54281:75;54352:3;54343:6;54281:75;:::i;:::-;54381:2;54376:3;54372:12;54365:19;;54394:75;54465:3;54456:6;54394:75;:::i;:::-;54494:2;54489:3;54485:12;54478:19;;54507:75;54578:3;54569:6;54507:75;:::i;:::-;54607:2;54602:3;54598:12;54591:19;;54627:3;54620:10;;53816:820;;;;;;;;:::o;54642:180::-;54690:77;54687:1;54680:88;54787:4;54784:1;54777:15;54811:4;54808:1;54801:15;54828:176;54860:1;54877:20;54895:1;54877:20;:::i;:::-;54872:25;;54911:20;54929:1;54911:20;:::i;:::-;54906:25;;54950:1;54940:35;;54955:18;;:::i;:::-;54940:35;54996:1;54993;54989:9;54984:14;;54828:176;;;;:::o;55010:237::-;55150:34;55146:1;55138:6;55134:14;55127:58;55219:20;55214:2;55206:6;55202:15;55195:45;55010:237;:::o;55253:366::-;55395:3;55416:67;55480:2;55475:3;55416:67;:::i;:::-;55409:74;;55492:93;55581:3;55492:93;:::i;:::-;55610:2;55605:3;55601:12;55594:19;;55253:366;;;:::o;55625:419::-;55791:4;55829:2;55818:9;55814:18;55806:26;;55878:9;55872:4;55868:20;55864:1;55853:9;55849:17;55842:47;55906:131;56032:4;55906:131;:::i;:::-;55898:139;;55625:419;;;:::o;56050:185::-;56090:1;56107:20;56125:1;56107:20;:::i;:::-;56102:25;;56141:20;56159:1;56141:20;:::i;:::-;56136:25;;56180:1;56170:35;;56185:18;;:::i;:::-;56170:35;56227:1;56224;56220:9;56215:14;;56050:185;;;;:::o;56241:553::-;56418:4;56456:3;56445:9;56441:19;56433:27;;56470:71;56538:1;56527:9;56523:17;56514:6;56470:71;:::i;:::-;56551:72;56619:2;56608:9;56604:18;56595:6;56551:72;:::i;:::-;56633;56701:2;56690:9;56686:18;56677:6;56633:72;:::i;:::-;56715;56783:2;56772:9;56768:18;56759:6;56715:72;:::i;:::-;56241:553;;;;;;;:::o;56800:397::-;56940:3;56955:75;57026:3;57017:6;56955:75;:::i;:::-;57055:2;57050:3;57046:12;57039:19;;57068:75;57139:3;57130:6;57068:75;:::i;:::-;57168:2;57163:3;57159:12;57152:19;;57188:3;57181:10;;56800:397;;;;;:::o;57203:640::-;57398:4;57436:3;57425:9;57421:19;57413:27;;57450:71;57518:1;57507:9;57503:17;57494:6;57450:71;:::i;:::-;57531:72;57599:2;57588:9;57584:18;57575:6;57531:72;:::i;:::-;57613;57681:2;57670:9;57666:18;57657:6;57613:72;:::i;:::-;57732:9;57726:4;57722:20;57717:2;57706:9;57702:18;57695:48;57760:76;57831:4;57822:6;57760:76;:::i;:::-;57752:84;;57203:640;;;;;;;:::o;57849:141::-;57905:5;57936:6;57930:13;57921:22;;57952:32;57978:5;57952:32;:::i;:::-;57849:141;;;;:::o;57996:349::-;58065:6;58114:2;58102:9;58093:7;58089:23;58085:32;58082:119;;;58120:79;;:::i;:::-;58082:119;58240:1;58265:63;58320:7;58311:6;58300:9;58296:22;58265:63;:::i;:::-;58255:73;;58211:127;57996:349;;;;:::o;58351:182::-;58491:34;58487:1;58479:6;58475:14;58468:58;58351:182;:::o;58539:366::-;58681:3;58702:67;58766:2;58761:3;58702:67;:::i;:::-;58695:74;;58778:93;58867:3;58778:93;:::i;:::-;58896:2;58891:3;58887:12;58880:19;;58539:366;;;:::o;58911:419::-;59077:4;59115:2;59104:9;59100:18;59092:26;;59164:9;59158:4;59154:20;59150:1;59139:9;59135:17;59128:47;59192:131;59318:4;59192:131;:::i;:::-;59184:139;;58911:419;;;:::o;59336:178::-;59476:30;59472:1;59464:6;59460:14;59453:54;59336:178;:::o;59520:366::-;59662:3;59683:67;59747:2;59742:3;59683:67;:::i;:::-;59676:74;;59759:93;59848:3;59759:93;:::i;:::-;59877:2;59872:3;59868:12;59861:19;;59520:366;;;:::o;59892:419::-;60058:4;60096:2;60085:9;60081:18;60073:26;;60145:9;60139:4;60135:20;60131:1;60120:9;60116:17;60109:47;60173:131;60299:4;60173:131;:::i;:::-;60165:139;;59892:419;;;:::o
Swarm Source
ipfs://d28039bc565d79a94fe15cf4d7c8922e9957caaa5d96bbcf8a515b3209793178
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.