Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 730 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Withdraw Tokens | 15260087 | 916 days ago | IN | 0 ETH | 0.00071659 | ||||
Stake On Behalf ... | 15257584 | 916 days ago | IN | 0 ETH | 0.02577365 | ||||
Stake On Behalf ... | 15257577 | 916 days ago | IN | 0 ETH | 0.01396302 | ||||
Stake On Behalf ... | 15257563 | 916 days ago | IN | 0 ETH | 0.00180028 | ||||
Claim Rewards | 15253730 | 917 days ago | IN | 0 ETH | 0.00102572 | ||||
Claim Rewards | 15250030 | 917 days ago | IN | 0 ETH | 0.00150323 | ||||
Claim Rewards | 15247415 | 918 days ago | IN | 0 ETH | 0.00134177 | ||||
Claim Rewards | 15241177 | 919 days ago | IN | 0 ETH | 0.00138266 | ||||
Address Claim | 15234048 | 920 days ago | IN | 0 ETH | 0.00070476 | ||||
Claim Rewards | 15229224 | 921 days ago | IN | 0 ETH | 0.00171661 | ||||
Claim Rewards | 15229215 | 921 days ago | IN | 0 ETH | 0.00167999 | ||||
Claim Rewards | 15219739 | 922 days ago | IN | 0 ETH | 0.00562901 | ||||
Claim Rewards | 15207420 | 924 days ago | IN | 0 ETH | 0.00261527 | ||||
Address Claim | 15206705 | 924 days ago | IN | 0 ETH | 0.00087605 | ||||
Claim Rewards | 15206075 | 924 days ago | IN | 0 ETH | 0.00166187 | ||||
Claim Rewards | 15205789 | 924 days ago | IN | 0 ETH | 0.00259036 | ||||
Claim Rewards | 15205339 | 924 days ago | IN | 0 ETH | 0.00185696 | ||||
Claim Rewards | 15203326 | 925 days ago | IN | 0 ETH | 0.00097539 | ||||
Claim Rewards | 15203169 | 925 days ago | IN | 0 ETH | 0.00325082 | ||||
Claim Rewards | 15202631 | 925 days ago | IN | 0 ETH | 0.00299887 | ||||
Claim Rewards | 15202026 | 925 days ago | IN | 0 ETH | 0.00184437 | ||||
Claim Rewards | 15197249 | 926 days ago | IN | 0 ETH | 0.00463926 | ||||
Claim Rewards | 15197234 | 926 days ago | IN | 0 ETH | 0.0082892 | ||||
Claim Rewards | 15194684 | 926 days ago | IN | 0 ETH | 0.00265116 | ||||
Claim Rewards | 15193936 | 926 days ago | IN | 0 ETH | 0.00776472 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Source Code Verified (Exact Match)
Contract Name:
LiquidForgeRewards
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-15 */ /** *Submitted for verification at Etherscan.io on 2022-06-12 */ // SPDX-License-Identifier: MIT /* _ _ _ _ ______ | | (_) (_) | | | ___| | | _ __ _ _ _ _ __| | | |_ ___ _ __ __ _ ___ | | | |/ _` | | | | |/ _` | | _/ _ \| '__/ _` |/ _ \ | |___| | (_| | |_| | | (_| | | || (_) | | | (_| | __/ \_____/_|\__, |\__,_|_|\__,_| \_| \___/|_| \__, |\___| | | __/ | |_| |___/ ______ ______ _ | ___ \ ___ | ___ \ | | | |_/ / ___ _ __ _ _ ___ ( _ ) | |_/ /_____ ____ _ _ __ __| |___ | ___ \/ _ \| '_ \| | | / __| / _ \/\ | // _ \ \ /\ / / _` | '__/ _` / __| | |_/ / (_) | | | | |_| \__ \ | (_> < | |\ \ __/\ V V / (_| | | | (_| \__ \ \____/ \___/|_| |_|\__,_|___/ \___/\/ \_| \_\___| \_/\_/ \__,_|_| \__,_|___/ */ 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 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.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 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 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; /** * @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; 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; } /** * @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 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 Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require( owner != address(0), "ERC721: balance query for the zero address" ); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ 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; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.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); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require( _exists(tokenId), "ERC721: approved query for nonexistent token" ); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ 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); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ 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); } /** * @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. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ 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" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ 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" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ 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); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.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); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ 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; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transfer.selector, to, value) ); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value) ); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn( token, abi.encodeWithSelector(token.approve.selector, spender, value) ); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require( oldAllowance >= value, "SafeERC20: decreased allowance below zero" ); uint256 newAllowance = oldAllowance - value; _callOptionalReturn( token, abi.encodeWithSelector( token.approve.selector, spender, newAllowance ) ); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), * relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall( data, "SafeERC20: low-level call failed" ); if (returndata.length > 0) { // Return data is optional require( abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed" ); } } } pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } 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.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a / b + (a % b == 0 ? 0 : 1); } } interface iMetalStaking { function _legendsForgeBlocks(uint256) external view returns (uint256); function _tigerForgeBlocks(uint256) external view returns (uint256); function _cubsForgeBlocks(uint256) external view returns (uint256); function _fundaeForgeBlocks(uint256) external view returns (uint256); function _azukiForgeBlocks(uint256) external view returns (uint256); function _legendsTokenForges(uint256) external view returns (address); function _tigerTokenForges(uint256) external view returns (address); function _cubsTokenForges(uint256) external view returns (address); function _fundaeTokenForges(uint256) external view returns (address); function _azukiTokenForges(uint256) external view returns (address); function _membershipForgeBlocks(address) external view returns (uint256); function membershipForgesOf(address account) external view returns (uint256[] memory); } pragma solidity ^0.8.0; contract LiquidForgeRewards is Ownable, Pausable { uint256 public TIGER_DISTRIBUTION_AMOUNT; uint256 public FUNDAE_DISTRIBUTION_AMOUNT; uint256 public LEGENDS_DISTRIBUTION_AMOUNT; uint256 public AZUKI_DISTRIBUTION_AMOUNT; // mappings mapping(uint256 => bool) public tigerClaimed; mapping(uint256 => bool) public fundaeClaimed; mapping(uint256 => bool) public legendsClaimed; mapping(uint256 => bool) public azukiClaimed; mapping(uint256 => uint256) public _newLegendsForgeBlocks; mapping(uint256 => uint256) public _newTigerForgeBlocks; mapping(uint256 => uint256) public _newCubsForgeBlocks; mapping(uint256 => uint256) public _newFundaeForgeBlocks; mapping(uint256 => uint256) public _newAzukiForgeBlocks; //addresses address public legendsAddress; address public tigerAddress; address public cubsAddress; address public fundaeAddress; address public azukiAddress; address public forgeAddress; address public erc20Address; //uint256's uint256 public expiration; uint256 public minBlockToClaim; //rate governs how often you receive your token uint256 public legendsRate; uint256 public tigerRate; uint256 public cubsRate; uint256 public fundaeRate; uint256 public azukiRate; uint256 public _totalSupply; mapping(address => uint256) private _balances; constructor( address _legendsAddress, address _tigerAddress, address _cubsAddress, address _fundaeAddress, address _azukiAddress, address _erc20Address ) { legendsAddress = _legendsAddress; legendsRate = 0; tigerAddress = _tigerAddress; tigerRate = 0; cubsAddress = _cubsAddress; cubsRate = 0; fundaeAddress = _fundaeAddress; fundaeRate = 0; azukiAddress = _azukiAddress; azukiRate = 0; expiration = block.number + 0; erc20Address = _erc20Address; forgeAddress = 0x78406Ee8e2Ed3D14654150D2aC5dBB67710B3492; TIGER_DISTRIBUTION_AMOUNT = 5000000000000000000; FUNDAE_DISTRIBUTION_AMOUNT = 5000000000000000000; AZUKI_DISTRIBUTION_AMOUNT = 5000000000000000000; LEGENDS_DISTRIBUTION_AMOUNT = 25000000000000000000; } function pause() public onlyOwner { _pause(); } function unpause() public onlyOwner { _unpause(); } function stakeOnBehalfBulk( uint256[] calldata _amounts, address[] calldata _accounts, uint256 totalAmount ) external onlyOwner { for (uint256 i = 0; i < _amounts.length; i++) { address account; account = _accounts[i]; _totalSupply += _amounts[i]; _balances[_accounts[i]] += _amounts[i]; } IERC20(erc20Address).transferFrom( msg.sender, address(this), totalAmount ); } function addressClaim() external { require(0 < _balances[msg.sender], "withdraw amount over stake"); require( iMetalStaking(forgeAddress).membershipForgesOf(msg.sender).length > 0, "No Membership Forged" ); uint256 reward = _balances[msg.sender]; _totalSupply -= _balances[msg.sender]; _balances[msg.sender] -= _balances[msg.sender]; IERC20(erc20Address).transfer(msg.sender, reward); } function claimBalanceOf(address account) external view returns (uint256) { return _balances[account]; } function revokeBonusReward(uint256[] calldata tokenIds, address nftaddress) public onlyOwner { if (nftaddress == legendsAddress) { for (uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if (!legendsClaimed[tokenId]) { legendsClaimed[tokenId] = true; } } } if (nftaddress == tigerAddress) { for (uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if (!tigerClaimed[tokenId]) { tigerClaimed[tokenId] = true; } } } if (nftaddress == fundaeAddress) { for (uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if (!fundaeClaimed[tokenId]) { fundaeClaimed[tokenId] = true; } } } if (nftaddress == azukiAddress) { for (uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if (!azukiClaimed[tokenId]) { azukiClaimed[tokenId] = true; } } } } // Set this to a expiration block to disable the ability to continue accruing tokens past that block number. // which is caclculated as current block plus the parm // // Set a multiplier for how many tokens to earn each time a block passes. // and the min number of blocks needed to pass to claim rewards function setRates( uint256 _legendsRate, uint256 _cubsRate, uint256 _tigerRate, uint256 _fundaeRate, uint256 _azukiRate, uint256 _minBlockToClaim, uint256 _expiration ) public onlyOwner { legendsRate = _legendsRate; cubsRate = _cubsRate; tigerRate = _tigerRate; fundaeRate = _fundaeRate; azukiRate = _azukiRate; minBlockToClaim = _minBlockToClaim; expiration = block.number + _expiration; } function rewardClaimable(uint256 tokenId, address nftaddress) public view returns (bool) { uint256 blockCur = Math.min(block.number, expiration); if ( nftaddress == legendsAddress && iMetalStaking(forgeAddress)._legendsForgeBlocks(tokenId) > 0 ) { return (blockCur - Math.max( iMetalStaking(forgeAddress)._legendsForgeBlocks(tokenId), _newLegendsForgeBlocks[tokenId] ) > minBlockToClaim); } if ( nftaddress == tigerAddress && iMetalStaking(forgeAddress)._tigerForgeBlocks(tokenId) > 0 ) { return (blockCur - Math.max( iMetalStaking(forgeAddress)._tigerForgeBlocks(tokenId), _newTigerForgeBlocks[tokenId] ) > minBlockToClaim); } if ( nftaddress == cubsAddress && iMetalStaking(forgeAddress)._cubsForgeBlocks(tokenId) > 0 ) { return (blockCur - Math.max( iMetalStaking(forgeAddress)._cubsForgeBlocks(tokenId), _newCubsForgeBlocks[tokenId] ) > minBlockToClaim); } if ( nftaddress == fundaeAddress && iMetalStaking(forgeAddress)._fundaeForgeBlocks(tokenId) > 0 ) { return (blockCur - Math.max( iMetalStaking(forgeAddress)._fundaeForgeBlocks(tokenId), _newFundaeForgeBlocks[tokenId] ) > minBlockToClaim); } if ( nftaddress == azukiAddress && iMetalStaking(forgeAddress)._azukiForgeBlocks(tokenId) > 0 ) { return (blockCur - Math.max( iMetalStaking(forgeAddress)._azukiForgeBlocks(tokenId), _newAzukiForgeBlocks[tokenId] ) > minBlockToClaim); } return false; } function oldLegendsForgeBlocks(uint256 tokenId) public view returns (uint256) { return iMetalStaking(forgeAddress)._legendsForgeBlocks(tokenId); } function oldLegendsTokenForges(uint256 tokenId) public view returns (address) { return iMetalStaking(forgeAddress)._legendsTokenForges(tokenId); } //reward amount by address/tokenIds[] function calculateReward( address account, uint256 tokenId, address nftaddress ) public view returns (uint256) { if (nftaddress == legendsAddress) { uint256 tmp = Math.max( iMetalStaking(forgeAddress)._legendsForgeBlocks(tokenId), iMetalStaking(forgeAddress)._membershipForgeBlocks(account) ); require( Math.min(block.number, expiration) > iMetalStaking(forgeAddress)._legendsForgeBlocks(tokenId), "Invalid blocks" ); return legendsRate * ( iMetalStaking(forgeAddress)._legendsTokenForges(tokenId) == account ? 1 : 0 ) * (Math.min(block.number, expiration) - Math.max(tmp, _newLegendsForgeBlocks[tokenId])); } if (nftaddress == tigerAddress) { uint256 tmp = Math.max( iMetalStaking(forgeAddress)._tigerForgeBlocks(tokenId), iMetalStaking(forgeAddress)._membershipForgeBlocks(account) ); require( Math.min(block.number, expiration) > iMetalStaking(forgeAddress)._tigerForgeBlocks(tokenId), "Invalid blocks" ); return tigerRate * ( iMetalStaking(forgeAddress)._tigerTokenForges(tokenId) == account ? 1 : 0 ) * (Math.min(block.number, expiration) - Math.max(tmp, _newTigerForgeBlocks[tokenId])); } if (nftaddress == cubsAddress) { uint256 tmp = Math.max( iMetalStaking(forgeAddress)._cubsForgeBlocks(tokenId), iMetalStaking(forgeAddress)._membershipForgeBlocks(account) ); require( Math.min(block.number, expiration) > iMetalStaking(forgeAddress)._cubsForgeBlocks(tokenId), "Invalid blocks" ); return cubsRate * ( iMetalStaking(forgeAddress)._cubsTokenForges(tokenId) == account ? 1 : 0 ) * (Math.min(block.number, expiration) - Math.max(tmp, _newCubsForgeBlocks[tokenId])); } if (nftaddress == azukiAddress) { uint256 tmp = Math.max( iMetalStaking(forgeAddress)._azukiForgeBlocks(tokenId), iMetalStaking(forgeAddress)._membershipForgeBlocks(account) ); require( Math.min(block.number, expiration) > iMetalStaking(forgeAddress)._azukiForgeBlocks(tokenId), "Invalid blocks" ); return azukiRate * ( iMetalStaking(forgeAddress)._azukiTokenForges(tokenId) == account ? 1 : 0 ) * (Math.min(block.number, expiration) - Math.max(tmp, _newAzukiForgeBlocks[tokenId])); } if (nftaddress == fundaeAddress) { uint256 tmp = Math.max( iMetalStaking(forgeAddress)._fundaeForgeBlocks(tokenId), iMetalStaking(forgeAddress)._membershipForgeBlocks(account) ); require( Math.min(block.number, expiration) > iMetalStaking(forgeAddress)._azukiForgeBlocks(tokenId), "Invalid blocks" ); return fundaeRate * ( iMetalStaking(forgeAddress)._fundaeTokenForges(tokenId) == account ? 1 : 0 ) * (Math.min(block.number, expiration) - Math.max(tmp, _newAzukiForgeBlocks[tokenId])); } return 0; } //reward claim function function ClaimRewards(uint256[] calldata tokenIds, address nftaddress) public whenNotPaused { uint256 reward; uint256 blockCur = Math.min(block.number, expiration); require( iMetalStaking(forgeAddress).membershipForgesOf(msg.sender).length > 0, "No Membership Forged" ); if (nftaddress == legendsAddress) { for (uint256 i; i < tokenIds.length; i++) { require( IERC721(legendsAddress).ownerOf(tokenIds[i]) == msg.sender ); require( blockCur - Math.max( iMetalStaking(forgeAddress)._legendsForgeBlocks( tokenIds[i] ), _newLegendsForgeBlocks[tokenIds[i]] ) > minBlockToClaim ); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward( msg.sender, tokenIds[i], legendsAddress ); _newLegendsForgeBlocks[tokenIds[i]] = blockCur; } for (uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if (!legendsClaimed[tokenId]) { legendsClaimed[tokenId] = true; reward += LEGENDS_DISTRIBUTION_AMOUNT; } } } if (nftaddress == tigerAddress) { for (uint256 i; i < tokenIds.length; i++) { require( IERC721(tigerAddress).ownerOf(tokenIds[i]) == msg.sender ); require( blockCur - Math.max( iMetalStaking(forgeAddress)._tigerForgeBlocks( tokenIds[i] ), _newTigerForgeBlocks[tokenIds[i]] ) > minBlockToClaim ); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward( msg.sender, tokenIds[i], tigerAddress ); _newTigerForgeBlocks[tokenIds[i]] = blockCur; } for (uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if (!tigerClaimed[tokenId]) { tigerClaimed[tokenId] = true; reward += TIGER_DISTRIBUTION_AMOUNT; } } } if (nftaddress == cubsAddress) { for (uint256 i; i < tokenIds.length; i++) { require( IERC721(cubsAddress).ownerOf(tokenIds[i]) == msg.sender ); require( blockCur - Math.max( iMetalStaking(forgeAddress)._cubsForgeBlocks( tokenIds[i] ), _newCubsForgeBlocks[tokenIds[i]] ) > minBlockToClaim ); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward(msg.sender, tokenIds[i], cubsAddress); _newCubsForgeBlocks[tokenIds[i]] = blockCur; } } if (nftaddress == fundaeAddress) { for (uint256 i; i < tokenIds.length; i++) { require( IERC721(fundaeAddress).ownerOf(tokenIds[i]) == msg.sender ); require( blockCur - Math.max( iMetalStaking(forgeAddress)._fundaeForgeBlocks( tokenIds[i] ), _newFundaeForgeBlocks[tokenIds[i]] ) > minBlockToClaim ); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward( msg.sender, tokenIds[i], fundaeAddress ); _newFundaeForgeBlocks[tokenIds[i]] = blockCur; } for (uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if (!fundaeClaimed[tokenId]) { fundaeClaimed[tokenId] = true; reward += FUNDAE_DISTRIBUTION_AMOUNT; } } } if (nftaddress == azukiAddress) { for (uint256 i; i < tokenIds.length; i++) { require( IERC721(azukiAddress).ownerOf(tokenIds[i]) == msg.sender ); require( blockCur - Math.max( iMetalStaking(forgeAddress)._azukiForgeBlocks( tokenIds[i] ), _newAzukiForgeBlocks[tokenIds[i]] ) > minBlockToClaim ); } for (uint256 i; i < tokenIds.length; i++) { reward += calculateReward( msg.sender, tokenIds[i], azukiAddress ); _newAzukiForgeBlocks[tokenIds[i]] = blockCur; } for (uint256 i; i < tokenIds.length; ++i) { uint256 tokenId = tokenIds[i]; if (!azukiClaimed[tokenId]) { azukiClaimed[tokenId] = true; reward += AZUKI_DISTRIBUTION_AMOUNT; } } } if (reward > 0) { IERC20(erc20Address).transfer(msg.sender, reward); } } //withdrawal function. function withdrawTokens() external onlyOwner { uint256 tokenSupply = IERC20(erc20Address).balanceOf(address(this)); IERC20(erc20Address).transfer(msg.sender, tokenSupply); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_legendsAddress","type":"address"},{"internalType":"address","name":"_tigerAddress","type":"address"},{"internalType":"address","name":"_cubsAddress","type":"address"},{"internalType":"address","name":"_fundaeAddress","type":"address"},{"internalType":"address","name":"_azukiAddress","type":"address"},{"internalType":"address","name":"_erc20Address","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"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":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"AZUKI_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address","name":"nftaddress","type":"address"}],"name":"ClaimRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"FUNDAE_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LEGENDS_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIGER_DISTRIBUTION_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_newAzukiForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_newCubsForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_newFundaeForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_newLegendsForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_newTigerForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addressClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"azukiAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"azukiClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"azukiRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"nftaddress","type":"address"}],"name":"calculateReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"claimBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cubsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cubsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"erc20Address","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"expiration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"forgeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundaeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"fundaeClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundaeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"legendsClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"legendsRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBlockToClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"oldLegendsForgeBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"oldLegendsTokenForges","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"address","name":"nftaddress","type":"address"}],"name":"revokeBonusReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"nftaddress","type":"address"}],"name":"rewardClaimable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_legendsRate","type":"uint256"},{"internalType":"uint256","name":"_cubsRate","type":"uint256"},{"internalType":"uint256","name":"_tigerRate","type":"uint256"},{"internalType":"uint256","name":"_fundaeRate","type":"uint256"},{"internalType":"uint256","name":"_azukiRate","type":"uint256"},{"internalType":"uint256","name":"_minBlockToClaim","type":"uint256"},{"internalType":"uint256","name":"_expiration","type":"uint256"}],"name":"setRates","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_amounts","type":"uint256[]"},{"internalType":"address[]","name":"_accounts","type":"address[]"},{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"stakeOnBehalfBulk","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tigerAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tigerClaimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tigerRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162006105380380620061058339818101604052810190620000379190620003b5565b620000576200004b620002d260201b60201c565b620002da60201b60201c565b60008060146101000a81548160ff02191690831515021790555085600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060178190555084600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060188190555083601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600060198190555082601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601a8190555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601b81905550600043620001ed919062000451565b60158190555080601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507378406ee8e2ed3d14654150d2ac5dbb67710b3492601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550674563918244f40000600181905550674563918244f40000600281905550674563918244f4000060048190555068015af1d78b58c400006003819055505050505050506200053a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620003af8162000520565b92915050565b60008060008060008060c08789031215620003d557620003d46200051b565b5b6000620003e589828a016200039e565b9650506020620003f889828a016200039e565b95505060406200040b89828a016200039e565b94505060606200041e89828a016200039e565b93505060806200043189828a016200039e565b92505060a06200044489828a016200039e565b9150509295509295509295565b60006200045e82620004e2565b91506200046b83620004e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620004a357620004a2620004ec565b5b828201905092915050565b6000620004bb82620004c2565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600080fd5b6200052b81620004ae565b81146200053757600080fd5b50565b615bbb806200054a6000396000f3fe608060405234801561001057600080fd5b506004361061027f5760003560e01c806388d35c481161015c578063b1a1e45d116100ce578063ca1d066f11610087578063ca1d066f14610772578063d4e92e6e1461078e578063d6e61d71146107be578063dffb5e06146107dc578063f2fde38b1461080c578063f9a34ad9146108285761027f565b8063b1a1e45d146106ae578063b5b4f4b9146106cc578063bb470528146106ea578063bbe25bf314610708578063bc7de05c14610738578063c0da146a146107545761027f565b80638da5cb5b116101205780638da5cb5b146105d857806391e139c5146105f6578063942cd44b146106145780639b9bb968146106445780639f8518021461064e578063a020ec161461067e5761027f565b806388d35c48146105485780638bd9eb7f146105645780638bf1efd8146105945780638c0ece82146105b25780638d8f2adb146105ce5761027f565b80634665096d116101f557806370ff79c3116101b957806370ff79c3146104aa578063715018a6146104da5780637d5c92cb146104e457806382b875b8146105025780638456cb591461052057806386f69bed1461052a5761027f565b80634665096d146103f057806353b0f08a1461040e5780635c193f741461042c5780635c975abb1461045c5780636a04ef921461047a5761027f565b80632821f1e7116102475780632821f1e7146103505780632bf87f5a1461036e5780632d9281361461038c5780632e7bffef146103aa5780633eaaf86b146103c85780633f4ba83a146103e65761027f565b80630443165d1461028457806304807750146102a257806307987249146102d257806314e7474614610302578063276184ae14610332575b600080fd5b61028c610858565b60405161029991906155ab565b60405180910390f35b6102bc60048036038101906102b7919061534d565b61087e565b6040516102c991906155ab565b60405180910390f35b6102ec60048036038101906102e7919061534d565b610932565b6040516102f99190615626565b60405180910390f35b61031c6004803603810190610317919061534d565b610952565b6040516103299190615721565b60405180910390f35b61033a61096a565b60405161034791906155ab565b60405180910390f35b610358610990565b60405161036591906155ab565b60405180910390f35b6103766109b6565b6040516103839190615721565b60405180910390f35b6103946109bc565b6040516103a19190615721565b60405180910390f35b6103b26109c2565b6040516103bf9190615721565b60405180910390f35b6103d06109c8565b6040516103dd9190615721565b60405180910390f35b6103ee6109ce565b005b6103f8610a54565b6040516104059190615721565b60405180910390f35b610416610a5a565b60405161042391906155ab565b60405180910390f35b6104466004803603810190610441919061518f565b610a80565b6040516104539190615721565b60405180910390f35b610464611e25565b6040516104719190615626565b60405180910390f35b610494600480360381019061048f919061534d565b611e3b565b6040516104a19190615721565b60405180910390f35b6104c460048036038101906104bf919061534d565b611e53565b6040516104d19190615721565b60405180910390f35b6104e2611f07565b005b6104ec611f8f565b6040516104f99190615721565b60405180910390f35b61050a611f95565b6040516105179190615721565b60405180910390f35b610528611f9b565b005b610532612021565b60405161053f9190615721565b60405180910390f35b610562600480360381019061055d91906153e7565b612027565b005b61057e6004803603810190610579919061534d565b6120e8565b60405161058b9190615721565b60405180910390f35b61059c612100565b6040516105a991906155ab565b60405180910390f35b6105cc60048036038101906105c79190615242565b612126565b005b6105d6612372565b005b6105e0612550565b6040516105ed91906155ab565b60405180910390f35b6105fe612579565b60405161060b9190615721565b60405180910390f35b61062e60048036038101906106299190615135565b61257f565b60405161063b9190615721565b60405180910390f35b61064c6125c8565b005b6106686004803603810190610663919061534d565b612921565b6040516106759190615626565b60405180910390f35b6106986004803603810190610693919061534d565b612941565b6040516106a59190615626565b60405180910390f35b6106b6612961565b6040516106c39190615721565b60405180910390f35b6106d4612967565b6040516106e191906155ab565b60405180910390f35b6106f261298d565b6040516106ff9190615721565b60405180910390f35b610722600480360381019061071d919061534d565b612993565b60405161072f9190615626565b60405180910390f35b610752600480360381019061074d91906151e2565b6129b3565b005b61075c613e1b565b60405161076991906155ab565b60405180910390f35b61078c600480360381019061078791906151e2565b613e41565b005b6107a860048036038101906107a391906153a7565b614262565b6040516107b59190615626565b60405180910390f35b6107c6614c11565b6040516107d39190615721565b60405180910390f35b6107f660048036038101906107f1919061534d565b614c17565b6040516108039190615721565b60405180910390f35b61082660048036038101906108219190615135565b614c2f565b005b610842600480360381019061083d919061534d565b614d27565b60405161084f9190615721565b60405180910390f35b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd8a55bc836040518263ffffffff1660e01b81526004016108db9190615721565b60206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092b9190615162565b9050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b601a5481565b60025481565b601c5481565b6109d6614d3f565b73ffffffffffffffffffffffffffffffffffffffff166109f4612550565b73ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a41906156c1565b60405180910390fd5b610a52614d47565b565b60155481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e6d576000610c38601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f866040518263ffffffff1660e01b8152600401610b389190615721565b60206040518083038186803b158015610b5057600080fd5b505afa158015610b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b88919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b8152600401610be391906155ab565b60206040518083038186803b158015610bfb57600080fd5b505afa158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c33919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f856040518263ffffffff1660e01b8152600401610c959190615721565b60206040518083038186803b158015610cad57600080fd5b505afa158015610cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce5919061537a565b610cf143601554614e02565b11610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890615701565b60405180910390fd5b610d4e816009600087815260200190815260200160002054614de8565b610d5a43601554614e02565b610d64919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd8a55bc876040518263ffffffff1660e01b8152600401610dd69190615721565b60206040518083038186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190615162565b73ffffffffffffffffffffffffffffffffffffffff1614610e48576000610e4b565b60015b60ff16601754610e5b91906157f4565b610e6591906157f4565b915050611e1e565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611258576000611023601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e6866040518263ffffffff1660e01b8152600401610f239190615721565b60206040518083038186803b158015610f3b57600080fd5b505afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b8152600401610fce91906155ab565b60206040518083038186803b158015610fe657600080fd5b505afa158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e6856040518263ffffffff1660e01b81526004016110809190615721565b60206040518083038186803b15801561109857600080fd5b505afa1580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d0919061537a565b6110dc43601554614e02565b1161111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390615701565b60405180910390fd5b61113981600a600087815260200190815260200160002054614de8565b61114543601554614e02565b61114f919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a58efdbd876040518263ffffffff1660e01b81526004016111c19190615721565b60206040518083038186803b1580156111d957600080fd5b505afa1580156111ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112119190615162565b73ffffffffffffffffffffffffffffffffffffffff1614611233576000611236565b60015b60ff1660185461124691906157f4565b61125091906157f4565b915050611e1e565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561164357600061140e601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e92995866040518263ffffffff1660e01b815260040161130e9190615721565b60206040518083038186803b15801561132657600080fd5b505afa15801561133a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135e919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b81526004016113b991906155ab565b60206040518083038186803b1580156113d157600080fd5b505afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611409919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e92995856040518263ffffffff1660e01b815260040161146b9190615721565b60206040518083038186803b15801561148357600080fd5b505afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb919061537a565b6114c743601554614e02565b11611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90615701565b60405180910390fd5b61152481600b600087815260200190815260200160002054614de8565b61153043601554614e02565b61153a919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a576b0c876040518263ffffffff1660e01b81526004016115ac9190615721565b60206040518083038186803b1580156115c457600080fd5b505afa1580156115d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fc9190615162565b73ffffffffffffffffffffffffffffffffffffffff161461161e576000611621565b60015b60ff1660195461163191906157f4565b61163b91906157f4565b915050611e1e565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2e5760006117f9601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f866040518263ffffffff1660e01b81526004016116f99190615721565b60206040518083038186803b15801561171157600080fd5b505afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611749919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b81526004016117a491906155ab565b60206040518083038186803b1580156117bc57600080fd5b505afa1580156117d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f4919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f856040518263ffffffff1660e01b81526004016118569190615721565b60206040518083038186803b15801561186e57600080fd5b505afa158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a6919061537a565b6118b243601554614e02565b116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990615701565b60405180910390fd5b61190f81600d600087815260200190815260200160002054614de8565b61191b43601554614e02565b611925919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab2abf06876040518263ffffffff1660e01b81526004016119979190615721565b60206040518083038186803b1580156119af57600080fd5b505afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190615162565b73ffffffffffffffffffffffffffffffffffffffff1614611a09576000611a0c565b60015b60ff16601b54611a1c91906157f4565b611a2691906157f4565b915050611e1e565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e19576000611be4601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362c56930866040518263ffffffff1660e01b8152600401611ae49190615721565b60206040518083038186803b158015611afc57600080fd5b505afa158015611b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b34919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b8152600401611b8f91906155ab565b60206040518083038186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f856040518263ffffffff1660e01b8152600401611c419190615721565b60206040518083038186803b158015611c5957600080fd5b505afa158015611c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c91919061537a565b611c9d43601554614e02565b11611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd490615701565b60405180910390fd5b611cfa81600d600087815260200190815260200160002054614de8565b611d0643601554614e02565b611d10919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d063a1b7876040518263ffffffff1660e01b8152600401611d829190615721565b60206040518083038186803b158015611d9a57600080fd5b505afa158015611dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd29190615162565b73ffffffffffffffffffffffffffffffffffffffff1614611df4576000611df7565b60015b60ff16601a54611e0791906157f4565b611e1191906157f4565b915050611e1e565b600090505b9392505050565b60008060149054906101000a900460ff16905090565b600b6020528060005260406000206000915090505481565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f836040518263ffffffff1660e01b8152600401611eb09190615721565b60206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f00919061537a565b9050919050565b611f0f614d3f565b73ffffffffffffffffffffffffffffffffffffffff16611f2d612550565b73ffffffffffffffffffffffffffffffffffffffff1614611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906156c1565b60405180910390fd5b611f8d6000614e1b565b565b60015481565b60175481565b611fa3614d3f565b73ffffffffffffffffffffffffffffffffffffffff16611fc1612550565b73ffffffffffffffffffffffffffffffffffffffff1614612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e906156c1565b60405180910390fd5b61201f614edf565b565b60045481565b61202f614d3f565b73ffffffffffffffffffffffffffffffffffffffff1661204d612550565b73ffffffffffffffffffffffffffffffffffffffff16146120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a906156c1565b60405180910390fd5b86601781905550856019819055508460188190555083601a8190555082601b819055508160168190555080436120d9919061579e565b60158190555050505050505050565b600c6020528060005260406000206000915090505481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61212e614d3f565b73ffffffffffffffffffffffffffffffffffffffff1661214c612550565b73ffffffffffffffffffffffffffffffffffffffff16146121a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612199906156c1565b60405180910390fd5b60005b858590508110156122b85760008484838181106121c5576121c4615973565b5b90506020020160208101906121da9190615135565b90508686838181106121ef576121ee615973565b5b90506020020135601c6000828254612207919061579e565b9250508190555086868381811061222157612220615973565b5b90506020020135601d600087878681811061223f5761223e615973565b5b90506020020160208101906122549190615135565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461229d919061579e565b925050819055505080806122b0906158fb565b9150506121a5565b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401612318939291906155c6565b602060405180830381600087803b15801561233257600080fd5b505af1158015612346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236a9190615320565b505050505050565b61237a614d3f565b73ffffffffffffffffffffffffffffffffffffffff16612398612550565b73ffffffffffffffffffffffffffffffffffffffff16146123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906156c1565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161244b91906155ab565b60206040518083038186803b15801561246357600080fd5b505afa158015612477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249b919061537a565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016124fa9291906155fd565b602060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254c9190615320565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460001061264a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612641906156e1565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633447fd02336040518263ffffffff1660e01b81526004016126a791906155ab565b60006040518083038186803b1580156126bf57600080fd5b505afa1580156126d3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906126fc91906152d7565b511161273d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612734906156a1565b60405180910390fd5b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601c60008282546127d2919061584e565b92505081905550601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612867919061584e565b92505081905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016128cb9291906155fd565b602060405180830381600087803b1580156128e557600080fd5b505af11580156128f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291d9190615320565b5050565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b601b5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60066020528060005260406000206000915054906101000a900460ff1681565b6129bb611e25565b156129fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f290615681565b60405180910390fd5b600080612a0a43601554614e02565b90506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633447fd02336040518263ffffffff1660e01b8152600401612a6991906155ab565b60006040518083038186803b158015612a8157600080fd5b505afa158015612a95573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612abe91906152d7565b5111612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af6906156a1565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ecb5760005b85859050811015612d82573373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e888885818110612bcb57612bca615973565b5b905060200201356040518263ffffffff1660e01b8152600401612bee9190615721565b60206040518083038186803b158015612c0657600080fd5b505afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190615162565b73ffffffffffffffffffffffffffffffffffffffff1614612c5e57600080fd5b601654612d5a601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f898986818110612cb557612cb4615973565b5b905060200201356040518263ffffffff1660e01b8152600401612cd89190615721565b60206040518083038186803b158015612cf057600080fd5b505afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d28919061537a565b600960008a8a87818110612d3f57612d3e615973565b5b90506020020135815260200190815260200160002054614de8565b83612d65919061584e565b11612d6f57600080fd5b8080612d7a906158fb565b915050612b58565b5060005b85859050811015612e2857612dd733878784818110612da857612da7615973565b5b90506020020135600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b83612de2919061579e565b92508160096000888885818110612dfc57612dfb615973565b5b905060200201358152602001908152602001600020819055508080612e20906158fb565b915050612d86565b5060005b85859050811015612ec9576000868683818110612e4c57612e4b615973565b5b9050602002013590506007600082815260200190815260200160002060009054906101000a900460ff16612eb75760016007600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060035484612eb4919061579e565b93505b5080612ec2906158fb565b9050612e2c565b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132975760005b8585905081101561314e573373ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e888885818110612f9757612f96615973565b5b905060200201356040518263ffffffff1660e01b8152600401612fba9190615721565b60206040518083038186803b158015612fd257600080fd5b505afa158015612fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300a9190615162565b73ffffffffffffffffffffffffffffffffffffffff161461302a57600080fd5b601654613126601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e689898681811061308157613080615973565b5b905060200201356040518263ffffffff1660e01b81526004016130a49190615721565b60206040518083038186803b1580156130bc57600080fd5b505afa1580156130d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f4919061537a565b600a60008a8a8781811061310b5761310a615973565b5b90506020020135815260200190815260200160002054614de8565b83613131919061584e565b1161313b57600080fd5b8080613146906158fb565b915050612f24565b5060005b858590508110156131f4576131a33387878481811061317457613173615973565b5b90506020020135600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b836131ae919061579e565b925081600a60008888858181106131c8576131c7615973565b5b9050602002013581526020019081526020016000208190555080806131ec906158fb565b915050613152565b5060005b8585905081101561329557600086868381811061321857613217615973565b5b9050602002013590506005600082815260200190815260200160002060009054906101000a900460ff166132835760016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060015484613280919061579e565b93505b508061328e906158fb565b90506131f8565b505b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135c25760005b8585905081101561351a573373ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e88888581811061336357613362615973565b5b905060200201356040518263ffffffff1660e01b81526004016133869190615721565b60206040518083038186803b15801561339e57600080fd5b505afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d69190615162565b73ffffffffffffffffffffffffffffffffffffffff16146133f657600080fd5b6016546134f2601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e9299589898681811061344d5761344c615973565b5b905060200201356040518263ffffffff1660e01b81526004016134709190615721565b60206040518083038186803b15801561348857600080fd5b505afa15801561349c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c0919061537a565b600b60008a8a878181106134d7576134d6615973565b5b90506020020135815260200190815260200160002054614de8565b836134fd919061584e565b1161350757600080fd5b8080613512906158fb565b9150506132f0565b5060005b858590508110156135c05761356f338787848181106135405761353f615973565b5b90506020020135601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b8361357a919061579e565b925081600b600088888581811061359457613593615973565b5b9050602002013581526020019081526020016000208190555080806135b8906158fb565b91505061351e565b505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561398e5760005b85859050811015613845573373ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e88888581811061368e5761368d615973565b5b905060200201356040518263ffffffff1660e01b81526004016136b19190615721565b60206040518083038186803b1580156136c957600080fd5b505afa1580156136dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137019190615162565b73ffffffffffffffffffffffffffffffffffffffff161461372157600080fd5b60165461381d601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362c5693089898681811061377857613777615973565b5b905060200201356040518263ffffffff1660e01b815260040161379b9190615721565b60206040518083038186803b1580156137b357600080fd5b505afa1580156137c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137eb919061537a565b600c60008a8a8781811061380257613801615973565b5b90506020020135815260200190815260200160002054614de8565b83613828919061584e565b1161383257600080fd5b808061383d906158fb565b91505061361b565b5060005b858590508110156138eb5761389a3387878481811061386b5761386a615973565b5b90506020020135601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b836138a5919061579e565b925081600c60008888858181106138bf576138be615973565b5b9050602002013581526020019081526020016000208190555080806138e3906158fb565b915050613849565b5060005b8585905081101561398c57600086868381811061390f5761390e615973565b5b9050602002013590506006600082815260200190815260200160002060009054906101000a900460ff1661397a5760016006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060025484613977919061579e565b93505b5080613985906158fb565b90506138ef565b505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d5a5760005b85859050811015613c11573373ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e888885818110613a5a57613a59615973565b5b905060200201356040518263ffffffff1660e01b8152600401613a7d9190615721565b60206040518083038186803b158015613a9557600080fd5b505afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190615162565b73ffffffffffffffffffffffffffffffffffffffff1614613aed57600080fd5b601654613be9601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f898986818110613b4457613b43615973565b5b905060200201356040518263ffffffff1660e01b8152600401613b679190615721565b60206040518083038186803b158015613b7f57600080fd5b505afa158015613b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb7919061537a565b600d60008a8a87818110613bce57613bcd615973565b5b90506020020135815260200190815260200160002054614de8565b83613bf4919061584e565b11613bfe57600080fd5b8080613c09906158fb565b9150506139e7565b5060005b85859050811015613cb757613c6633878784818110613c3757613c36615973565b5b90506020020135601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b83613c71919061579e565b925081600d6000888885818110613c8b57613c8a615973565b5b905060200201358152602001908152602001600020819055508080613caf906158fb565b915050613c15565b5060005b85859050811015613d58576000868683818110613cdb57613cda615973565b5b9050602002013590506008600082815260200190815260200160002060009054906101000a900460ff16613d465760016008600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060045484613d43919061579e565b93505b5080613d51906158fb565b9050613cbb565b505b6000821115613e1457601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401613dc09291906155fd565b602060405180830381600087803b158015613dda57600080fd5b505af1158015613dee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e129190615320565b505b5050505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613e49614d3f565b73ffffffffffffffffffffffffffffffffffffffff16613e67612550565b73ffffffffffffffffffffffffffffffffffffffff1614613ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb4906156c1565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613fa55760005b83839050811015613fa3576000848483818110613f3657613f35615973565b5b9050602002013590506007600082815260200190815260200160002060009054906101000a900460ff16613f915760016007600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080613f9c906158fb565b9050613f16565b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561408d5760005b8383905081101561408b57600084848381811061401e5761401d615973565b5b9050602002013590506005600082815260200190815260200160002060009054906101000a900460ff166140795760016005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080614084906158fb565b9050613ffe565b505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156141755760005b8383905081101561417357600084848381811061410657614105615973565b5b9050602002013590506006600082815260200190815260200160002060009054906101000a900460ff166141615760016006600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508061416c906158fb565b90506140e6565b505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561425d5760005b8383905081101561425b5760008484838181106141ee576141ed615973565b5b9050602002013590506008600082815260200190815260200160002060009054906101000a900460ff166142495760016008600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080614254906158fb565b90506141ce565b505b505050565b60008061427143601554614e02565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561437a57506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f866040518263ffffffff1660e01b81526004016143289190615721565b60206040518083038186803b15801561434057600080fd5b505afa158015614354573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614378919061537a565b115b1561445d57601654614449601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f876040518263ffffffff1660e01b81526004016143e09190615721565b60206040518083038186803b1580156143f857600080fd5b505afa15801561440c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614430919061537a565b6009600088815260200190815260200160002054614de8565b82614454919061584e565b11915050614c0b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561456457506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e6866040518263ffffffff1660e01b81526004016145129190615721565b60206040518083038186803b15801561452a57600080fd5b505afa15801561453e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614562919061537a565b115b1561464757601654614633601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e6876040518263ffffffff1660e01b81526004016145ca9190615721565b60206040518083038186803b1580156145e257600080fd5b505afa1580156145f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461a919061537a565b600a600088815260200190815260200160002054614de8565b8261463e919061584e565b11915050614c0b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561474e57506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e92995866040518263ffffffff1660e01b81526004016146fc9190615721565b60206040518083038186803b15801561471457600080fd5b505afa158015614728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061474c919061537a565b115b156148315760165461481d601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e92995876040518263ffffffff1660e01b81526004016147b49190615721565b60206040518083038186803b1580156147cc57600080fd5b505afa1580156147e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614804919061537a565b600b600088815260200190815260200160002054614de8565b82614828919061584e565b11915050614c0b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561493857506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362c56930866040518263ffffffff1660e01b81526004016148e69190615721565b60206040518083038186803b1580156148fe57600080fd5b505afa158015614912573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614936919061537a565b115b15614a1b57601654614a07601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362c56930876040518263ffffffff1660e01b815260040161499e9190615721565b60206040518083038186803b1580156149b657600080fd5b505afa1580156149ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149ee919061537a565b600c600088815260200190815260200160002054614de8565b82614a12919061584e565b11915050614c0b565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015614b2257506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f866040518263ffffffff1660e01b8152600401614ad09190615721565b60206040518083038186803b158015614ae857600080fd5b505afa158015614afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b20919061537a565b115b15614c0557601654614bf1601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f876040518263ffffffff1660e01b8152600401614b889190615721565b60206040518083038186803b158015614ba057600080fd5b505afa158015614bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bd8919061537a565b600d600088815260200190815260200160002054614de8565b82614bfc919061584e565b11915050614c0b565b60009150505b92915050565b60035481565b600a6020528060005260406000206000915090505481565b614c37614d3f565b73ffffffffffffffffffffffffffffffffffffffff16614c55612550565b73ffffffffffffffffffffffffffffffffffffffff1614614cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ca2906156c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614d1290615661565b60405180910390fd5b614d2481614e1b565b50565b60096020528060005260406000206000915090505481565b600033905090565b614d4f611e25565b614d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614d8590615641565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa614dd1614d3f565b604051614dde91906155ab565b60405180910390a1565b600081831015614df85781614dfa565b825b905092915050565b6000818310614e115781614e13565b825b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614ee7611e25565b15614f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f1e90615681565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614f6b614d3f565b604051614f7891906155ab565b60405180910390a1565b6000614f95614f9084615761565b61573c565b90508083825260208201905082856020860282011115614fb857614fb76159db565b5b60005b85811015614fe85781614fce8882615120565b845260208401935060208301925050600181019050614fbb565b5050509392505050565b60008135905061500181615b40565b92915050565b60008151905061501681615b40565b92915050565b60008083601f840112615032576150316159d6565b5b8235905067ffffffffffffffff81111561504f5761504e6159d1565b5b60208301915083602082028301111561506b5761506a6159db565b5b9250929050565b60008083601f840112615088576150876159d6565b5b8235905067ffffffffffffffff8111156150a5576150a46159d1565b5b6020830191508360208202830111156150c1576150c06159db565b5b9250929050565b600082601f8301126150dd576150dc6159d6565b5b81516150ed848260208601614f82565b91505092915050565b60008151905061510581615b57565b92915050565b60008135905061511a81615b6e565b92915050565b60008151905061512f81615b6e565b92915050565b60006020828403121561514b5761514a6159e5565b5b600061515984828501614ff2565b91505092915050565b600060208284031215615178576151776159e5565b5b600061518684828501615007565b91505092915050565b6000806000606084860312156151a8576151a76159e5565b5b60006151b686828701614ff2565b93505060206151c78682870161510b565b92505060406151d886828701614ff2565b9150509250925092565b6000806000604084860312156151fb576151fa6159e5565b5b600084013567ffffffffffffffff811115615219576152186159e0565b5b61522586828701615072565b9350935050602061523886828701614ff2565b9150509250925092565b60008060008060006060868803121561525e5761525d6159e5565b5b600086013567ffffffffffffffff81111561527c5761527b6159e0565b5b61528888828901615072565b9550955050602086013567ffffffffffffffff8111156152ab576152aa6159e0565b5b6152b78882890161501c565b935093505060406152ca8882890161510b565b9150509295509295909350565b6000602082840312156152ed576152ec6159e5565b5b600082015167ffffffffffffffff81111561530b5761530a6159e0565b5b615317848285016150c8565b91505092915050565b600060208284031215615336576153356159e5565b5b6000615344848285016150f6565b91505092915050565b600060208284031215615363576153626159e5565b5b60006153718482850161510b565b91505092915050565b6000602082840312156153905761538f6159e5565b5b600061539e84828501615120565b91505092915050565b600080604083850312156153be576153bd6159e5565b5b60006153cc8582860161510b565b92505060206153dd85828601614ff2565b9150509250929050565b600080600080600080600060e0888a031215615406576154056159e5565b5b60006154148a828b0161510b565b97505060206154258a828b0161510b565b96505060406154368a828b0161510b565b95505060606154478a828b0161510b565b94505060806154588a828b0161510b565b93505060a06154698a828b0161510b565b92505060c061547a8a828b0161510b565b91505092959891949750929550565b61549281615882565b82525050565b6154a181615894565b82525050565b60006154b460148361578d565b91506154bf826159fb565b602082019050919050565b60006154d760268361578d565b91506154e282615a24565b604082019050919050565b60006154fa60108361578d565b915061550582615a73565b602082019050919050565b600061551d60148361578d565b915061552882615a9c565b602082019050919050565b600061554060208361578d565b915061554b82615ac5565b602082019050919050565b6000615563601a8361578d565b915061556e82615aee565b602082019050919050565b6000615586600e8361578d565b915061559182615b17565b602082019050919050565b6155a5816158c0565b82525050565b60006020820190506155c06000830184615489565b92915050565b60006060820190506155db6000830186615489565b6155e86020830185615489565b6155f5604083018461559c565b949350505050565b60006040820190506156126000830185615489565b61561f602083018461559c565b9392505050565b600060208201905061563b6000830184615498565b92915050565b6000602082019050818103600083015261565a816154a7565b9050919050565b6000602082019050818103600083015261567a816154ca565b9050919050565b6000602082019050818103600083015261569a816154ed565b9050919050565b600060208201905081810360008301526156ba81615510565b9050919050565b600060208201905081810360008301526156da81615533565b9050919050565b600060208201905081810360008301526156fa81615556565b9050919050565b6000602082019050818103600083015261571a81615579565b9050919050565b6000602082019050615736600083018461559c565b92915050565b6000615746615757565b905061575282826158ca565b919050565b6000604051905090565b600067ffffffffffffffff82111561577c5761577b6159a2565b5b602082029050602081019050919050565b600082825260208201905092915050565b60006157a9826158c0565b91506157b4836158c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156157e9576157e8615944565b5b828201905092915050565b60006157ff826158c0565b915061580a836158c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561584357615842615944565b5b828202905092915050565b6000615859826158c0565b9150615864836158c0565b92508282101561587757615876615944565b5b828203905092915050565b600061588d826158a0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6158d3826159ea565b810181811067ffffffffffffffff821117156158f2576158f16159a2565b5b80604052505050565b6000615906826158c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561593957615938615944565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4e6f204d656d6265727368697020466f72676564000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f776974686472617720616d6f756e74206f766572207374616b65000000000000600082015250565b7f496e76616c696420626c6f636b73000000000000000000000000000000000000600082015250565b615b4981615882565b8114615b5457600080fd5b50565b615b6081615894565b8114615b6b57600080fd5b50565b615b77816158c0565b8114615b8257600080fd5b5056fea26469706673582212201bfd9f23a630e89cf4ec1948edf363f3e89da144c5da39cb1bce19add5457a0264736f6c63430008070033000000000000000000000000372405a6d95628ad14518bfe05165d397f43de1d000000000000000000000000f4744ec5d846f7f1a0c5d389f590cc1344ed3fcf00000000000000000000000098d3cd2f29a4f5464266f925fe177018e6c2f9e6000000000000000000000000c78cd8ab5a99e295d31da3230319ebc2f285514d000000000000000000000000813b5c4ae6b188f4581aa1dfdb7f4aba44aa578b000000000000000000000000fcbe615def610e806bb64427574a2c5c1fb55510
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061027f5760003560e01c806388d35c481161015c578063b1a1e45d116100ce578063ca1d066f11610087578063ca1d066f14610772578063d4e92e6e1461078e578063d6e61d71146107be578063dffb5e06146107dc578063f2fde38b1461080c578063f9a34ad9146108285761027f565b8063b1a1e45d146106ae578063b5b4f4b9146106cc578063bb470528146106ea578063bbe25bf314610708578063bc7de05c14610738578063c0da146a146107545761027f565b80638da5cb5b116101205780638da5cb5b146105d857806391e139c5146105f6578063942cd44b146106145780639b9bb968146106445780639f8518021461064e578063a020ec161461067e5761027f565b806388d35c48146105485780638bd9eb7f146105645780638bf1efd8146105945780638c0ece82146105b25780638d8f2adb146105ce5761027f565b80634665096d116101f557806370ff79c3116101b957806370ff79c3146104aa578063715018a6146104da5780637d5c92cb146104e457806382b875b8146105025780638456cb591461052057806386f69bed1461052a5761027f565b80634665096d146103f057806353b0f08a1461040e5780635c193f741461042c5780635c975abb1461045c5780636a04ef921461047a5761027f565b80632821f1e7116102475780632821f1e7146103505780632bf87f5a1461036e5780632d9281361461038c5780632e7bffef146103aa5780633eaaf86b146103c85780633f4ba83a146103e65761027f565b80630443165d1461028457806304807750146102a257806307987249146102d257806314e7474614610302578063276184ae14610332575b600080fd5b61028c610858565b60405161029991906155ab565b60405180910390f35b6102bc60048036038101906102b7919061534d565b61087e565b6040516102c991906155ab565b60405180910390f35b6102ec60048036038101906102e7919061534d565b610932565b6040516102f99190615626565b60405180910390f35b61031c6004803603810190610317919061534d565b610952565b6040516103299190615721565b60405180910390f35b61033a61096a565b60405161034791906155ab565b60405180910390f35b610358610990565b60405161036591906155ab565b60405180910390f35b6103766109b6565b6040516103839190615721565b60405180910390f35b6103946109bc565b6040516103a19190615721565b60405180910390f35b6103b26109c2565b6040516103bf9190615721565b60405180910390f35b6103d06109c8565b6040516103dd9190615721565b60405180910390f35b6103ee6109ce565b005b6103f8610a54565b6040516104059190615721565b60405180910390f35b610416610a5a565b60405161042391906155ab565b60405180910390f35b6104466004803603810190610441919061518f565b610a80565b6040516104539190615721565b60405180910390f35b610464611e25565b6040516104719190615626565b60405180910390f35b610494600480360381019061048f919061534d565b611e3b565b6040516104a19190615721565b60405180910390f35b6104c460048036038101906104bf919061534d565b611e53565b6040516104d19190615721565b60405180910390f35b6104e2611f07565b005b6104ec611f8f565b6040516104f99190615721565b60405180910390f35b61050a611f95565b6040516105179190615721565b60405180910390f35b610528611f9b565b005b610532612021565b60405161053f9190615721565b60405180910390f35b610562600480360381019061055d91906153e7565b612027565b005b61057e6004803603810190610579919061534d565b6120e8565b60405161058b9190615721565b60405180910390f35b61059c612100565b6040516105a991906155ab565b60405180910390f35b6105cc60048036038101906105c79190615242565b612126565b005b6105d6612372565b005b6105e0612550565b6040516105ed91906155ab565b60405180910390f35b6105fe612579565b60405161060b9190615721565b60405180910390f35b61062e60048036038101906106299190615135565b61257f565b60405161063b9190615721565b60405180910390f35b61064c6125c8565b005b6106686004803603810190610663919061534d565b612921565b6040516106759190615626565b60405180910390f35b6106986004803603810190610693919061534d565b612941565b6040516106a59190615626565b60405180910390f35b6106b6612961565b6040516106c39190615721565b60405180910390f35b6106d4612967565b6040516106e191906155ab565b60405180910390f35b6106f261298d565b6040516106ff9190615721565b60405180910390f35b610722600480360381019061071d919061534d565b612993565b60405161072f9190615626565b60405180910390f35b610752600480360381019061074d91906151e2565b6129b3565b005b61075c613e1b565b60405161076991906155ab565b60405180910390f35b61078c600480360381019061078791906151e2565b613e41565b005b6107a860048036038101906107a391906153a7565b614262565b6040516107b59190615626565b60405180910390f35b6107c6614c11565b6040516107d39190615721565b60405180910390f35b6107f660048036038101906107f1919061534d565b614c17565b6040516108039190615721565b60405180910390f35b61082660048036038101906108219190615135565b614c2f565b005b610842600480360381019061083d919061534d565b614d27565b60405161084f9190615721565b60405180910390f35b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd8a55bc836040518263ffffffff1660e01b81526004016108db9190615721565b60206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061092b9190615162565b9050919050565b60056020528060005260406000206000915054906101000a900460ff1681565b600d6020528060005260406000206000915090505481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b601a5481565b60025481565b601c5481565b6109d6614d3f565b73ffffffffffffffffffffffffffffffffffffffff166109f4612550565b73ffffffffffffffffffffffffffffffffffffffff1614610a4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a41906156c1565b60405180910390fd5b610a52614d47565b565b60155481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e6d576000610c38601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f866040518263ffffffff1660e01b8152600401610b389190615721565b60206040518083038186803b158015610b5057600080fd5b505afa158015610b64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b88919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b8152600401610be391906155ab565b60206040518083038186803b158015610bfb57600080fd5b505afa158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c33919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f856040518263ffffffff1660e01b8152600401610c959190615721565b60206040518083038186803b158015610cad57600080fd5b505afa158015610cc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce5919061537a565b610cf143601554614e02565b11610d31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2890615701565b60405180910390fd5b610d4e816009600087815260200190815260200160002054614de8565b610d5a43601554614e02565b610d64919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663bd8a55bc876040518263ffffffff1660e01b8152600401610dd69190615721565b60206040518083038186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e269190615162565b73ffffffffffffffffffffffffffffffffffffffff1614610e48576000610e4b565b60015b60ff16601754610e5b91906157f4565b610e6591906157f4565b915050611e1e565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611258576000611023601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e6866040518263ffffffff1660e01b8152600401610f239190615721565b60206040518083038186803b158015610f3b57600080fd5b505afa158015610f4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f73919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b8152600401610fce91906155ab565b60206040518083038186803b158015610fe657600080fd5b505afa158015610ffa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101e919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e6856040518263ffffffff1660e01b81526004016110809190615721565b60206040518083038186803b15801561109857600080fd5b505afa1580156110ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d0919061537a565b6110dc43601554614e02565b1161111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390615701565b60405180910390fd5b61113981600a600087815260200190815260200160002054614de8565b61114543601554614e02565b61114f919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a58efdbd876040518263ffffffff1660e01b81526004016111c19190615721565b60206040518083038186803b1580156111d957600080fd5b505afa1580156111ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112119190615162565b73ffffffffffffffffffffffffffffffffffffffff1614611233576000611236565b60015b60ff1660185461124691906157f4565b61125091906157f4565b915050611e1e565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561164357600061140e601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e92995866040518263ffffffff1660e01b815260040161130e9190615721565b60206040518083038186803b15801561132657600080fd5b505afa15801561133a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135e919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b81526004016113b991906155ab565b60206040518083038186803b1580156113d157600080fd5b505afa1580156113e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611409919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e92995856040518263ffffffff1660e01b815260040161146b9190615721565b60206040518083038186803b15801561148357600080fd5b505afa158015611497573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bb919061537a565b6114c743601554614e02565b11611507576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fe90615701565b60405180910390fd5b61152481600b600087815260200190815260200160002054614de8565b61153043601554614e02565b61153a919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636a576b0c876040518263ffffffff1660e01b81526004016115ac9190615721565b60206040518083038186803b1580156115c457600080fd5b505afa1580156115d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fc9190615162565b73ffffffffffffffffffffffffffffffffffffffff161461161e576000611621565b60015b60ff1660195461163191906157f4565b61163b91906157f4565b915050611e1e565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a2e5760006117f9601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f866040518263ffffffff1660e01b81526004016116f99190615721565b60206040518083038186803b15801561171157600080fd5b505afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611749919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b81526004016117a491906155ab565b60206040518083038186803b1580156117bc57600080fd5b505afa1580156117d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117f4919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f856040518263ffffffff1660e01b81526004016118569190615721565b60206040518083038186803b15801561186e57600080fd5b505afa158015611882573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a6919061537a565b6118b243601554614e02565b116118f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e990615701565b60405180910390fd5b61190f81600d600087815260200190815260200160002054614de8565b61191b43601554614e02565b611925919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ab2abf06876040518263ffffffff1660e01b81526004016119979190615721565b60206040518083038186803b1580156119af57600080fd5b505afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190615162565b73ffffffffffffffffffffffffffffffffffffffff1614611a09576000611a0c565b60015b60ff16601b54611a1c91906157f4565b611a2691906157f4565b915050611e1e565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e19576000611be4601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362c56930866040518263ffffffff1660e01b8152600401611ae49190615721565b60206040518083038186803b158015611afc57600080fd5b505afa158015611b10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b34919061537a565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166371d6209e886040518263ffffffff1660e01b8152600401611b8f91906155ab565b60206040518083038186803b158015611ba757600080fd5b505afa158015611bbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bdf919061537a565b614de8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f856040518263ffffffff1660e01b8152600401611c419190615721565b60206040518083038186803b158015611c5957600080fd5b505afa158015611c6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c91919061537a565b611c9d43601554614e02565b11611cdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd490615701565b60405180910390fd5b611cfa81600d600087815260200190815260200160002054614de8565b611d0643601554614e02565b611d10919061584e565b8573ffffffffffffffffffffffffffffffffffffffff16601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d063a1b7876040518263ffffffff1660e01b8152600401611d829190615721565b60206040518083038186803b158015611d9a57600080fd5b505afa158015611dae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dd29190615162565b73ffffffffffffffffffffffffffffffffffffffff1614611df4576000611df7565b60015b60ff16601a54611e0791906157f4565b611e1191906157f4565b915050611e1e565b600090505b9392505050565b60008060149054906101000a900460ff16905090565b600b6020528060005260406000206000915090505481565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f836040518263ffffffff1660e01b8152600401611eb09190615721565b60206040518083038186803b158015611ec857600080fd5b505afa158015611edc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f00919061537a565b9050919050565b611f0f614d3f565b73ffffffffffffffffffffffffffffffffffffffff16611f2d612550565b73ffffffffffffffffffffffffffffffffffffffff1614611f83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7a906156c1565b60405180910390fd5b611f8d6000614e1b565b565b60015481565b60175481565b611fa3614d3f565b73ffffffffffffffffffffffffffffffffffffffff16611fc1612550565b73ffffffffffffffffffffffffffffffffffffffff1614612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e906156c1565b60405180910390fd5b61201f614edf565b565b60045481565b61202f614d3f565b73ffffffffffffffffffffffffffffffffffffffff1661204d612550565b73ffffffffffffffffffffffffffffffffffffffff16146120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a906156c1565b60405180910390fd5b86601781905550856019819055508460188190555083601a8190555082601b819055508160168190555080436120d9919061579e565b60158190555050505050505050565b600c6020528060005260406000206000915090505481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61212e614d3f565b73ffffffffffffffffffffffffffffffffffffffff1661214c612550565b73ffffffffffffffffffffffffffffffffffffffff16146121a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612199906156c1565b60405180910390fd5b60005b858590508110156122b85760008484838181106121c5576121c4615973565b5b90506020020160208101906121da9190615135565b90508686838181106121ef576121ee615973565b5b90506020020135601c6000828254612207919061579e565b9250508190555086868381811061222157612220615973565b5b90506020020135601d600087878681811061223f5761223e615973565b5b90506020020160208101906122549190615135565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461229d919061579e565b925050819055505080806122b0906158fb565b9150506121a5565b50601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401612318939291906155c6565b602060405180830381600087803b15801561233257600080fd5b505af1158015612346573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236a9190615320565b505050505050565b61237a614d3f565b73ffffffffffffffffffffffffffffffffffffffff16612398612550565b73ffffffffffffffffffffffffffffffffffffffff16146123ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e5906156c1565b60405180910390fd5b6000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161244b91906155ab565b60206040518083038186803b15801561246357600080fd5b505afa158015612477573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249b919061537a565b9050601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016124fa9291906155fd565b602060405180830381600087803b15801561251457600080fd5b505af1158015612528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254c9190615320565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60195481565b6000601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460001061264a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612641906156e1565b60405180910390fd5b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633447fd02336040518263ffffffff1660e01b81526004016126a791906155ab565b60006040518083038186803b1580156126bf57600080fd5b505afa1580156126d3573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906126fc91906152d7565b511161273d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612734906156a1565b60405180910390fd5b6000601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601c60008282546127d2919061584e565b92505081905550601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054601d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612867919061584e565b92505081905550601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016128cb9291906155fd565b602060405180830381600087803b1580156128e557600080fd5b505af11580156128f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061291d9190615320565b5050565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b601b5481565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b60066020528060005260406000206000915054906101000a900460ff1681565b6129bb611e25565b156129fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129f290615681565b60405180910390fd5b600080612a0a43601554614e02565b90506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633447fd02336040518263ffffffff1660e01b8152600401612a6991906155ab565b60006040518083038186803b158015612a8157600080fd5b505afa158015612a95573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250810190612abe91906152d7565b5111612aff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af6906156a1565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ecb5760005b85859050811015612d82573373ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e888885818110612bcb57612bca615973565b5b905060200201356040518263ffffffff1660e01b8152600401612bee9190615721565b60206040518083038186803b158015612c0657600080fd5b505afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e9190615162565b73ffffffffffffffffffffffffffffffffffffffff1614612c5e57600080fd5b601654612d5a601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f898986818110612cb557612cb4615973565b5b905060200201356040518263ffffffff1660e01b8152600401612cd89190615721565b60206040518083038186803b158015612cf057600080fd5b505afa158015612d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d28919061537a565b600960008a8a87818110612d3f57612d3e615973565b5b90506020020135815260200190815260200160002054614de8565b83612d65919061584e565b11612d6f57600080fd5b8080612d7a906158fb565b915050612b58565b5060005b85859050811015612e2857612dd733878784818110612da857612da7615973565b5b90506020020135600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b83612de2919061579e565b92508160096000888885818110612dfc57612dfb615973565b5b905060200201358152602001908152602001600020819055508080612e20906158fb565b915050612d86565b5060005b85859050811015612ec9576000868683818110612e4c57612e4b615973565b5b9050602002013590506007600082815260200190815260200160002060009054906101000a900460ff16612eb75760016007600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060035484612eb4919061579e565b93505b5080612ec2906158fb565b9050612e2c565b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132975760005b8585905081101561314e573373ffffffffffffffffffffffffffffffffffffffff16600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e888885818110612f9757612f96615973565b5b905060200201356040518263ffffffff1660e01b8152600401612fba9190615721565b60206040518083038186803b158015612fd257600080fd5b505afa158015612fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300a9190615162565b73ffffffffffffffffffffffffffffffffffffffff161461302a57600080fd5b601654613126601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e689898681811061308157613080615973565b5b905060200201356040518263ffffffff1660e01b81526004016130a49190615721565b60206040518083038186803b1580156130bc57600080fd5b505afa1580156130d0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130f4919061537a565b600a60008a8a8781811061310b5761310a615973565b5b90506020020135815260200190815260200160002054614de8565b83613131919061584e565b1161313b57600080fd5b8080613146906158fb565b915050612f24565b5060005b858590508110156131f4576131a33387878481811061317457613173615973565b5b90506020020135600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b836131ae919061579e565b925081600a60008888858181106131c8576131c7615973565b5b9050602002013581526020019081526020016000208190555080806131ec906158fb565b915050613152565b5060005b8585905081101561329557600086868381811061321857613217615973565b5b9050602002013590506005600082815260200190815260200160002060009054906101000a900460ff166132835760016005600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060015484613280919061579e565b93505b508061328e906158fb565b90506131f8565b505b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156135c25760005b8585905081101561351a573373ffffffffffffffffffffffffffffffffffffffff16601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e88888581811061336357613362615973565b5b905060200201356040518263ffffffff1660e01b81526004016133869190615721565b60206040518083038186803b15801561339e57600080fd5b505afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d69190615162565b73ffffffffffffffffffffffffffffffffffffffff16146133f657600080fd5b6016546134f2601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e9299589898681811061344d5761344c615973565b5b905060200201356040518263ffffffff1660e01b81526004016134709190615721565b60206040518083038186803b15801561348857600080fd5b505afa15801561349c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134c0919061537a565b600b60008a8a878181106134d7576134d6615973565b5b90506020020135815260200190815260200160002054614de8565b836134fd919061584e565b1161350757600080fd5b8080613512906158fb565b9150506132f0565b5060005b858590508110156135c05761356f338787848181106135405761353f615973565b5b90506020020135601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b8361357a919061579e565b925081600b600088888581811061359457613593615973565b5b9050602002013581526020019081526020016000208190555080806135b8906158fb565b91505061351e565b505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561398e5760005b85859050811015613845573373ffffffffffffffffffffffffffffffffffffffff16601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e88888581811061368e5761368d615973565b5b905060200201356040518263ffffffff1660e01b81526004016136b19190615721565b60206040518083038186803b1580156136c957600080fd5b505afa1580156136dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137019190615162565b73ffffffffffffffffffffffffffffffffffffffff161461372157600080fd5b60165461381d601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362c5693089898681811061377857613777615973565b5b905060200201356040518263ffffffff1660e01b815260040161379b9190615721565b60206040518083038186803b1580156137b357600080fd5b505afa1580156137c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137eb919061537a565b600c60008a8a8781811061380257613801615973565b5b90506020020135815260200190815260200160002054614de8565b83613828919061584e565b1161383257600080fd5b808061383d906158fb565b91505061361b565b5060005b858590508110156138eb5761389a3387878481811061386b5761386a615973565b5b90506020020135601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b836138a5919061579e565b925081600c60008888858181106138bf576138be615973565b5b9050602002013581526020019081526020016000208190555080806138e3906158fb565b915050613849565b5060005b8585905081101561398c57600086868381811061390f5761390e615973565b5b9050602002013590506006600082815260200190815260200160002060009054906101000a900460ff1661397a5760016006600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060025484613977919061579e565b93505b5080613985906158fb565b90506138ef565b505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613d5a5760005b85859050811015613c11573373ffffffffffffffffffffffffffffffffffffffff16601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e888885818110613a5a57613a59615973565b5b905060200201356040518263ffffffff1660e01b8152600401613a7d9190615721565b60206040518083038186803b158015613a9557600080fd5b505afa158015613aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613acd9190615162565b73ffffffffffffffffffffffffffffffffffffffff1614613aed57600080fd5b601654613be9601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f898986818110613b4457613b43615973565b5b905060200201356040518263ffffffff1660e01b8152600401613b679190615721565b60206040518083038186803b158015613b7f57600080fd5b505afa158015613b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bb7919061537a565b600d60008a8a87818110613bce57613bcd615973565b5b90506020020135815260200190815260200160002054614de8565b83613bf4919061584e565b11613bfe57600080fd5b8080613c09906158fb565b9150506139e7565b5060005b85859050811015613cb757613c6633878784818110613c3757613c36615973565b5b90506020020135601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610a80565b83613c71919061579e565b925081600d6000888885818110613c8b57613c8a615973565b5b905060200201358152602001908152602001600020819055508080613caf906158fb565b915050613c15565b5060005b85859050811015613d58576000868683818110613cdb57613cda615973565b5b9050602002013590506008600082815260200190815260200160002060009054906101000a900460ff16613d465760016008600083815260200190815260200160002060006101000a81548160ff02191690831515021790555060045484613d43919061579e565b93505b5080613d51906158fb565b9050613cbb565b505b6000821115613e1457601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401613dc09291906155fd565b602060405180830381600087803b158015613dda57600080fd5b505af1158015613dee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e129190615320565b505b5050505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b613e49614d3f565b73ffffffffffffffffffffffffffffffffffffffff16613e67612550565b73ffffffffffffffffffffffffffffffffffffffff1614613ebd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eb4906156c1565b60405180910390fd5b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613fa55760005b83839050811015613fa3576000848483818110613f3657613f35615973565b5b9050602002013590506007600082815260200190815260200160002060009054906101000a900460ff16613f915760016007600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080613f9c906158fb565b9050613f16565b505b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561408d5760005b8383905081101561408b57600084848381811061401e5761401d615973565b5b9050602002013590506005600082815260200190815260200160002060009054906101000a900460ff166140795760016005600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080614084906158fb565b9050613ffe565b505b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156141755760005b8383905081101561417357600084848381811061410657614105615973565b5b9050602002013590506006600082815260200190815260200160002060009054906101000a900460ff166141615760016006600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508061416c906158fb565b90506140e6565b505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561425d5760005b8383905081101561425b5760008484838181106141ee576141ed615973565b5b9050602002013590506008600082815260200190815260200160002060009054906101000a900460ff166142495760016008600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080614254906158fb565b90506141ce565b505b505050565b60008061427143601554614e02565b9050600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561437a57506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f866040518263ffffffff1660e01b81526004016143289190615721565b60206040518083038186803b15801561434057600080fd5b505afa158015614354573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614378919061537a565b115b1561445d57601654614449601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166387c1ae2f876040518263ffffffff1660e01b81526004016143e09190615721565b60206040518083038186803b1580156143f857600080fd5b505afa15801561440c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614430919061537a565b6009600088815260200190815260200160002054614de8565b82614454919061584e565b11915050614c0b565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561456457506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e6866040518263ffffffff1660e01b81526004016145129190615721565b60206040518083038186803b15801561452a57600080fd5b505afa15801561453e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614562919061537a565b115b1561464757601654614633601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663693830e6876040518263ffffffff1660e01b81526004016145ca9190615721565b60206040518083038186803b1580156145e257600080fd5b505afa1580156145f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061461a919061537a565b600a600088815260200190815260200160002054614de8565b8261463e919061584e565b11915050614c0b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561474e57506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e92995866040518263ffffffff1660e01b81526004016146fc9190615721565b60206040518083038186803b15801561471457600080fd5b505afa158015614728573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061474c919061537a565b115b156148315760165461481d601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5e92995876040518263ffffffff1660e01b81526004016147b49190615721565b60206040518083038186803b1580156147cc57600080fd5b505afa1580156147e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614804919061537a565b600b600088815260200190815260200160002054614de8565b82614828919061584e565b11915050614c0b565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561493857506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362c56930866040518263ffffffff1660e01b81526004016148e69190615721565b60206040518083038186803b1580156148fe57600080fd5b505afa158015614912573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614936919061537a565b115b15614a1b57601654614a07601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166362c56930876040518263ffffffff1660e01b815260040161499e9190615721565b60206040518083038186803b1580156149b657600080fd5b505afa1580156149ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906149ee919061537a565b600c600088815260200190815260200160002054614de8565b82614a12919061584e565b11915050614c0b565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015614b2257506000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f866040518263ffffffff1660e01b8152600401614ad09190615721565b60206040518083038186803b158015614ae857600080fd5b505afa158015614afc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b20919061537a565b115b15614c0557601654614bf1601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fcf5ec9f876040518263ffffffff1660e01b8152600401614b889190615721565b60206040518083038186803b158015614ba057600080fd5b505afa158015614bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614bd8919061537a565b600d600088815260200190815260200160002054614de8565b82614bfc919061584e565b11915050614c0b565b60009150505b92915050565b60035481565b600a6020528060005260406000206000915090505481565b614c37614d3f565b73ffffffffffffffffffffffffffffffffffffffff16614c55612550565b73ffffffffffffffffffffffffffffffffffffffff1614614cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614ca2906156c1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415614d1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614d1290615661565b60405180910390fd5b614d2481614e1b565b50565b60096020528060005260406000206000915090505481565b600033905090565b614d4f611e25565b614d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614d8590615641565b60405180910390fd5b60008060146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa614dd1614d3f565b604051614dde91906155ab565b60405180910390a1565b600081831015614df85781614dfa565b825b905092915050565b6000818310614e115781614e13565b825b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b614ee7611e25565b15614f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614f1e90615681565b60405180910390fd5b6001600060146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258614f6b614d3f565b604051614f7891906155ab565b60405180910390a1565b6000614f95614f9084615761565b61573c565b90508083825260208201905082856020860282011115614fb857614fb76159db565b5b60005b85811015614fe85781614fce8882615120565b845260208401935060208301925050600181019050614fbb565b5050509392505050565b60008135905061500181615b40565b92915050565b60008151905061501681615b40565b92915050565b60008083601f840112615032576150316159d6565b5b8235905067ffffffffffffffff81111561504f5761504e6159d1565b5b60208301915083602082028301111561506b5761506a6159db565b5b9250929050565b60008083601f840112615088576150876159d6565b5b8235905067ffffffffffffffff8111156150a5576150a46159d1565b5b6020830191508360208202830111156150c1576150c06159db565b5b9250929050565b600082601f8301126150dd576150dc6159d6565b5b81516150ed848260208601614f82565b91505092915050565b60008151905061510581615b57565b92915050565b60008135905061511a81615b6e565b92915050565b60008151905061512f81615b6e565b92915050565b60006020828403121561514b5761514a6159e5565b5b600061515984828501614ff2565b91505092915050565b600060208284031215615178576151776159e5565b5b600061518684828501615007565b91505092915050565b6000806000606084860312156151a8576151a76159e5565b5b60006151b686828701614ff2565b93505060206151c78682870161510b565b92505060406151d886828701614ff2565b9150509250925092565b6000806000604084860312156151fb576151fa6159e5565b5b600084013567ffffffffffffffff811115615219576152186159e0565b5b61522586828701615072565b9350935050602061523886828701614ff2565b9150509250925092565b60008060008060006060868803121561525e5761525d6159e5565b5b600086013567ffffffffffffffff81111561527c5761527b6159e0565b5b61528888828901615072565b9550955050602086013567ffffffffffffffff8111156152ab576152aa6159e0565b5b6152b78882890161501c565b935093505060406152ca8882890161510b565b9150509295509295909350565b6000602082840312156152ed576152ec6159e5565b5b600082015167ffffffffffffffff81111561530b5761530a6159e0565b5b615317848285016150c8565b91505092915050565b600060208284031215615336576153356159e5565b5b6000615344848285016150f6565b91505092915050565b600060208284031215615363576153626159e5565b5b60006153718482850161510b565b91505092915050565b6000602082840312156153905761538f6159e5565b5b600061539e84828501615120565b91505092915050565b600080604083850312156153be576153bd6159e5565b5b60006153cc8582860161510b565b92505060206153dd85828601614ff2565b9150509250929050565b600080600080600080600060e0888a031215615406576154056159e5565b5b60006154148a828b0161510b565b97505060206154258a828b0161510b565b96505060406154368a828b0161510b565b95505060606154478a828b0161510b565b94505060806154588a828b0161510b565b93505060a06154698a828b0161510b565b92505060c061547a8a828b0161510b565b91505092959891949750929550565b61549281615882565b82525050565b6154a181615894565b82525050565b60006154b460148361578d565b91506154bf826159fb565b602082019050919050565b60006154d760268361578d565b91506154e282615a24565b604082019050919050565b60006154fa60108361578d565b915061550582615a73565b602082019050919050565b600061551d60148361578d565b915061552882615a9c565b602082019050919050565b600061554060208361578d565b915061554b82615ac5565b602082019050919050565b6000615563601a8361578d565b915061556e82615aee565b602082019050919050565b6000615586600e8361578d565b915061559182615b17565b602082019050919050565b6155a5816158c0565b82525050565b60006020820190506155c06000830184615489565b92915050565b60006060820190506155db6000830186615489565b6155e86020830185615489565b6155f5604083018461559c565b949350505050565b60006040820190506156126000830185615489565b61561f602083018461559c565b9392505050565b600060208201905061563b6000830184615498565b92915050565b6000602082019050818103600083015261565a816154a7565b9050919050565b6000602082019050818103600083015261567a816154ca565b9050919050565b6000602082019050818103600083015261569a816154ed565b9050919050565b600060208201905081810360008301526156ba81615510565b9050919050565b600060208201905081810360008301526156da81615533565b9050919050565b600060208201905081810360008301526156fa81615556565b9050919050565b6000602082019050818103600083015261571a81615579565b9050919050565b6000602082019050615736600083018461559c565b92915050565b6000615746615757565b905061575282826158ca565b919050565b6000604051905090565b600067ffffffffffffffff82111561577c5761577b6159a2565b5b602082029050602081019050919050565b600082825260208201905092915050565b60006157a9826158c0565b91506157b4836158c0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156157e9576157e8615944565b5b828201905092915050565b60006157ff826158c0565b915061580a836158c0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561584357615842615944565b5b828202905092915050565b6000615859826158c0565b9150615864836158c0565b92508282101561587757615876615944565b5b828203905092915050565b600061588d826158a0565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6158d3826159ea565b810181811067ffffffffffffffff821117156158f2576158f16159a2565b5b80604052505050565b6000615906826158c0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561593957615938615944565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4e6f204d656d6265727368697020466f72676564000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f776974686472617720616d6f756e74206f766572207374616b65000000000000600082015250565b7f496e76616c696420626c6f636b73000000000000000000000000000000000000600082015250565b615b4981615882565b8114615b5457600080fd5b50565b615b6081615894565b8114615b6b57600080fd5b50565b615b77816158c0565b8114615b8257600080fd5b5056fea26469706673582212201bfd9f23a630e89cf4ec1948edf363f3e89da144c5da39cb1bce19add5457a0264736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000372405a6d95628ad14518bfe05165d397f43de1d000000000000000000000000f4744ec5d846f7f1a0c5d389f590cc1344ed3fcf00000000000000000000000098d3cd2f29a4f5464266f925fe177018e6c2f9e6000000000000000000000000c78cd8ab5a99e295d31da3230319ebc2f285514d000000000000000000000000813b5c4ae6b188f4581aa1dfdb7f4aba44aa578b000000000000000000000000fcbe615def610e806bb64427574a2c5c1fb55510
-----Decoded View---------------
Arg [0] : _legendsAddress (address): 0x372405A6d95628Ad14518BfE05165D397f43dE1D
Arg [1] : _tigerAddress (address): 0xf4744Ec5D846F7f1a0c5d389F590Cc1344eD3fCf
Arg [2] : _cubsAddress (address): 0x98d3cd2F29a4F5464266f925Fe177018e6c2F9E6
Arg [3] : _fundaeAddress (address): 0xC78cd8AB5a99E295D31dA3230319EBc2f285514D
Arg [4] : _azukiAddress (address): 0x813b5c4aE6b188F4581aa1dfdB7f4Aba44AA578B
Arg [5] : _erc20Address (address): 0xFcbE615dEf610E806BB64427574A2c5c1fB55510
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 000000000000000000000000372405a6d95628ad14518bfe05165d397f43de1d
Arg [1] : 000000000000000000000000f4744ec5d846f7f1a0c5d389f590cc1344ed3fcf
Arg [2] : 00000000000000000000000098d3cd2f29a4f5464266f925fe177018e6c2f9e6
Arg [3] : 000000000000000000000000c78cd8ab5a99e295d31da3230319ebc2f285514d
Arg [4] : 000000000000000000000000813b5c4ae6b188f4581aa1dfdb7f4aba44aa578b
Arg [5] : 000000000000000000000000fcbe615def610e806bb64427574a2c5c1fb55510
Deployed Bytecode Sourcemap
50195:19562:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51071:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58477:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50461:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50920:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51209:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51037;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51417:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51478:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50298:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51543:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52635:65;;;:::i;:::-;;51262:25;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51139:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58720:4390;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44344:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50796:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58277:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47152:103;;;:::i;:::-;;50251:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51384:26;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52566:61;;;:::i;:::-;;50395:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55531:526;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50857:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51173:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52708:532;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;69558:196;;;:::i;:::-;;46501:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51448:23;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53763:117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53248:507;;;:::i;:::-;;50564:46;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50617:44;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51510:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51001:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51294:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50512:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;63147:6375;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51104:28;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53888:1297;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;56065:2204;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50346:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50734:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47410:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50670:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51071:26;;;;;;;;;;;;;:::o;58477:192::-;58573:7;58619:12;;;;;;;;;;;58605:47;;;58653:7;58605:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58598:63;;58477:192;;;:::o;50461:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;50920:55::-;;;;;;;;;;;;;;;;;:::o;51209:27::-;;;;;;;;;;;;;:::o;51037:::-;;;;;;;;;;;;;:::o;51417:24::-;;;;:::o;51478:25::-;;;;:::o;50298:41::-;;;;:::o;51543:27::-;;;;:::o;52635:65::-;46732:12;:10;:12::i;:::-;46721:23;;:7;:5;:7::i;:::-;:23;;;46713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52682:10:::1;:8;:10::i;:::-;52635:65::o:0;51262:25::-;;;;:::o;51139:27::-;;;;;;;;;;;;;:::o;58720:4390::-;58854:7;58892:14;;;;;;;;;;;58878:28;;:10;:28;;;58874:844;;;58923:11;58937:176;58978:12;;;;;;;;;;;58964:47;;;59012:7;58964:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59053:12;;;;;;;;;;;59039:50;;;59090:7;59039:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58937:8;:176::i;:::-;58923:190;;59226:12;;;;;;;;;;;59212:47;;;59260:7;59212:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59154:34;59163:12;59177:10;;59154:8;:34::i;:::-;:114;59128:190;;;;;;;;;;;;:::i;:::-;;;;;;;;;59659:46;59668:3;59673:22;:31;59696:7;59673:31;;;;;;;;;;;;59659:8;:46::i;:::-;59601:34;59610:12;59624:10;;59601:8;:34::i;:::-;:104;;;;:::i;:::-;59496:7;59411:92;;59425:12;;;;;;;;;;;59411:47;;;59459:7;59411:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:92;;;:150;;59560:1;59411:150;;;59531:1;59411:150;59357:223;;:11;;:223;;;;:::i;:::-;:349;;;;:::i;:::-;59333:373;;;;;58874:844;59746:12;;;;;;;;;;;59732:26;;:10;:26;;;59728:832;;;59775:11;59789:174;59830:12;;;;;;;;;;;59816:45;;;59862:7;59816:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59903:12;;;;;;;;;;;59889:50;;;59940:7;59889:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59789:8;:174::i;:::-;59775:188;;60076:12;;;;;;;;;;;60062:45;;;60108:7;60062:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60004:34;60013:12;60027:10;;60004:8;:34::i;:::-;:112;59978:188;;;;;;;;;;;;:::i;:::-;;;;;;;;;60503:44;60512:3;60517:20;:29;60538:7;60517:29;;;;;;;;;;;;60503:8;:44::i;:::-;60445:34;60454:12;60468:10;;60445:8;:34::i;:::-;:102;;;;:::i;:::-;60340:7;60257:90;;60271:12;;;;;;;;;;;60257:45;;;60303:7;60257:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:90;;;:148;;60404:1;60257:148;;;60375:1;60257:148;60205:219;;:9;;:219;;;;:::i;:::-;:343;;;;:::i;:::-;60181:367;;;;;59728:832;60588:11;;;;;;;;;;;60574:25;;:10;:25;;;60570:826;;;60616:11;60630:173;60671:12;;;;;;;;;;;60657:44;;;60702:7;60657:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60743:12;;;;;;;;;;;60729:50;;;60780:7;60729:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60630:8;:173::i;:::-;60616:187;;60916:12;;;;;;;;;;;60902:44;;;60947:7;60902:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;60844:34;60853:12;60867:10;;60844:8;:34::i;:::-;:111;60818:187;;;;;;;;;;;;:::i;:::-;;;;;;;;;61340:43;61349:3;61354:19;:28;61374:7;61354:28;;;;;;;;;;;;61340:8;:43::i;:::-;61282:34;61291:12;61305:10;;61282:8;:34::i;:::-;:101;;;;:::i;:::-;61177:7;61095:89;;61109:12;;;;;;;;;;;61095:44;;;61140:7;61095:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:89;;;:147;;61241:1;61095:147;;;61212:1;61095:147;61044:217;;:8;;:217;;;;:::i;:::-;:340;;;;:::i;:::-;61020:364;;;;;60570:826;61424:12;;;;;;;;;;;61410:26;;:10;:26;;;61406:832;;;61453:11;61467:174;61508:12;;;;;;;;;;;61494:45;;;61540:7;61494:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61581:12;;;;;;;;;;;61567:50;;;61618:7;61567:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61467:8;:174::i;:::-;61453:188;;61754:12;;;;;;;;;;;61740:45;;;61786:7;61740:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;61682:34;61691:12;61705:10;;61682:8;:34::i;:::-;:112;61656:188;;;;;;;;;;;;:::i;:::-;;;;;;;;;62181:44;62190:3;62195:20;:29;62216:7;62195:29;;;;;;;;;;;;62181:8;:44::i;:::-;62123:34;62132:12;62146:10;;62123:8;:34::i;:::-;:102;;;;:::i;:::-;62018:7;61935:90;;61949:12;;;;;;;;;;;61935:45;;;61981:7;61935:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:90;;;:148;;62082:1;61935:148;;;62053:1;61935:148;61883:219;;:9;;:219;;;;:::i;:::-;:343;;;;:::i;:::-;61859:367;;;;;61406:832;62266:13;;;;;;;;;;;62252:27;;:10;:27;;;62248:836;;;62296:11;62310:175;62351:12;;;;;;;;;;;62337:46;;;62384:7;62337:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62425:12;;;;;;;;;;;62411:50;;;62462:7;62411:59;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62310:8;:175::i;:::-;62296:189;;62598:12;;;;;;;;;;;62584:45;;;62630:7;62584:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;62526:34;62535:12;62549:10;;62526:8;:34::i;:::-;:112;62500:188;;;;;;;;;;;;:::i;:::-;;;;;;;;;63027:44;63036:3;63041:20;:29;63062:7;63041:29;;;;;;;;;;;;63027:8;:44::i;:::-;62969:34;62978:12;62992:10;;62969:8;:34::i;:::-;:102;;;;:::i;:::-;62864:7;62780:91;;62794:12;;;;;;;;;;;62780:46;;;62827:7;62780:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:91;;;:149;;62928:1;62780:149;;;62899:1;62780:149;62727:221;;:10;;:221;;;;:::i;:::-;:345;;;;:::i;:::-;62703:369;;;;;62248:836;63101:1;63094:8;;58720:4390;;;;;;:::o;44344:86::-;44391:4;44415:7;;;;;;;;;;;44408:14;;44344:86;:::o;50796:54::-;;;;;;;;;;;;;;;;;:::o;58277:192::-;58373:7;58419:12;;;;;;;;;;;58405:47;;;58453:7;58405:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58398:63;;58277:192;;;:::o;47152:103::-;46732:12;:10;:12::i;:::-;46721:23;;:7;:5;:7::i;:::-;:23;;;46713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47217:30:::1;47244:1;47217:18;:30::i;:::-;47152:103::o:0;50251:40::-;;;;:::o;51384:26::-;;;;:::o;52566:61::-;46732:12;:10;:12::i;:::-;46721:23;;:7;:5;:7::i;:::-;:23;;;46713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52611:8:::1;:6;:8::i;:::-;52566:61::o:0;50395:40::-;;;;:::o;55531:526::-;46732:12;:10;:12::i;:::-;46721:23;;:7;:5;:7::i;:::-;:23;;;46713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55810:12:::1;55796:11;:26;;;;55844:9;55833:8;:20;;;;55876:10;55864:9;:22;;;;55910:11;55897:10;:24;;;;55944:10;55932:9;:22;;;;55983:16;55965:15;:34;;;;56038:11;56023:12;:26;;;;:::i;:::-;56010:10;:39;;;;55531:526:::0;;;;;;;:::o;50857:56::-;;;;;;;;;;;;;;;;;:::o;51173:27::-;;;;;;;;;;;;;:::o;52708:532::-;46732:12;:10;:12::i;:::-;46721:23;;:7;:5;:7::i;:::-;:23;;;46713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52884:9:::1;52879:220;52903:8;;:15;;52899:1;:19;52879:220;;;52940:15;52980:9;;52990:1;52980:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52970:22;;53023:8;;53032:1;53023:11;;;;;;;:::i;:::-;;;;;;;;53007:12;;:27;;;;;;;:::i;:::-;;;;;;;;53076:8;;53085:1;53076:11;;;;;;;:::i;:::-;;;;;;;;53049:9;:23;53059:9;;53069:1;53059:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53049:23;;;;;;;;;;;;;;;;:38;;;;;;;:::i;:::-;;;;;;;;52925:174;52920:3;;;;;:::i;:::-;;;;52879:220;;;;53116:12;;;;;;;;;;;53109:33;;;53157:10;53190:4;53210:11;53109:123;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;52708:532:::0;;;;;:::o;69558:196::-;46732:12;:10;:12::i;:::-;46721:23;;:7;:5;:7::i;:::-;:23;;;46713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;69614:19:::1;69643:12;;;;;;;;;;;69636:30;;;69675:4;69636:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;69614:67;;69699:12;;;;;;;;;;;69692:29;;;69722:10;69734:11;69692:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;69603:151;69558:196::o:0;46501:87::-;46547:7;46574:6;;;;;;;;;;;46567:13;;46501:87;:::o;51448:23::-;;;;:::o;53763:117::-;53827:7;53854:9;:18;53864:7;53854:18;;;;;;;;;;;;;;;;53847:25;;53763:117;;;:::o;53248:507::-;53304:9;:21;53314:10;53304:21;;;;;;;;;;;;;;;;53300:1;:25;53292:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;53474:1;53403:12;;;;;;;;;;;53389:46;;;53436:10;53389:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;:86;53367:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;53534:14;53551:9;:21;53561:10;53551:21;;;;;;;;;;;;;;;;53534:38;;53599:9;:21;53609:10;53599:21;;;;;;;;;;;;;;;;53583:12;;:37;;;;;;;:::i;:::-;;;;;;;;53656:9;:21;53666:10;53656:21;;;;;;;;;;;;;;;;53631:9;:21;53641:10;53631:21;;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;;;;;;;53695:12;;;;;;;;;;;53688:29;;;53718:10;53730:6;53688:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;53281:474;53248:507::o;50564:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;50617:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;51510:24::-;;;;:::o;51001:29::-;;;;;;;;;;;;;:::o;51294:30::-;;;;:::o;50512:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;63147:6375::-;44670:8;:6;:8::i;:::-;44669:9;44661:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;63273:14:::1;63298:16:::0;63317:34:::1;63326:12;63340:10;;63317:8;:34::i;:::-;63298:53;;63471:1;63400:12;;;;;;;;;;;63386:46;;;63433:10;63386:58;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:65;:86;63364:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;63551:14;;;;;;;;;;;63537:28;;:10;:28;;;63533:1256;;;63587:9;63582:587;63602:8;;:15;;63598:1;:19;63582:587;;;63721:10;63673:58;;63681:14;;;;;;;;;;;63673:31;;;63705:8;;63714:1;63705:11;;;;;;;:::i;:::-;;;;;;;;63673:44;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;;63643:107;;;::::0;::::1;;64119:15;;63835:256;63888:12;;;;;;;;;;;63874:47;;;63956:8;;63965:1;63956:11;;;;;;;:::i;:::-;;;;;;;;63874:124;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;64029:22;:35;64052:8;;64061:1;64052:11;;;;;;;:::i;:::-;;;;;;;;64029:35;;;;;;;;;;;;63835:8;:256::i;:::-;63799:8;:292;;;;:::i;:::-;:335;63769:384;;;::::0;::::1;;63619:3;;;;;:::i;:::-;;;;63582:587;;;;64190:9;64185:290;64205:8;;:15;;64201:1;:19;64185:290;;;64256:138;64294:10;64327:8;;64336:1;64327:11;;;;;;;:::i;:::-;;;;;;;;64361:14;;;;;;;;;;;64256:15;:138::i;:::-;64246:148;;;;;:::i;:::-;;;64451:8;64413:22;:35;64436:8;;64445:1;64436:11;;;;;;;:::i;:::-;;;;;;;;64413:35;;;;;;;;;;;:46;;;;64222:3;;;;;:::i;:::-;;;;64185:290;;;;64496:9;64491:287;64511:8;;:15;;64507:1;:19;64491:287;;;64552:15;64570:8;;64579:1;64570:11;;;;;;;:::i;:::-;;;;;;;;64552:29;;64605:14;:23;64620:7;64605:23;;;;;;;;;;;;;;;;;;;;;64600:163;;64679:4;64653:14;:23;64668:7;64653:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;64716:27;;64706:37;;;;;:::i;:::-;;;64600:163;64533:245;64528:3;;;;:::i;:::-;;;64491:287;;;;63533:1256;64819:12;;;;;;;;;;;64805:26;;:10;:26;;;64801:1238;;;64853:9;64848:581;64868:8;;:15;;64864:1;:19;64848:581;;;64985:10;64939:56;;64947:12;;;;;;;;;;;64939:29;;;64969:8;;64978:1;64969:11;;;;;;;:::i;:::-;;;;;;;;64939:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;64909:105;;;::::0;::::1;;65379:15;;65099:252;65152:12;;;;;;;;;;;65138:45;;;65218:8;;65227:1;65218:11;;;;;;;:::i;:::-;;;;;;;;65138:122;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;65291:20;:33;65312:8;;65321:1;65312:11;;;;;;;:::i;:::-;;;;;;;;65291:33;;;;;;;;;;;;65099:8;:252::i;:::-;65063:8;:288;;;;:::i;:::-;:331;65033:380;;;::::0;::::1;;64885:3;;;;;:::i;:::-;;;;64848:581;;;;65450:9;65445:286;65465:8;;:15;;65461:1;:19;65445:286;;;65516:136;65554:10;65587:8;;65596:1;65587:11;;;;;;;:::i;:::-;;;;;;;;65621:12;;;;;;;;;;;65516:15;:136::i;:::-;65506:146;;;;;:::i;:::-;;;65707:8;65671:20;:33;65692:8;;65701:1;65692:11;;;;;;;:::i;:::-;;;;;;;;65671:33;;;;;;;;;;;:44;;;;65482:3;;;;;:::i;:::-;;;;65445:286;;;;65752:9;65747:281;65767:8;;:15;;65763:1;:19;65747:281;;;65808:15;65826:8;;65835:1;65826:11;;;;;;;:::i;:::-;;;;;;;;65808:29;;65861:12;:21;65874:7;65861:21;;;;;;;;;;;;;;;;;;;;;65856:157;;65931:4;65907:12;:21;65920:7;65907:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;65968:25;;65958:35;;;;;:::i;:::-;;;65856:157;65789:239;65784:3;;;;:::i;:::-;;;65747:281;;;;64801:1238;66069:11;;;;;;;;;;;66055:25;;:10;:25;;;66051:853;;;66102:9;66097:578;66117:8;;:15;;66113:1;:19;66097:578;;;66233:10;66188:55;;66196:11;;;;;;;;;;;66188:28;;;66217:8;;66226:1;66217:11;;;;;;;:::i;:::-;;;;;;;;66188:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:55;;;66158:104;;;::::0;::::1;;66625:15;;66347:250;66400:12;;;;;;;;;;;66386:44;;;66465:8;;66474:1;66465:11;;;;;;;:::i;:::-;;;;;;;;66386:121;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;66538:19;:32;66558:8;;66567:1;66558:11;;;;;;;:::i;:::-;;;;;;;;66538:32;;;;;;;;;;;;66347:8;:250::i;:::-;66311:8;:286;;;;:::i;:::-;:329;66281:378;;;::::0;::::1;;66134:3;;;;;:::i;:::-;;;;66097:578;;;;66696:9;66691:202;66711:8;;:15;;66707:1;:19;66691:202;;;66762:53;66778:10;66790:8;;66799:1;66790:11;;;;;;;:::i;:::-;;;;;;;;66803;;;;;;;;;;;66762:15;:53::i;:::-;66752:63;;;;;:::i;:::-;;;66869:8;66834:19;:32;66854:8;;66863:1;66854:11;;;;;;;:::i;:::-;;;;;;;;66834:32;;;;;;;;;;;:43;;;;66728:3;;;;;:::i;:::-;;;;66691:202;;;;66051:853;66934:13;;;;;;;;;;;66920:27;;:10;:27;;;66916:1247;;;66969:9;66964:584;66984:8;;:15;;66980:1;:19;66964:584;;;67102:10;67055:57;;67063:13;;;;;;;;;;;67055:30;;;67086:8;;67095:1;67086:11;;;;;;;:::i;:::-;;;;;;;;67055:43;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;;;67025:106;;;::::0;::::1;;67498:15;;67216:254;67269:12;;;;;;;;;;;67255:46;;;67336:8;;67345:1;67336:11;;;;;;;:::i;:::-;;;;;;;;67255:123;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;67409:21;:34;67431:8;;67440:1;67431:11;;;;;;;:::i;:::-;;;;;;;;67409:34;;;;;;;;;;;;67216:8;:254::i;:::-;67180:8;:290;;;;:::i;:::-;:333;67150:382;;;::::0;::::1;;67001:3;;;;;:::i;:::-;;;;66964:584;;;;67569:9;67564:288;67584:8;;:15;;67580:1;:19;67564:288;;;67635:137;67673:10;67706:8;;67715:1;67706:11;;;;;;;:::i;:::-;;;;;;;;67740:13;;;;;;;;;;;67635:15;:137::i;:::-;67625:147;;;;;:::i;:::-;;;67828:8;67791:21;:34;67813:8;;67822:1;67813:11;;;;;;;:::i;:::-;;;;;;;;67791:34;;;;;;;;;;;:45;;;;67601:3;;;;;:::i;:::-;;;;67564:288;;;;67873:9;67868:284;67888:8;;:15;;67884:1;:19;67868:284;;;67929:15;67947:8;;67956:1;67947:11;;;;;;;:::i;:::-;;;;;;;;67929:29;;67982:13;:22;67996:7;67982:22;;;;;;;;;;;;;;;;;;;;;67977:160;;68054:4;68029:13;:22;68043:7;68029:22;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;68091:26;;68081:36;;;;;:::i;:::-;;;67977:160;67910:242;67905:3;;;;:::i;:::-;;;67868:284;;;;66916:1247;68193:12;;;;;;;;;;;68179:26;;:10;:26;;;68175:1236;;;68227:9;68222:581;68242:8;;:15;;68238:1;:19;68222:581;;;68359:10;68313:56;;68321:12;;;;;;;;;;;68313:29;;;68343:8;;68352:1;68343:11;;;;;;;:::i;:::-;;;;;;;;68313:42;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;;68283:105;;;::::0;::::1;;68753:15;;68473:252;68526:12;;;;;;;;;;;68512:45;;;68592:8;;68601:1;68592:11;;;;;;;:::i;:::-;;;;;;;;68512:122;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;68665:20;:33;68686:8;;68695:1;68686:11;;;;;;;:::i;:::-;;;;;;;;68665:33;;;;;;;;;;;;68473:8;:252::i;:::-;68437:8;:288;;;;:::i;:::-;:331;68407:380;;;::::0;::::1;;68259:3;;;;;:::i;:::-;;;;68222:581;;;;68822:9;68817:286;68837:8;;:15;;68833:1;:19;68817:286;;;68888:136;68926:10;68959:8;;68968:1;68959:11;;;;;;;:::i;:::-;;;;;;;;68993:12;;;;;;;;;;;68888:15;:136::i;:::-;68878:146;;;;;:::i;:::-;;;69079:8;69043:20;:33;69064:8;;69073:1;69064:11;;;;;;;:::i;:::-;;;;;;;;69043:33;;;;;;;;;;;:44;;;;68854:3;;;;;:::i;:::-;;;;68817:286;;;;69124:9;69119:281;69139:8;;:15;;69135:1;:19;69119:281;;;69180:15;69198:8;;69207:1;69198:11;;;;;;;:::i;:::-;;;;;;;;69180:29;;69233:12;:21;69246:7;69233:21;;;;;;;;;;;;;;;;;;;;;69228:157;;69303:4;69279:12;:21;69292:7;69279:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;69340:25;;69330:35;;;;;:::i;:::-;;;69228:157;69161:239;69156:3;;;;:::i;:::-;;;69119:281;;;;68175:1236;69436:1;69427:6;:10;69423:92;;;69461:12;;;;;;;;;;;69454:29;;;69484:10;69496:6;69454:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;69423:92;63262:6260;;63147:6375:::0;;;:::o;51104:28::-;;;;;;;;;;;;;:::o;53888:1297::-;46732:12;:10;:12::i;:::-;46721:23;;:7;:5;:7::i;:::-;:23;;;46713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;54033:14:::1;;;;;;;;;;;54019:28;;:10;:28;;;54015:287;;;54069:9;54064:227;54084:8;;:15;;54080:1;:19;54064:227;;;54125:15;54143:8;;54152:1;54143:11;;;;;;;:::i;:::-;;;;;;;;54125:29;;54178:14;:23;54193:7;54178:23;;;;;;;;;;;;;;;;;;;;;54173:103;;54252:4;54226:14;:23;54241:7;54226:23;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;54173:103;54106:185;54101:3;;;;:::i;:::-;;;54064:227;;;;54015:287;54330:12;;;;;;;;;;;54316:26;;:10;:26;;;54312:281;;;54364:9;54359:223;54379:8;;:15;;54375:1;:19;54359:223;;;54420:15;54438:8;;54447:1;54438:11;;;;;;;:::i;:::-;;;;;;;;54420:29;;54473:12;:21;54486:7;54473:21;;;;;;;;;;;;;;;;;;;;;54468:99;;54543:4;54519:12;:21;54532:7;54519:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;54468:99;54401:181;54396:3;;;;:::i;:::-;;;54359:223;;;;54312:281;54621:13;;;;;;;;;;;54607:27;;:10;:27;;;54603:284;;;54656:9;54651:225;54671:8;;:15;;54667:1;:19;54651:225;;;54712:15;54730:8;;54739:1;54730:11;;;;;;;:::i;:::-;;;;;;;;54712:29;;54765:13;:22;54779:7;54765:22;;;;;;;;;;;;;;;;;;;;;54760:101;;54837:4;54812:13;:22;54826:7;54812:22;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;54760:101;54693:183;54688:3;;;;:::i;:::-;;;54651:225;;;;54603:284;54915:12;;;;;;;;;;;54901:26;;:10;:26;;;54897:281;;;54949:9;54944:223;54964:8;;:15;;54960:1;:19;54944:223;;;55005:15;55023:8;;55032:1;55023:11;;;;;;;:::i;:::-;;;;;;;;55005:29;;55058:12;:21;55071:7;55058:21;;;;;;;;;;;;;;;;;;;;;55053:99;;55128:4;55104:12;:21;55117:7;55104:21;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;55053:99;54986:181;54981:3;;;;:::i;:::-;;;54944:223;;;;54897:281;53888:1297:::0;;;:::o;56065:2204::-;56175:4;56197:16;56216:34;56225:12;56239:10;;56216:8;:34::i;:::-;56197:53;;56293:14;;;;;;;;;;;56279:28;;:10;:28;;;:105;;;;;56383:1;56338:12;;;;;;;;;;;56324:47;;;56372:7;56324:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;56279:105;56261:394;;;56627:15;;56447:160;56492:12;;;;;;;;;;;56478:47;;;56526:7;56478:56;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56557:22;:31;56580:7;56557:31;;;;;;;;;;;;56447:8;:160::i;:::-;56419:8;:188;;;;:::i;:::-;:223;56411:232;;;;;56261:394;56697:12;;;;;;;;;;;56683:26;;:10;:26;;;:101;;;;;56783:1;56740:12;;;;;;;;;;;56726:45;;;56772:7;56726:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;56683:101;56665:386;;;57023:15;;56847:156;56892:12;;;;;;;;;;;56878:45;;;56924:7;56878:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56955:20;:29;56976:7;56955:29;;;;;;;;;;;;56847:8;:156::i;:::-;56819:8;:184;;;;:::i;:::-;:219;56811:228;;;;;56665:386;57093:11;;;;;;;;;;;57079:25;;:10;:25;;;:99;;;;;57177:1;57135:12;;;;;;;;;;;57121:44;;;57166:7;57121:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:57;57079:99;57061:382;;;57415:15;;57241:154;57286:12;;;;;;;;;;;57272:44;;;57317:7;57272:53;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57348:19;:28;57368:7;57348:28;;;;;;;;;;;;57241:8;:154::i;:::-;57213:8;:182;;;;:::i;:::-;:217;57205:226;;;;;57061:382;57485:13;;;;;;;;;;;57471:27;;:10;:27;;;:103;;;;;57573:1;57529:12;;;;;;;;;;;57515:46;;;57562:7;57515:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;57471:103;57453:390;;;57815:15;;57637:158;57682:12;;;;;;;;;;;57668:46;;;57715:7;57668:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;57746:21;:30;57768:7;57746:30;;;;;;;;;;;;57637:8;:158::i;:::-;57609:8;:186;;;;:::i;:::-;:221;57601:230;;;;;57453:390;57885:12;;;;;;;;;;;57871:26;;:10;:26;;;:101;;;;;57971:1;57928:12;;;;;;;;;;;57914:45;;;57960:7;57914:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;57871:101;57853:386;;;58211:15;;58035:156;58080:12;;;;;;;;;;;58066:45;;;58112:7;58066:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58143:20;:29;58164:7;58143:29;;;;;;;;;;;;58035:8;:156::i;:::-;58007:8;:184;;;;:::i;:::-;:219;57999:228;;;;;57853:386;58256:5;58249:12;;;56065:2204;;;;;:::o;50346:42::-;;;;:::o;50734:55::-;;;;;;;;;;;;;;;;;:::o;47410:238::-;46732:12;:10;:12::i;:::-;46721:23;;:7;:5;:7::i;:::-;:23;;;46713:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47533:1:::1;47513:22;;:8;:22;;;;47491:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;47612:28;47631:8;47612:18;:28::i;:::-;47410:238:::0;:::o;50670:57::-;;;;;;;;;;;;;;;;;:::o;5414:98::-;5467:7;5494:10;5487:17;;5414:98;:::o;45403:120::-;44947:8;:6;:8::i;:::-;44939:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;45472:5:::1;45462:7:::0;::::1;:15;;;;;;;;;;;;;;;;;;45493:22;45502:12;:10;:12::i;:::-;45493:22;;;;;;:::i;:::-;;;;;;;;45403:120::o:0;48197:107::-;48255:7;48287:1;48282;:6;;:14;;48295:1;48282:14;;;48291:1;48282:14;48275:21;;48197:107;;;;:::o;48380:106::-;48438:7;48469:1;48465;:5;:13;;48477:1;48465:13;;;48473:1;48465:13;48458:20;;48380:106;;;;:::o;47808:191::-;47882:16;47901:6;;;;;;;;;;;47882:25;;47927:8;47918:6;;:17;;;;;;;;;;;;;;;;;;47982:8;47951:40;;47972:8;47951:40;;;;;;;;;;;;47871:128;47808:191;:::o;45144:118::-;44670:8;:6;:8::i;:::-;44669:9;44661:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;45214:4:::1;45204:7;;:14;;;;;;;;;;;;;;;;;;45234:20;45241:12;:10;:12::i;:::-;45234:20;;;;;;:::i;:::-;;;;;;;;45144:118::o:0;24:744:1:-;131:5;156:81;172:64;229:6;172:64;:::i;:::-;156:81;:::i;:::-;147:90;;257:5;286:6;279:5;272:21;320:4;313:5;309:16;302:23;;346:6;396:3;388:4;380:6;376:17;371:3;367:27;364:36;361:143;;;415:79;;:::i;:::-;361:143;528:1;513:249;538:6;535:1;532:13;513:249;;;606:3;635:48;679:3;667:10;635:48;:::i;:::-;630:3;623:61;713:4;708:3;704:14;697:21;;747:4;742:3;738:14;731:21;;573:189;560:1;557;553:9;548:14;;513:249;;;517:14;137:631;;24:744;;;;;:::o;774:139::-;820:5;858:6;845:20;836:29;;874:33;901:5;874:33;:::i;:::-;774:139;;;;:::o;919:143::-;976:5;1007:6;1001:13;992:22;;1023:33;1050:5;1023:33;:::i;:::-;919:143;;;;:::o;1085:568::-;1158:8;1168:6;1218:3;1211:4;1203:6;1199:17;1195:27;1185:122;;1226:79;;:::i;:::-;1185:122;1339:6;1326:20;1316:30;;1369:18;1361:6;1358:30;1355:117;;;1391:79;;:::i;:::-;1355:117;1505:4;1497:6;1493:17;1481:29;;1559:3;1551:4;1543:6;1539:17;1529:8;1525:32;1522:41;1519:128;;;1566:79;;:::i;:::-;1519:128;1085:568;;;;;:::o;1676:::-;1749:8;1759:6;1809:3;1802:4;1794:6;1790:17;1786:27;1776:122;;1817:79;;:::i;:::-;1776:122;1930:6;1917:20;1907:30;;1960:18;1952:6;1949:30;1946:117;;;1982:79;;:::i;:::-;1946:117;2096:4;2088:6;2084:17;2072:29;;2150:3;2142:4;2134:6;2130:17;2120:8;2116:32;2113:41;2110:128;;;2157:79;;:::i;:::-;2110:128;1676:568;;;;;:::o;2267:385::-;2349:5;2398:3;2391:4;2383:6;2379:17;2375:27;2365:122;;2406:79;;:::i;:::-;2365:122;2516:6;2510:13;2541:105;2642:3;2634:6;2627:4;2619:6;2615:17;2541:105;:::i;:::-;2532:114;;2355:297;2267:385;;;;:::o;2658:137::-;2712:5;2743:6;2737:13;2728:22;;2759:30;2783:5;2759:30;:::i;:::-;2658:137;;;;:::o;2801:139::-;2847:5;2885:6;2872:20;2863:29;;2901:33;2928:5;2901:33;:::i;:::-;2801:139;;;;:::o;2946:143::-;3003:5;3034:6;3028:13;3019:22;;3050:33;3077:5;3050:33;:::i;:::-;2946:143;;;;:::o;3095:329::-;3154:6;3203:2;3191:9;3182:7;3178:23;3174:32;3171:119;;;3209:79;;:::i;:::-;3171:119;3329:1;3354:53;3399:7;3390:6;3379:9;3375:22;3354:53;:::i;:::-;3344:63;;3300:117;3095:329;;;;:::o;3430:351::-;3500:6;3549:2;3537:9;3528:7;3524:23;3520:32;3517:119;;;3555:79;;:::i;:::-;3517:119;3675:1;3700:64;3756:7;3747:6;3736:9;3732:22;3700:64;:::i;:::-;3690:74;;3646:128;3430:351;;;;:::o;3787:619::-;3864:6;3872;3880;3929:2;3917:9;3908:7;3904:23;3900:32;3897:119;;;3935:79;;:::i;:::-;3897:119;4055:1;4080:53;4125:7;4116:6;4105:9;4101:22;4080:53;:::i;:::-;4070:63;;4026:117;4182:2;4208:53;4253:7;4244:6;4233:9;4229:22;4208:53;:::i;:::-;4198:63;;4153:118;4310:2;4336:53;4381:7;4372:6;4361:9;4357:22;4336:53;:::i;:::-;4326:63;;4281:118;3787:619;;;;;:::o;4412:704::-;4507:6;4515;4523;4572:2;4560:9;4551:7;4547:23;4543:32;4540:119;;;4578:79;;:::i;:::-;4540:119;4726:1;4715:9;4711:17;4698:31;4756:18;4748:6;4745:30;4742:117;;;4778:79;;:::i;:::-;4742:117;4891:80;4963:7;4954:6;4943:9;4939:22;4891:80;:::i;:::-;4873:98;;;;4669:312;5020:2;5046:53;5091:7;5082:6;5071:9;5067:22;5046:53;:::i;:::-;5036:63;;4991:118;4412:704;;;;;:::o;5122:1079::-;5253:6;5261;5269;5277;5285;5334:2;5322:9;5313:7;5309:23;5305:32;5302:119;;;5340:79;;:::i;:::-;5302:119;5488:1;5477:9;5473:17;5460:31;5518:18;5510:6;5507:30;5504:117;;;5540:79;;:::i;:::-;5504:117;5653:80;5725:7;5716:6;5705:9;5701:22;5653:80;:::i;:::-;5635:98;;;;5431:312;5810:2;5799:9;5795:18;5782:32;5841:18;5833:6;5830:30;5827:117;;;5863:79;;:::i;:::-;5827:117;5976:80;6048:7;6039:6;6028:9;6024:22;5976:80;:::i;:::-;5958:98;;;;5753:313;6105:2;6131:53;6176:7;6167:6;6156:9;6152:22;6131:53;:::i;:::-;6121:63;;6076:118;5122:1079;;;;;;;;:::o;6207:554::-;6302:6;6351:2;6339:9;6330:7;6326:23;6322:32;6319:119;;;6357:79;;:::i;:::-;6319:119;6498:1;6487:9;6483:17;6477:24;6528:18;6520:6;6517:30;6514:117;;;6550:79;;:::i;:::-;6514:117;6655:89;6736:7;6727:6;6716:9;6712:22;6655:89;:::i;:::-;6645:99;;6448:306;6207:554;;;;:::o;6767:345::-;6834:6;6883:2;6871:9;6862:7;6858:23;6854:32;6851:119;;;6889:79;;:::i;:::-;6851:119;7009:1;7034:61;7087:7;7078:6;7067:9;7063:22;7034:61;:::i;:::-;7024:71;;6980:125;6767:345;;;;:::o;7118:329::-;7177:6;7226:2;7214:9;7205:7;7201:23;7197:32;7194:119;;;7232:79;;:::i;:::-;7194:119;7352:1;7377:53;7422:7;7413:6;7402:9;7398:22;7377:53;:::i;:::-;7367:63;;7323:117;7118:329;;;;:::o;7453:351::-;7523:6;7572:2;7560:9;7551:7;7547:23;7543:32;7540:119;;;7578:79;;:::i;:::-;7540:119;7698:1;7723:64;7779:7;7770:6;7759:9;7755:22;7723:64;:::i;:::-;7713:74;;7669:128;7453:351;;;;:::o;7810:474::-;7878:6;7886;7935:2;7923:9;7914:7;7910:23;7906:32;7903:119;;;7941:79;;:::i;:::-;7903:119;8061:1;8086:53;8131:7;8122:6;8111:9;8107:22;8086:53;:::i;:::-;8076:63;;8032:117;8188:2;8214:53;8259:7;8250:6;8239:9;8235:22;8214:53;:::i;:::-;8204:63;;8159:118;7810:474;;;;;:::o;8290:1203::-;8403:6;8411;8419;8427;8435;8443;8451;8500:3;8488:9;8479:7;8475:23;8471:33;8468:120;;;8507:79;;:::i;:::-;8468:120;8627:1;8652:53;8697:7;8688:6;8677:9;8673:22;8652:53;:::i;:::-;8642:63;;8598:117;8754:2;8780:53;8825:7;8816:6;8805:9;8801:22;8780:53;:::i;:::-;8770:63;;8725:118;8882:2;8908:53;8953:7;8944:6;8933:9;8929:22;8908:53;:::i;:::-;8898:63;;8853:118;9010:2;9036:53;9081:7;9072:6;9061:9;9057:22;9036:53;:::i;:::-;9026:63;;8981:118;9138:3;9165:53;9210:7;9201:6;9190:9;9186:22;9165:53;:::i;:::-;9155:63;;9109:119;9267:3;9294:53;9339:7;9330:6;9319:9;9315:22;9294:53;:::i;:::-;9284:63;;9238:119;9396:3;9423:53;9468:7;9459:6;9448:9;9444:22;9423:53;:::i;:::-;9413:63;;9367:119;8290:1203;;;;;;;;;;:::o;9499:118::-;9586:24;9604:5;9586:24;:::i;:::-;9581:3;9574:37;9499:118;;:::o;9623:109::-;9704:21;9719:5;9704:21;:::i;:::-;9699:3;9692:34;9623:109;;:::o;9738:366::-;9880:3;9901:67;9965:2;9960:3;9901:67;:::i;:::-;9894:74;;9977:93;10066:3;9977:93;:::i;:::-;10095:2;10090:3;10086:12;10079:19;;9738:366;;;:::o;10110:::-;10252:3;10273:67;10337:2;10332:3;10273:67;:::i;:::-;10266:74;;10349:93;10438:3;10349:93;:::i;:::-;10467:2;10462:3;10458:12;10451:19;;10110:366;;;:::o;10482:::-;10624:3;10645:67;10709:2;10704:3;10645:67;:::i;:::-;10638:74;;10721:93;10810:3;10721:93;:::i;:::-;10839:2;10834:3;10830:12;10823:19;;10482:366;;;:::o;10854:::-;10996:3;11017:67;11081:2;11076:3;11017:67;:::i;:::-;11010:74;;11093:93;11182:3;11093:93;:::i;:::-;11211:2;11206:3;11202:12;11195:19;;10854:366;;;:::o;11226:::-;11368:3;11389:67;11453:2;11448:3;11389:67;:::i;:::-;11382:74;;11465:93;11554:3;11465:93;:::i;:::-;11583:2;11578:3;11574:12;11567:19;;11226:366;;;:::o;11598:::-;11740:3;11761:67;11825:2;11820:3;11761:67;:::i;:::-;11754:74;;11837:93;11926:3;11837:93;:::i;:::-;11955:2;11950:3;11946:12;11939:19;;11598:366;;;:::o;11970:::-;12112:3;12133:67;12197:2;12192:3;12133:67;:::i;:::-;12126:74;;12209:93;12298:3;12209:93;:::i;:::-;12327:2;12322:3;12318:12;12311:19;;11970:366;;;:::o;12342:118::-;12429:24;12447:5;12429:24;:::i;:::-;12424:3;12417:37;12342:118;;:::o;12466:222::-;12559:4;12597:2;12586:9;12582:18;12574:26;;12610:71;12678:1;12667:9;12663:17;12654:6;12610:71;:::i;:::-;12466:222;;;;:::o;12694:442::-;12843:4;12881:2;12870:9;12866:18;12858:26;;12894:71;12962:1;12951:9;12947:17;12938:6;12894:71;:::i;:::-;12975:72;13043:2;13032:9;13028:18;13019:6;12975:72;:::i;:::-;13057;13125:2;13114:9;13110:18;13101:6;13057:72;:::i;:::-;12694:442;;;;;;:::o;13142:332::-;13263:4;13301:2;13290:9;13286:18;13278:26;;13314:71;13382:1;13371:9;13367:17;13358:6;13314:71;:::i;:::-;13395:72;13463:2;13452:9;13448:18;13439:6;13395:72;:::i;:::-;13142:332;;;;;:::o;13480:210::-;13567:4;13605:2;13594:9;13590:18;13582:26;;13618:65;13680:1;13669:9;13665:17;13656:6;13618:65;:::i;:::-;13480:210;;;;:::o;13696:419::-;13862:4;13900:2;13889:9;13885:18;13877:26;;13949:9;13943:4;13939:20;13935:1;13924:9;13920:17;13913:47;13977:131;14103:4;13977:131;:::i;:::-;13969:139;;13696:419;;;:::o;14121:::-;14287:4;14325:2;14314:9;14310:18;14302:26;;14374:9;14368:4;14364:20;14360:1;14349:9;14345:17;14338:47;14402:131;14528:4;14402:131;:::i;:::-;14394:139;;14121:419;;;:::o;14546:::-;14712:4;14750:2;14739:9;14735:18;14727:26;;14799:9;14793:4;14789:20;14785:1;14774:9;14770:17;14763:47;14827:131;14953:4;14827:131;:::i;:::-;14819:139;;14546:419;;;:::o;14971:::-;15137:4;15175:2;15164:9;15160:18;15152:26;;15224:9;15218:4;15214:20;15210:1;15199:9;15195:17;15188:47;15252:131;15378:4;15252:131;:::i;:::-;15244:139;;14971:419;;;:::o;15396:::-;15562:4;15600:2;15589:9;15585:18;15577:26;;15649:9;15643:4;15639:20;15635:1;15624:9;15620:17;15613:47;15677:131;15803:4;15677:131;:::i;:::-;15669:139;;15396:419;;;:::o;15821:::-;15987:4;16025:2;16014:9;16010:18;16002:26;;16074:9;16068:4;16064:20;16060:1;16049:9;16045:17;16038:47;16102:131;16228:4;16102:131;:::i;:::-;16094:139;;15821:419;;;:::o;16246:::-;16412:4;16450:2;16439:9;16435:18;16427:26;;16499:9;16493:4;16489:20;16485:1;16474:9;16470:17;16463:47;16527:131;16653:4;16527:131;:::i;:::-;16519:139;;16246:419;;;:::o;16671:222::-;16764:4;16802:2;16791:9;16787:18;16779:26;;16815:71;16883:1;16872:9;16868:17;16859:6;16815:71;:::i;:::-;16671:222;;;;:::o;16899:129::-;16933:6;16960:20;;:::i;:::-;16950:30;;16989:33;17017:4;17009:6;16989:33;:::i;:::-;16899:129;;;:::o;17034:75::-;17067:6;17100:2;17094:9;17084:19;;17034:75;:::o;17115:311::-;17192:4;17282:18;17274:6;17271:30;17268:56;;;17304:18;;:::i;:::-;17268:56;17354:4;17346:6;17342:17;17334:25;;17414:4;17408;17404:15;17396:23;;17115:311;;;:::o;17432:169::-;17516:11;17550:6;17545:3;17538:19;17590:4;17585:3;17581:14;17566:29;;17432:169;;;;:::o;17607:305::-;17647:3;17666:20;17684:1;17666:20;:::i;:::-;17661:25;;17700:20;17718:1;17700:20;:::i;:::-;17695:25;;17854:1;17786:66;17782:74;17779:1;17776:81;17773:107;;;17860:18;;:::i;:::-;17773:107;17904:1;17901;17897:9;17890:16;;17607:305;;;;:::o;17918:348::-;17958:7;17981:20;17999:1;17981:20;:::i;:::-;17976:25;;18015:20;18033:1;18015:20;:::i;:::-;18010:25;;18203:1;18135:66;18131:74;18128:1;18125:81;18120:1;18113:9;18106:17;18102:105;18099:131;;;18210:18;;:::i;:::-;18099:131;18258:1;18255;18251:9;18240:20;;17918:348;;;;:::o;18272:191::-;18312:4;18332:20;18350:1;18332:20;:::i;:::-;18327:25;;18366:20;18384:1;18366:20;:::i;:::-;18361:25;;18405:1;18402;18399:8;18396:34;;;18410:18;;:::i;:::-;18396:34;18455:1;18452;18448:9;18440:17;;18272:191;;;;:::o;18469:96::-;18506:7;18535:24;18553:5;18535:24;:::i;:::-;18524:35;;18469:96;;;:::o;18571:90::-;18605:7;18648:5;18641:13;18634:21;18623:32;;18571:90;;;:::o;18667:126::-;18704:7;18744:42;18737:5;18733:54;18722:65;;18667:126;;;:::o;18799:77::-;18836:7;18865:5;18854:16;;18799:77;;;:::o;18882:281::-;18965:27;18987:4;18965:27;:::i;:::-;18957:6;18953:40;19095:6;19083:10;19080:22;19059:18;19047:10;19044:34;19041:62;19038:88;;;19106:18;;:::i;:::-;19038:88;19146:10;19142:2;19135:22;18925:238;18882:281;;:::o;19169:233::-;19208:3;19231:24;19249:5;19231:24;:::i;:::-;19222:33;;19277:66;19270:5;19267:77;19264:103;;;19347:18;;:::i;:::-;19264:103;19394:1;19387:5;19383:13;19376:20;;19169:233;;;:::o;19408:180::-;19456:77;19453:1;19446:88;19553:4;19550:1;19543:15;19577:4;19574:1;19567:15;19594:180;19642:77;19639:1;19632:88;19739:4;19736:1;19729:15;19763:4;19760:1;19753:15;19780:180;19828:77;19825:1;19818:88;19925:4;19922:1;19915:15;19949:4;19946:1;19939:15;19966:117;20075:1;20072;20065:12;20089:117;20198:1;20195;20188:12;20212:117;20321:1;20318;20311:12;20335:117;20444:1;20441;20434:12;20458:117;20567:1;20564;20557:12;20581:102;20622:6;20673:2;20669:7;20664:2;20657:5;20653:14;20649:28;20639:38;;20581:102;;;:::o;20689:170::-;20829:22;20825:1;20817:6;20813:14;20806:46;20689:170;:::o;20865:225::-;21005:34;21001:1;20993:6;20989:14;20982:58;21074:8;21069:2;21061:6;21057:15;21050:33;20865:225;:::o;21096:166::-;21236:18;21232:1;21224:6;21220:14;21213:42;21096:166;:::o;21268:170::-;21408:22;21404:1;21396:6;21392:14;21385:46;21268:170;:::o;21444:182::-;21584:34;21580:1;21572:6;21568:14;21561:58;21444:182;:::o;21632:176::-;21772:28;21768:1;21760:6;21756:14;21749:52;21632:176;:::o;21814:164::-;21954:16;21950:1;21942:6;21938:14;21931:40;21814:164;:::o;21984:122::-;22057:24;22075:5;22057:24;:::i;:::-;22050:5;22047:35;22037:63;;22096:1;22093;22086:12;22037:63;21984:122;:::o;22112:116::-;22182:21;22197:5;22182:21;:::i;:::-;22175:5;22172:32;22162:60;;22218:1;22215;22208:12;22162:60;22112:116;:::o;22234:122::-;22307:24;22325:5;22307:24;:::i;:::-;22300:5;22297:35;22287:63;;22346:1;22343;22336:12;22287:63;22234:122;:::o
Swarm Source
ipfs://1bfd9f23a630e89cf4ec1948edf363f3e89da144c5da39cb1bce19add5457a02
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.