There are reports that this address was used in a Phishing scam. Please exercise caution when interacting with it. Reported by GoPlusSecurity.
Fake_Phishing271862
Source Code
Phish / Hack
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 66 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Rollout Deposite... | 16380657 | 1143 days ago | IN | 0 ETH | 0.00086866 | ||||
| Acre To Totem | 16007796 | 1195 days ago | IN | 0 ETH | 0.00485768 | ||||
| Sell_MVT | 14979389 | 1351 days ago | IN | 0 ETH | 0.00225883 | ||||
| Purchase Acre | 14979364 | 1351 days ago | IN | 0.01 ETH | 0.00343093 | ||||
| Sell_MVT | 14979355 | 1351 days ago | IN | 0 ETH | 0.002591 | ||||
| Withdraw | 14143696 | 1483 days ago | IN | 0 ETH | 0.00397691 | ||||
| Rollout Deposite... | 14143691 | 1483 days ago | IN | 0 ETH | 0.00315154 | ||||
| Withdraw | 13965644 | 1511 days ago | IN | 0 ETH | 0.00504762 | ||||
| Rollout Deposite... | 13731015 | 1547 days ago | IN | 0 ETH | 0.00431358 | ||||
| Withdraw | 13290487 | 1617 days ago | IN | 0 ETH | 0.00437461 | ||||
| Sell_MVT | 13089292 | 1648 days ago | IN | 0 ETH | 0.00615358 | ||||
| Purchase Acre | 13088926 | 1648 days ago | IN | 0.1 ETH | 0.0066983 | ||||
| Sell_MVT | 13088907 | 1648 days ago | IN | 0 ETH | 0.00583595 | ||||
| Purchase Acre | 13088904 | 1648 days ago | IN | 0.1 ETH | 0.00859507 | ||||
| Unstake NFT | 12999295 | 1662 days ago | IN | 0 ETH | 0.0102634 | ||||
| Unstake NFT | 12994116 | 1663 days ago | IN | 0 ETH | 0.00624701 | ||||
| Rollout Deposite... | 12992753 | 1663 days ago | IN | 0 ETH | 0.00333478 | ||||
| Sell_MVT | 12965747 | 1667 days ago | IN | 0 ETH | 0.00537563 | ||||
| Withdraw | 12965731 | 1667 days ago | IN | 0 ETH | 0.00298285 | ||||
| Oracle Request | 12962611 | 1667 days ago | IN | 0.0322 ETH | 0.01218004 | ||||
| Sell_MVT | 12960453 | 1668 days ago | IN | 0 ETH | 0.00596964 | ||||
| Sell_MVT | 12960453 | 1668 days ago | IN | 0 ETH | 0.00392579 | ||||
| Set Oracle | 12945120 | 1670 days ago | IN | 0 ETH | 0.00070247 | ||||
| Set Oracle | 12945106 | 1670 days ago | IN | 0 ETH | 0.00070247 | ||||
| Rollout Deposite... | 12922291 | 1674 days ago | IN | 0 ETH | 0.0009442 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021723 | 73 days ago | 0.00002999 ETH | ||||
| Transfer | 24021721 | 73 days ago | 0.00000999 ETH | ||||
| Transfer | 23614074 | 131 days ago | 0.00054 ETH | ||||
| Transfer | 23614074 | 131 days ago | 0.00018 ETH | ||||
| - | 14979389 | 1351 days ago | 0.003 ETH | ||||
| - | 14979355 | 1351 days ago | 0.0018 ETH | ||||
| - | 13089292 | 1648 days ago | 0.034 ETH | ||||
| - | 13088907 | 1648 days ago | 0.034 ETH | ||||
| - | 13041047 | 1655 days ago | 1.21580993 ETH | ||||
| - | 12965747 | 1667 days ago | 0.25 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
GreenPointLandReserves
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2021-07-03
*/
// Sources flattened with hardhat v2.2.0 https://hardhat.org
// File openzeppelin-solidity/contracts/utils/introspection/IERC165.sol@v4.0.0
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File openzeppelin-solidity/contracts/token/ERC721/IERC721.sol@v4.0.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;
}
// File openzeppelin-solidity/contracts/token/ERC721/IERC721Receiver.sol@v4.0.0
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 from, uint256 tokenId, bytes calldata data) external returns (bytes4);
}
// File openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Metadata.sol@v4.0.0
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);
}
// File openzeppelin-solidity/contracts/token/ERC721/extensions/IERC721Enumerable.sol@v4.0.0
pragma solidity ^0.8.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File openzeppelin-solidity/contracts/utils/Address.sol@v4.0.0
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;
// solhint-disable-next-line no-inline-assembly
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");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(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");
// solhint-disable-next-line avoid-low-level-calls
(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");
// solhint-disable-next-line avoid-low-level-calls
(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");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.delegatecall(data);
return _verifyCallResult(success, returndata, errorMessage);
}
function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File openzeppelin-solidity/contracts/utils/Context.sol@v4.0.0
pragma solidity ^0.8.0;
/*
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
// File openzeppelin-solidity/contracts/utils/Strings.sol@v4.0.0
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant alphabet = "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] = alphabet[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File openzeppelin-solidity/contracts/utils/introspection/ERC165.sol@v4.0.0
pragma solidity ^0.8.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// File openzeppelin-solidity/contracts/token/ERC721/ERC721.sol@v4.0.0
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}.
*/
mapping(uint => string) public uri;
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
return uri[tokenId];
}
/**
* @dev Base URI for computing {tokenURI}. 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 || ERC721.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 {
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_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 || ERC721.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 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()) {
IERC721Receiver(to).onERC721Received(from, tokenId, _data);
}
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` cannot be the zero address.
* - `to` cannot be the zero address.
*
* 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;
contract GreenPointLandReserves{
address THIS = address(this);
uint $ = 1e18;
uint genesis;
Totem public totemNFT;
ERC20 MVT = ERC20(0x3D46454212c61ECb7b31248047Fa033120B88668);
ERC20 MDT = ERC20(0x32A087D5fdF8c84eC32554c56727a7C81124544E);
ERC20 COLOR = ERC20(0xe324C8cF74899461Ef7aD2c3EB952DA7819aabc5);
Oracle public ORACLE = Oracle(address(0));
address public GLR_nonprofit;
address public DEV;
address public oracleTeller;
uint public GLR_funds;
uint public devPot;
constructor(){
genesis = block.timestamp;
nextFloorRaisingTime = genesis + 86400 * 45;
totemNFT = new Totem("Totem","TOTEM");
GLR_nonprofit = msg.sender;
DEV = msg.sender;
oracleTeller = msg.sender;
}
function shiftOwnership(address addr) public{
require(msg.sender == GLR_nonprofit);
GLR_nonprofit = addr;
}
function GLR_pullFunds() public{
require(msg.sender == GLR_nonprofit && GLR_funds > 0);
uint cash = GLR_funds;
GLR_funds = 0;
(bool success, ) = GLR_nonprofit.call{value:cash}("");
require(success, "Transfer failed.");
}
function Dev_pullFunds() public{
require(msg.sender == DEV && devPot > 0);
uint cash = devPot;
devPot = 0;
(bool success, ) = DEV.call{value:cash}("");
require(success, "Transfer failed.");
}
function shiftDev(address addr) public{
require(msg.sender == DEV);
DEV = addr;
}
function shiftOracleTeller(address addr) public{
require(msg.sender == oracleTeller);
oracleTeller = addr;
}
function setOracle(address addr) public{
require(msg.sender == oracleTeller);
ORACLE = Oracle(addr);
}
function globalData() public view returns(uint _MVT_to_rollout, uint _mvt5xHodlPool, uint _nextFloorRaisingTime, uint _floorPrice, uint _totalACRESupply, uint _totalAcreWeight, uint _totalTotemWeight){
return (MVT_to_rollout, mvt5xHodlPool, nextFloorRaisingTime, floorPrice, _totalSupply, totalShares[ETHpool], totalTotemWeight);
}
function userData(address account) public view returns(uint acreBalance, uint totemWeight, uint acreDividends, uint totemDividends, bool MDT_approval, bool MVT_approval){
return (balanceOf(account), shares[MVTpool][account], dividendsOf(ETHpool, account) + earnings[ETHpool][account], dividendsOf(MVTpool, account) + earnings[MVTpool][account], MDT.allowance(account,THIS)>$*1000000, MVT.allowance(account,THIS)>$*1000000);
}
function userData2(address account) public view returns(uint MDT_balance, uint MVT_balance, uint colorDividends){
return ( MDT.balanceOf(account), MVT.balanceOf(account), colorDividendsOf(account) + earnings[COLORpool][account] );
}
uint mvt5xHodlPool;
event PurchaseAcre(address boughtFor, uint acreBought);
function purchaseAcre(address buyFor) public payable{
if( buyFor == address(0) ){
buyFor = msg.sender;
}
require(msg.value > 0 && msg.sender == tx.origin);
uint MONEY = msg.value;
uint forDev;
if(block.timestamp - genesis <= 86400*365){forDev = MONEY * 6/1000;}
devPot += forDev;
uint val = MONEY - forDev;
mint(buyFor, val);
uint forBuyingMVT = val * (_totalSupply - totalTotemWeight + builder_totalShares) / _totalSupply;
GLR_funds += val - forBuyingMVT;
mvt5xHodlPool += forBuyingMVT;
emit PurchaseAcre(buyFor, val);
rolloutDepositedMVTRewards();
}
uint nextFloorRaisingTime;
uint floorPrice = 0.00002 ether;
bool firstBump = true;
event Sell_MVT(uint mvtSold, uint cashout,uint forManifest,uint forDaily);
function sell_MVT(uint amount) public{
address payable sender = payable(msg.sender);
require( MVT.transferFrom(sender, THIS, amount) );
uint NOW = block.timestamp;
if(NOW >= nextFloorRaisingTime){
if(firstBump){
firstBump = false;
floorPrice = floorPrice * 10;
}else{
floorPrice = floorPrice * 3;
}
nextFloorRaisingTime += 300 * 86400;
}
uint cost = floorPrice*amount/$;
require( mvt5xHodlPool >= cost && cost > 0 );
mvt5xHodlPool -= cost;
uint forManifest = amount * ( totalTotemWeight - builder_totalShares) / _totalSupply;
uint forDaily = amount - forManifest;
MVT_to_rollout += forDaily;
storeUpCommunityRewards(forManifest);
emit Sell_MVT(amount, cost,forManifest, forDaily);
(bool success, ) = sender.call{value:cost}("");
require(success, "Transfer failed.");
}
mapping(uint => mapping(address => uint)) public shares;
mapping(uint => uint) public totalShares;
mapping(uint => uint) earningsPer;
mapping(uint => mapping(address => uint)) payouts;
mapping(uint => mapping(address => uint)) public earnings;
uint256 constant scaleFactor = 0x10000000000000000;
uint constant ETHpool = 0;
uint constant MVTpool = 1;
uint constant COLORpool = 2;
function withdraw(uint pool) public{
address payable sender = payable(msg.sender);
require(pool>=0 && pool<=2);
if(pool == COLORpool){
update(ETHpool, sender);
}else{
update(pool, sender);
}
if(pool == ETHpool){
testClean(sender);
}
uint earned = earnings[pool][sender];
earnings[pool][sender] = 0;
require(earned > 0);
if(pool == ETHpool){
(bool success, ) = sender.call{value:earned}("");
require(success, "Transfer failed.");
}else if(pool == MVTpool){
MVT.transfer(sender, earned);
}else if(pool == COLORpool){
COLOR.transfer(sender, earned);
}
}
function addShares(uint pool, address account, uint amount) internal{
update(pool, account);
totalShares[pool] += amount;
shares[pool][account] += amount;
}
function removeShares(uint pool, address account, uint amount) internal{
update(pool, account);
totalShares[pool] -= amount;
shares[pool][account] -= amount;
}
function dividendsOf(uint pool, address account) public view returns(uint){
uint owedPerShare = earningsPer[pool] - payouts[pool][account];
return shares[pool][account] * owedPerShare / scaleFactor;
}
function colorDividendsOf(address account) public view returns(uint){
uint owedPerShare = earningsPer[COLORpool] - payouts[COLORpool][account];
return shares[ETHpool][account] * owedPerShare / scaleFactor;
}
function update(uint pool, address account) internal {
uint newMoney = dividendsOf(pool, account);
payouts[pool][account] = earningsPer[pool];
earnings[pool][account] += newMoney;
if(pool == ETHpool){
newMoney = colorDividendsOf(account);
payouts[COLORpool][account] = earningsPer[COLORpool];
earnings[COLORpool][account] += newMoney;
}
}
event PayEthToAcreStakers(uint amount);
function payEthToAcreStakers() payable public{
uint val = msg.value;
require(totalShares[ETHpool]>0);
earningsPer[ETHpool] += val * scaleFactor / totalShares[ETHpool];
emit PayEthToAcreStakers(val);
}
event PayColor( uint amount );
function tokenFallback(address from, uint value, bytes calldata _data) external{
if(msg.sender == address(COLOR) ){
require(totalShares[ETHpool]>0);
earningsPer[COLORpool] += value * scaleFactor / totalShares[ETHpool];
emit PayColor(value);
}else{
revert("no want");
}
}
mapping(uint => uint) public builder_shares;
uint public builder_totalShares;
uint builder_earningsPer;
mapping(uint => uint) builder_payouts;
mapping(uint => uint) public builder_earnings;
function builder_addShares(uint TOTEM, uint amount) internal{
if(!totemManifest[TOTEM]){
builder_update(TOTEM);
builder_totalShares += amount;
builder_shares[TOTEM] += amount;
}
}
function builder_removeShares(uint TOTEM, uint amount) internal{
if(!totemManifest[TOTEM]){
builder_update(TOTEM);
builder_totalShares -= amount;
builder_shares[TOTEM] -= amount;
}
}
function builder_dividendsOf(uint TOTEM) public view returns(uint){
uint owedPerShare = builder_earningsPer - builder_payouts[TOTEM];
return builder_shares[TOTEM] * owedPerShare / scaleFactor;
}
function builder_update(uint TOTEM) internal{
uint newMoney = builder_dividendsOf(TOTEM);
builder_payouts[TOTEM] = builder_earningsPer;
builder_earnings[TOTEM] += newMoney;
}
uint public MVT_to_rollout;
uint public lastRollout;
event DepositMVTForRewards(address addr, uint amount);
function depositMVTForRewards(uint amount) public{
require(MVT.transferFrom(msg.sender, THIS, amount));
storeUpCommunityRewards(amount);
emit DepositMVTForRewards(msg.sender, amount);
}
function storeUpCommunityRewards(uint amount)internal{
if( builder_totalShares == 0 ){
storedUpBuilderMVT += amount;
}else{
builder_earningsPer += ( amount + storedUpBuilderMVT ) * scaleFactor / builder_totalShares;
storedUpBuilderMVT = 0;
}
}
event RolloutDepositedMVTRewards(uint amountToDistribute);
function rolloutDepositedMVTRewards() public{
uint NOW = block.timestamp;
if( (NOW - lastRollout) > 86400 && totalShares[MVTpool] > 0 && MVT_to_rollout > 0){
lastRollout = NOW;
uint amountToDistribute = MVT_to_rollout * (totalTotemWeight-totalShares[MVTpool]) / _totalSupply;
MVT_to_rollout -= amountToDistribute;
earningsPer[MVTpool] += amountToDistribute * scaleFactor / totalShares[MVTpool];
emit RolloutDepositedMVTRewards(amountToDistribute);
}
}
string public name = "Acre";
string public symbol = "ACRE";
uint8 constant public decimals = 18;
mapping(address => uint256) public balances;
uint _totalSupply;
mapping(address => mapping(address => uint)) approvals;
event Transfer(
address indexed from,
address indexed to,
uint256 amount,
bytes data
);
event Transfer(
address indexed from,
address indexed to,
uint256 amount
);
event Mint(
address indexed addr,
uint256 amount
);
function mint(address _address, uint _value) internal{
balances[_address] += _value;
_totalSupply += _value;
if(!isContract(msg.sender)) addShares(ETHpool, _address, _value);
emit Mint(_address, _value);
}
function totalSupply() public view returns (uint256) {
return _totalSupply;
}
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances[_owner];
}
function transfer(address _to, uint _value) public virtual returns (bool) {
bytes memory empty;
return transferToAddress(_to, _value, empty);
}
function transfer(address _to, uint _value, bytes memory _data) public virtual returns (bool) {
if( isContract(_to) ){
return transferToContract(_to, _value, _data);
}else{
return transferToAddress(_to, _value, _data);
}
}
//function that is called when transaction target is an address
function transferToAddress(address _to, uint _value, bytes memory _data) private returns (bool) {
moveTokens(msg.sender, _to, _value);
emit Transfer(msg.sender, _to, _value, _data);
return true;
}
//function that is called when transaction target is a contract
function transferToContract(address _to, uint _value, bytes memory _data) private returns (bool) {
moveTokens(msg.sender, _to, _value);
ERC223ReceivingContract receiver = ERC223ReceivingContract(_to);
receiver.tokenFallback(msg.sender, _value, _data);
emit Transfer(msg.sender, _to, _value, _data);
return true;
}
function testClean(address addr) public {
if(isContract(addr)){
clean(addr);
}
}
function clean(address addr) internal{
uint _shares = shares[ETHpool][addr];
if( _shares > 0 ){
removeShares(ETHpool, addr, _shares);
uint earned = earnings[ETHpool][addr];
earnings[ETHpool][addr] = 0;
require( totalShares[ETHpool] > 0 );
earningsPer[ETHpool] += earned * scaleFactor / totalShares[ETHpool];
emit PayEthToAcreStakers(earned);
}
}
function moveTokens(address _from, address _to, uint _amount) internal virtual{
require( _amount <= balances[_from] );
//update balances
balances[_from] -= _amount;
balances[_to] += _amount;
if(!isContract(_from) ){
if(_to != THIS ){
require( MVT.transferFrom(_from, THIS, _amount) );
storeUpCommunityRewards(_amount);
}
removeShares(ETHpool, _from, _amount);
}else{
clean(_from);
}
if( !isContract(_to) ){
addShares(ETHpool, _to, _amount);
}else{
clean(_to);
}
emit Transfer(_from, _to, _amount);
}
function allowance(address src, address guy) public view returns (uint) {
return approvals[src][guy];
}
function transferFrom(address src, address dst, uint amount) public returns (bool){
address sender = msg.sender;
require(approvals[src][sender] >= amount);
require(balances[src] >= amount);
approvals[src][sender] -= amount;
moveTokens(src,dst,amount);
bytes memory empty;
emit Transfer(sender, dst, amount, empty);
return true;
}
event Approval(address indexed src, address indexed guy, uint amount);
function approve(address guy, uint amount) public returns (bool) {
address sender = msg.sender;
approvals[sender][guy] = amount;
emit Approval( sender, guy, amount );
return true;
}
function isContract(address _addr) public view returns (bool is_contract) {
uint length;
assembly {
//retrieve the size of the code on target address, this needs assembly
length := extcodesize(_addr)
}
if(length>0) {
return true;
}else {
return false;
}
}
uint NFTcount;
mapping(address => uint[]) public totemsHad;
mapping(address => mapping(uint => bool)) public alreadyHadAtleastOnce;
uint totalTotemWeight;
event AcreToTotem(address account, uint amount, bool autoStake);
function acreToTotem(uint amount, bool autoStake) public returns(uint TOTEM_ID){
address sender = msg.sender;
require( MDT.transferFrom(sender, THIS, $) );
totemNFT.mintUniqueTokenTo(autoStake?THIS:sender, NFTcount, amount);
if(autoStake){
stakeNFT(sender, NFTcount);
}else{
builder_addShares(NFTcount, amount);
totemsHad[sender].push(NFTcount);
alreadyHadAtleastOnce[sender][NFTcount] = true;
}
NFTcount += 1;
totalTotemWeight += amount;
moveTokens(sender, THIS, amount);
bytes memory empty;
emit Transfer(sender, THIS, amount, empty);
emit AcreToTotem(sender, amount, autoStake);
return NFTcount - 1;
}
uint storedUpBuilderMVT;
event TotemToMDT(address lastOwner, uint totemID, bool preventBurn);
mapping(uint => bool) public totemManifest;
function totemToMDT(uint totemID, bool preventBurn) public{
address sender = msg.sender;
require( sender == staker[totemID] && !totemManifest[totemID] && !requestLocked[totemID]);
require( MDT.transfer(sender, $) );
uint totemWeight = totemNFT.getWeight(totemID);
removeShares( MVTpool, sender, totemWeight );
staker[totemID] = address(0);
uint burnage;
if(preventBurn){
require( MVT.transferFrom(sender,THIS, totemWeight) );
storeUpCommunityRewards(totemWeight);
}else{
burnage = totemWeight * totalTotemWeight / _totalSupply;
}
storeUpCommunityRewards(builder_dividendsOf(totemID)+builder_earnings[totemID]);
moveTokens(THIS, sender, totemWeight - burnage);
_totalSupply -= burnage;
balances[THIS] -= burnage;
totalTotemWeight -= totemWeight;
emit TotemToMDT(sender, totemID, preventBurn);
}
mapping(uint => address) public staker;
mapping(uint => uint) public lastMove;
event StakeNFT(address who, uint tokenID);
function stakeNFT(address who, uint256 tokenID) internal{
staker[tokenID] = who;
if( !alreadyHadAtleastOnce[who][tokenID] ){
totemsHad[who].push(tokenID);
alreadyHadAtleastOnce[who][tokenID] = true;
}
addShares( MVTpool, who, totemNFT.getWeight(tokenID) );
emit StakeNFT(who, tokenID);
}
event UnstakeNFT(address unstaker, uint tokenID);
function unstakeNFT(uint tokenID) public{
address sender = msg.sender;
require(staker[tokenID] == sender && !requestLocked[tokenID] && block.timestamp-lastMove[tokenID]>=86400 );
uint weight = totemNFT.getWeight(tokenID);
lastMove[tokenID] = block.timestamp;
removeShares( MVTpool, sender, weight );
staker[tokenID] = address(0);
builder_addShares(tokenID, weight);
totemNFT.transferFrom(THIS, sender, tokenID);
emit UnstakeNFT(sender, tokenID);
}
function viewTotems(address account, uint[] memory totems) public view returns(uint[] memory tokenIDs, bool[] memory accountIsCurrentlyStaking, uint[] memory acreWeight, bool[] memory owned, bool[] memory manifested, bool[] memory staked, uint[] memory manifestEarnings, uint[] memory lastMoved,bool[] memory pendingManifest){
uint L;
if(totems.length==0){
L = totemsHad[account].length;
}else{
L = totems.length;
}
tokenIDs = new uint[](L);
acreWeight = new uint[](L);
accountIsCurrentlyStaking = new bool[](L);
owned = new bool[](L);
manifested = new bool[](L);
staked = new bool[](L);
pendingManifest = new bool[](L);
manifestEarnings = new uint[](L);
lastMoved = new uint[](L);
uint tID;
for(uint c = 0; c<L; c+=1){
if(totems.length==0){
tID = totemsHad[account][c];
}else{
tID = totems[c];
}
tokenIDs[c] = tID;
acreWeight[c] = totemNFT.getWeight(tID);
accountIsCurrentlyStaking[c] = staker[tID] == account;
staked[c] = totemNFT.ownerOf(tID) == THIS;
manifested[c] = totemManifest[tID];
pendingManifest[c] = requestLocked[tID];
manifestEarnings[c] = builder_dividendsOf(tID) + builder_earnings[tID];
lastMoved[c] = lastMove[tID];
owned[c] = ( staker[tID] == account || totemNFT.ownerOf(tID) == account );
}
}
function onERC721Received(address from, uint256 tokenID, bytes memory _data) external returns(bytes4) {
bytes4 empty;
require( msg.sender == address(totemNFT) && block.timestamp-lastMove[tokenID]>=86400 );
lastMove[tokenID] = block.timestamp;
builder_removeShares(tokenID, totemNFT.getWeight(tokenID) );
stakeNFT(from, tokenID);
return empty;
}
mapping(uint=>address) public theWork; //noita
mapping(uint=>uint) workingTotem;
mapping(uint=>string) public txt;
mapping(uint=>bool) requestLocked;
event OracleRequest(address buidlr, uint totemID, uint earningsToManifest, address _theWork, string text, uint ticketID);
function oracleRequest(uint totemID, string memory _txt, address contract_optional) public payable returns(uint ticketID){
address sender = msg.sender;
require( staker[totemID] == sender && !totemManifest[totemID] && !requestLocked[totemID] );
uint ID = ORACLE.fileRequestTicket{value: msg.value}(1, true);
workingTotem[ID] = totemID;
theWork[totemID] = contract_optional;
txt[totemID] = _txt;
requestLocked[totemID] = true;
emit OracleRequest(sender, totemID, builder_dividendsOf(totemID)+builder_earnings[totemID], contract_optional, _txt, ID);
return ID;
}
event CommunityReward(address buidlr, uint totemID, uint reward, address contractBuilt, string text, uint ticketID);
event RequestRejected(uint totemID, uint ticketID);
function oracleIntFallback(uint ticketID, bool requestRejected, uint numberOfOptions, uint[] memory optionWeights, int[] memory intOptions) public{
uint optWeight;
uint positive;
uint negative;
uint totemID = workingTotem[ticketID];
require( msg.sender == address(ORACLE) );
for(uint i; i < numberOfOptions; i+=1){
optWeight = optionWeights[i];
if(intOptions[i]>0){
positive += optWeight;
}else{
negative += optWeight;
}
}
if(!requestRejected && positive>negative){
//emit event and give reward
if(!totemManifest[totemID]){
totemManifest[totemID] = true;
uint earned = builder_earnings[totemID];
if(earned>0){
if( staker[totemID]==address(0) ){
storeUpCommunityRewards(earned);
}else{
earnings[MVTpool][staker[totemID]] += earned;
}
}
emit CommunityReward(staker[totemID], totemID, earned, theWork[totemID], txt[totemID], ticketID );
}
}else{
emit RequestRejected(totemID,ticketID);
}
requestLocked[totemID] = false;
}
}
abstract contract Oracle{
function fileRequestTicket( uint8 returnType, bool subjective) public virtual payable returns(uint ticketID);
}
abstract contract ERC20{
function totalSupply() external virtual view returns (uint256);
function balanceOf(address account) external virtual view returns (uint256);
function allowance(address owner, address spender) external virtual view returns (uint256);
function transfer(address recipient, uint256 amount) external virtual returns (bool);
function approve(address spender, uint256 amount) external virtual returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external virtual returns (bool);
}
contract Totem is ERC721 {
constructor (string memory _name, string memory _symbol)
ERC721(_name, _symbol)
{
greenpoint = msg.sender;
}
address greenpoint;
mapping(uint => uint) weight;
function mintUniqueTokenTo(
address _to,
uint256 _tokenId,
uint _weight
) public {
require(msg.sender == greenpoint);
super._mint(_to, _tokenId);
weight[_tokenId] = _weight;
}
function getWeight(uint ID) public view returns(uint){
return weight[ID];
}
mapping(uint => string) desiredURI;
mapping(uint => uint) workingTotem;
event URI_request(uint totemID, string desiredURI, uint ticketID);
function uriRequest(uint ID, string memory _desiredURI) public payable returns(uint){
require( msg.sender == ownerOf(ID) );
uint otID = GreenPointLandReserves(greenpoint).ORACLE().fileRequestTicket{value:msg.value}(1,true);
desiredURI[otID] = _desiredURI;
workingTotem[otID] = ID;
emit URI_request(ID, _desiredURI, otID);
return otID;
}
event AcceptedURI(uint totemID);
event RejectedURI(uint totemID);
function oracleIntFallback(uint ticketID, bool requestRejected, uint numberOfOptions, uint[] memory optionWeights, int[] memory intOptions) public{
uint optWeight;
uint positive;
uint negative;
require( msg.sender == address( GreenPointLandReserves(greenpoint).ORACLE() ) );
for(uint i; i < numberOfOptions; i+=1){
optWeight = optionWeights[i];
if(intOptions[i]>0){
positive += optWeight;
}else{
negative += optWeight;
}
}
uint totemID = workingTotem[ticketID];
if(!requestRejected && positive>negative && !GreenPointLandReserves(greenpoint).totemManifest(totemID) ){
uri[totemID] = desiredURI[ticketID];
emit AcceptedURI(totemID);
}else{
emit RejectedURI(totemID);
}
}
}
abstract contract ERC223ReceivingContract{
function tokenFallback(address _from, uint _value, bytes calldata _data) external virtual;
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"autoStake","type":"bool"}],"name":"AcreToTotem","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"src","type":"address"},{"indexed":true,"internalType":"address","name":"guy","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buidlr","type":"address"},{"indexed":false,"internalType":"uint256","name":"totemID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"address","name":"contractBuilt","type":"address"},{"indexed":false,"internalType":"string","name":"text","type":"string"},{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"}],"name":"CommunityReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"DepositMVTForRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"addr","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"buidlr","type":"address"},{"indexed":false,"internalType":"uint256","name":"totemID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"earningsToManifest","type":"uint256"},{"indexed":false,"internalType":"address","name":"_theWork","type":"address"},{"indexed":false,"internalType":"string","name":"text","type":"string"},{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"}],"name":"OracleRequest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PayColor","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PayEthToAcreStakers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"boughtFor","type":"address"},{"indexed":false,"internalType":"uint256","name":"acreBought","type":"uint256"}],"name":"PurchaseAcre","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totemID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ticketID","type":"uint256"}],"name":"RequestRejected","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountToDistribute","type":"uint256"}],"name":"RolloutDepositedMVTRewards","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"mvtSold","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"cashout","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"forManifest","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"forDaily","type":"uint256"}],"name":"Sell_MVT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"StakeNFT","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"lastOwner","type":"address"},{"indexed":false,"internalType":"uint256","name":"totemID","type":"uint256"},{"indexed":false,"internalType":"bool","name":"preventBurn","type":"bool"}],"name":"TotemToMDT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"unstaker","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"UnstakeNFT","type":"event"},{"inputs":[],"name":"DEV","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"Dev_pullFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"GLR_funds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GLR_nonprofit","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"GLR_pullFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"MVT_to_rollout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ORACLE","outputs":[{"internalType":"contract Oracle","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"autoStake","type":"bool"}],"name":"acreToTotem","outputs":[{"internalType":"uint256","name":"TOTEM_ID","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"guy","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"alreadyHadAtleastOnce","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"guy","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"TOTEM","type":"uint256"}],"name":"builder_dividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"builder_earnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"builder_shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"builder_totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"colorDividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositMVTForRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devPot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"dividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"earnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"globalData","outputs":[{"internalType":"uint256","name":"_MVT_to_rollout","type":"uint256"},{"internalType":"uint256","name":"_mvt5xHodlPool","type":"uint256"},{"internalType":"uint256","name":"_nextFloorRaisingTime","type":"uint256"},{"internalType":"uint256","name":"_floorPrice","type":"uint256"},{"internalType":"uint256","name":"_totalACRESupply","type":"uint256"},{"internalType":"uint256","name":"_totalAcreWeight","type":"uint256"},{"internalType":"uint256","name":"_totalTotemWeight","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isContract","outputs":[{"internalType":"bool","name":"is_contract","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastMove","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRollout","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"tokenID","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"ticketID","type":"uint256"},{"internalType":"bool","name":"requestRejected","type":"bool"},{"internalType":"uint256","name":"numberOfOptions","type":"uint256"},{"internalType":"uint256[]","name":"optionWeights","type":"uint256[]"},{"internalType":"int256[]","name":"intOptions","type":"int256[]"}],"name":"oracleIntFallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"totemID","type":"uint256"},{"internalType":"string","name":"_txt","type":"string"},{"internalType":"address","name":"contract_optional","type":"address"}],"name":"oracleRequest","outputs":[{"internalType":"uint256","name":"ticketID","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"oracleTeller","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payEthToAcreStakers","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"buyFor","type":"address"}],"name":"purchaseAcre","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"rolloutDepositedMVTRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sell_MVT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"shiftDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"shiftOracleTeller","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"shiftOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"staker","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"testClean","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"theWork","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"tokenFallback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totemManifest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totemNFT","outputs":[{"internalType":"contract Totem","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"totemID","type":"uint256"},{"internalType":"bool","name":"preventBurn","type":"bool"}],"name":"totemToMDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"totemsHad","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"src","type":"address"},{"internalType":"address","name":"dst","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"txt","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenID","type":"uint256"}],"name":"unstakeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"userData","outputs":[{"internalType":"uint256","name":"acreBalance","type":"uint256"},{"internalType":"uint256","name":"totemWeight","type":"uint256"},{"internalType":"uint256","name":"acreDividends","type":"uint256"},{"internalType":"uint256","name":"totemDividends","type":"uint256"},{"internalType":"bool","name":"MDT_approval","type":"bool"},{"internalType":"bool","name":"MVT_approval","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"userData2","outputs":[{"internalType":"uint256","name":"MDT_balance","type":"uint256"},{"internalType":"uint256","name":"MVT_balance","type":"uint256"},{"internalType":"uint256","name":"colorDividends","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"totems","type":"uint256[]"}],"name":"viewTotems","outputs":[{"internalType":"uint256[]","name":"tokenIDs","type":"uint256[]"},{"internalType":"bool[]","name":"accountIsCurrentlyStaking","type":"bool[]"},{"internalType":"uint256[]","name":"acreWeight","type":"uint256[]"},{"internalType":"bool[]","name":"owned","type":"bool[]"},{"internalType":"bool[]","name":"manifested","type":"bool[]"},{"internalType":"bool[]","name":"staked","type":"bool[]"},{"internalType":"uint256[]","name":"manifestEarnings","type":"uint256[]"},{"internalType":"uint256[]","name":"lastMoved","type":"uint256[]"},{"internalType":"bool[]","name":"pendingManifest","type":"bool[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
600080546001600160a01b03199081163017909155670de0b6b3a76400006001908155600480548316733d46454212c61ecb7b31248047fa033120b886681781556005805484167332a087d5fdf8c84ec32554c56727a7c81124544e17905560068054841673e324c8cf74899461ef7ad2c3eb952da7819aabc5179055600780549093169092556512309ce54000600f556010805460ff1916909117905560c06040526080819052634163726560e01b60a0908152620000c391601d919062000195565b50604080518082019091526004808252634143524560e01b6020909201918252620000f191601e9162000195565b50348015620000ff57600080fd5b504260028190556200011590623b538062000284565b600e55604051620001269062000224565b620001319062000249565b604051809103906000f0801580156200014e573d6000803e3d6000fd5b50600380546001600160a01b03929092166001600160a01b03199283161790556008805482163390811790915560098054831682179055600a8054909216179055620002e6565b828054620001a390620002a9565b90600052602060002090601f016020900481019282620001c7576000855562000212565b82601f10620001e257805160ff191683800117855562000212565b8280016001018555821562000212579182015b8281111562000212578251825591602001919060010190620001f5565b506200022092915062000232565b5090565b611f5a8062004d6683390190565b5b8082111562000220576000815560010162000233565b6040808252600590820181905264546f74656d60d81b606083015260806020830181905282015264544f54454d60d81b60a082015260c00190565b60008219821115620002a457634e487b7160e01b81526011600452602481fd5b500190565b600281046001821680620002be57607f821691505b60208210811415620002e057634e487b7160e01b600052602260045260246000fd5b50919050565b614a7080620002f66000396000f3fe6080604052600436106103a25760003560e01c80637389af5a116101e7578063c89109131161010d578063e87076cc116100a0578063f0b9e5ba1161006f578063f0b9e5ba14610a94578063f8d6c5e714610ac1578063f9d4d60314610ad4578063fa0cd58b14610ae9576103a2565b8063e87076cc14610a2a578063e890caab14610a4a578063ea38fab014610a5f578063ec62b1c114610a7f576103a2565b8063d4b67149116100dc578063d4b67149146109c2578063da8480ee146109e2578063dd62ed3e146109f7578063e326e32a14610a17576103a2565b8063c891091314610946578063c92df52b14610978578063ccfcb03014610998578063d0bb34f1146109ad576103a2565b8063a56294c211610185578063be45fd6211610154578063be45fd62146108d1578063c0ee0b8a146108f1578063c1dfa0bb14610911578063c1eb5ddd14610931576103a2565b8063a56294c21461085c578063a9059cbb1461087c578063aadc8ece1461089c578063bc9ec978146108b1576103a2565b80638c546834116101c15780638c546834146107f257806395d89b41146108125780639e3c0e0514610827578063a4e793b81461083c576103a2565b80637389af5a1461077d5780637adbf973146107b257806382481d49146107d2576103a2565b806338013f02116102cc578063520dbe2d1161026a57806364b4b57d1161023957806364b4b57d146106fd5780636c7e58f81461071d57806370a082311461073d578063713feefc1461075d576103a2565b8063520dbe2d1461068057806355def9f9146106a05780635b6007e4146106c0578063613ce410146106d5576103a2565b80634db9e855116102a65780634db9e855146105f15780634ea94c61146106115780634fa03bb61461064057806350c0395414610660576103a2565b806338013f02146105a75780633f0ec62c146105bc578063490fcbe8146105dc576103a2565b8063162790551161034457806327e235e31161031357806327e235e3146105255780632d9295e4146105455780632e1a7d4d14610565578063313ce56714610585576103a2565b806316279055146104b057806318160ddd146104d05780631cec8f04146104e557806323b872dd14610505576103a2565b806310c846e21161038057806310c846e21461042c57806313d1ee501461045957806313f2dad01461046e5780631409024c1461048e576103a2565b806306fdde03146103a7578063095ea7b3146103d25780630cb9d13f146103ff575b600080fd5b3480156103b357600080fd5b506103bc610af1565b6040516103c99190614787565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046140e2565b610b7f565b6040516103c99190614752565b34801561040b57600080fd5b5061041f61041a366004614215565b610beb565b6040516103c9919061448e565b34801561043857600080fd5b5061044c610447366004614215565b610c06565b6040516103c991906147e5565b34801561046557600080fd5b5061041f610c18565b34801561047a57600080fd5b5061044c610489366004614215565b610c27565b34801561049a57600080fd5b506104ae6104a9366004613fe5565b610c39565b005b3480156104bc57600080fd5b506103f26104cb366004613fe5565b610c72565b3480156104dc57600080fd5b5061044c610c97565b3480156104f157600080fd5b5061044c6105003660046140e2565b610c9d565b34801561051157600080fd5b506103f2610520366004614055565b610cce565b34801561053157600080fd5b5061044c610540366004613fe5565b610db6565b34801561055157600080fd5b5061044c610560366004613fe5565b610dc8565b34801561057157600080fd5b506104ae610580366004614215565b610e8e565b34801561059157600080fd5b5061059a6110af565b6040516103c991906148a2565b3480156105b357600080fd5b5061041f6110b4565b3480156105c857600080fd5b506103bc6105d7366004614215565b6110c3565b3480156105e857600080fd5b5061044c6110dc565b3480156105fd57600080fd5b506104ae61060c366004613fe5565b6110e2565b34801561061d57600080fd5b5061063161062c366004613fe5565b61111b565b6040516103c993929190614815565b34801561064c57600080fd5b506103f261065b3660046140e2565b611277565b34801561066c57600080fd5b506104ae61067b366004614215565b611297565b34801561068c57600080fd5b5061044c61069b366004614245565b6114ff565b3480156106ac57600080fd5b506104ae6106bb366004614269565b61151c565b3480156106cc57600080fd5b5061041f61185f565b3480156106e157600080fd5b506106ea61186e565b6040516103c99796959493929190614872565b34801561070957600080fd5b506104ae610718366004613fe5565b6118a3565b34801561072957600080fd5b5061044c610738366004614215565b6118dc565b34801561074957600080fd5b5061044c610758366004613fe5565b61191c565b34801561076957600080fd5b5061044c610778366004614269565b611937565b34801561078957600080fd5b5061079d610798366004614095565b611b9a565b6040516103c99998979695949392919061468d565b3480156107be57600080fd5b506104ae6107cd366004613fe5565b61237b565b3480156107de57600080fd5b5061044c6107ed366004614245565b6123b4565b3480156107fe57600080fd5b506103f261080d366004614215565b6123d1565b34801561081e57600080fd5b506103bc6123e6565b34801561083357600080fd5b506104ae6123f3565b34801561084857600080fd5b5061044c610857366004614215565b6124a9565b34801561086857600080fd5b506104ae610877366004614215565b6124bb565b34801561088857600080fd5b506103f26108973660046140e2565b612592565b3480156108a857600080fd5b5061044c6125a9565b3480156108bd57600080fd5b506104ae6108cc366004613fe5565b6125af565b3480156108dd57600080fd5b506103f26108ec366004614190565b6125c9565b3480156108fd57600080fd5b506104ae61090c36600461410d565b6125f6565b34801561091d57600080fd5b506104ae61092c366004614215565b6126f3565b34801561093d57600080fd5b5061041f6128c9565b34801561095257600080fd5b50610966610961366004613fe5565b6128d8565b6040516103c996959493929190614846565b34801561098457600080fd5b5061044c610993366004614215565b612b33565b3480156109a457600080fd5b5061041f612b45565b3480156109b957600080fd5b5061044c612b54565b3480156109ce57600080fd5b5061044c6109dd366004614245565b612b5a565b3480156109ee57600080fd5b506104ae612bd4565b348015610a0357600080fd5b5061044c610a1236600461401d565b612d68565b61044c610a2536600461436a565b612d93565b348015610a3657600080fd5b506104ae610a4536600461428d565b612f4b565b348015610a5657600080fd5b5061044c6131e0565b348015610a6b57600080fd5b5061041f610a7a366004614215565b6131e6565b348015610a8b57600080fd5b5061044c613201565b348015610aa057600080fd5b50610ab4610aaf366004614190565b613207565b6040516103c9919061475d565b6104ae610acf366004613fe5565b6132f2565b348015610ae057600080fd5b506104ae61343d565b6104ae61348c565b601d8054610afe90614976565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2a90614976565b8015610b775780601f10610b4c57610100808354040283529160200191610b77565b820191906000526020600020905b815481529060010190602001808311610b5a57829003601f168201915b505050505081565b3360008181526021602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bd99087906147e5565b60405180910390a35060019392505050565b602a602052600090815260409020546001600160a01b031681565b60296020526000908152604090205481565b600a546001600160a01b031681565b60126020526000908152604090205481565b6008546001600160a01b03163314610c5057600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000813b8015610c86576001915050610c92565b6000915050610c92565b505b919050565b60205490565b60236020528160005260406000208181548110610cb957600080fd5b90600052602060002001600091509150505481565b6001600160a01b0383166000908152602160209081526040808320338085529252822054831115610cfe57600080fd5b6001600160a01b0385166000908152601f6020526040902054831115610d2357600080fd5b6001600160a01b03808616600090815260216020908152604080832093851683529290529081208054859290610d5a90849061495f565b90915550610d6b9050858585613551565b6060846001600160a01b0316826001600160a01b0316600080516020614a1b8339815191528684604051610da09291906147ee565b60405180910390a36001925050505b9392505050565b601f6020526000908152604090205481565b6001600160a01b03811660009081527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a602090815260408220546002835260139091527f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed1923548291610e389161495f565b6001600160a01b03841660009081527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b76020526040902054909150600160401b90610e84908390614940565b610daf9190614920565b336002821115610e9d57600080fd5b6002821415610eb657610eb160008261371f565b610ec0565b610ec0828261371f565b81610ece57610ece816125af565b60008281526015602090815260408083206001600160a01b03851684529091528120805491905580610eff57600080fd5b82610f8f576000826001600160a01b031682604051610f1d9061448b565b60006040518083038185875af1925050503d8060008114610f5a576040519150601f19603f3d011682016040523d82523d6000602084013e610f5f565b606091505b5050905080610f895760405162461bcd60e51b8152600401610f80906147bb565b60405180910390fd5b506110aa565b600183141561101b576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610fc99186918691016144c6565b602060405180830381600087803b158015610fe357600080fd5b505af1158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8991906141f9565b60028314156110aa5760065460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061105690859085906004016144c6565b602060405180830381600087803b15801561107057600080fd5b505af1158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a891906141f9565b505b505050565b601281565b6007546001600160a01b031681565b602c6020526000908152604090208054610afe90614976565b601c5481565b600a546001600160a01b031633146110f957600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b8152600091829182916001600160a01b0316906370a082319061115090879060040161448e565b60206040518083038186803b15801561116857600080fd5b505afa15801561117c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a0919061422d565b600480546040516370a0823160e01b81526001600160a01b03909116916370a08231916111cf9189910161448e565b60206040518083038186803b1580156111e757600080fd5b505afa1580156111fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121f919061422d565b6001600160a01b03861660009081527f07d4ff730d9753101d832555708a37d38c2c45fce8cacaefc99f06074e93fe0b602052604090205461126087610dc8565b61126a9190614908565b9250925092509193909250565b602460209081526000928352604080842090915290825290205460ff1681565b600480546000546040516323b872dd60e01b815233936001600160a01b03938416936323b872dd936112d293879391909216918891016144a2565b602060405180830381600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132491906141f9565b61132d57600080fd5b600e54429081106113915760105460ff1615611363576010805460ff19169055600f5461135b90600a614940565b600f55611375565b600f54611371906003614940565b600f555b63018b8200600e600082825461138b9190614908565b90915550505b600060015484600f546113a49190614940565b6113ae9190614920565b905080600d54101580156113c25750600081115b6113cb57600080fd5b80600d60008282546113dd919061495f565b9091555050602054601754602554600092916113f89161495f565b6114029087614940565b61140c9190614920565b9050600061141a828761495f565b905080601b600082825461142e9190614908565b9091555061143d90508261383a565b7f681ef4a11a25a24666b1b6a0d4475426a4d90bfca485704d78eded24de09315886848484604051611472949392919061482b565b60405180910390a16000856001600160a01b0316846040516114939061448b565b60006040518083038185875af1925050503d80600081146114d0576040519150601f19603f3d011682016040523d82523d6000602084013e6114d5565b606091505b50509050806114f65760405162461bcd60e51b8152600401610f80906147bb565b50505050505050565b601560209081526000928352604080842090915290825290205481565b60008281526028602052604090205433906001600160a01b031681148015611553575060008381526027602052604090205460ff16155b801561156e57506000838152602d602052604090205460ff16155b61157757600080fd5b60055460015460405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb916115ab918591906004016144c6565b602060405180830381600087803b1580156115c557600080fd5b505af11580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd91906141f9565b61160657600080fd5b60035460405163d851fdfd60e01b81526000916001600160a01b03169063d851fdfd906116379087906004016147e5565b60206040518083038186803b15801561164f57600080fd5b505afa158015611663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611687919061422d565b9050611695600183836138a6565b600084815260286020526040812080546001600160a01b0319169055831561175757600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936116ee9389939116918891016144a2565b602060405180830381600087803b15801561170857600080fd5b505af115801561171c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174091906141f9565b61174957600080fd5b6117528261383a565b611774565b6020546025546117679084614940565b6117719190614920565b90505b6000858152601a602052604090205461179f90611790876118dc565b61179a9190614908565b61383a565b6000546117bf906001600160a01b0316846117ba848661495f565b613551565b80602060008282546117d1919061495f565b9091555050600080546001600160a01b03168152601f6020526040812080548392906117fe90849061495f565b925050819055508160256000828254611817919061495f565b90915550506040517fcc1e401c461caebcaa61b6c5cf16d39bdd80ef974ae2e004d1813f74c4958f3f90611850908590889088906144f9565b60405180910390a15050505050565b6003546001600160a01b031681565b601b54600d54600e54600f54602080546000805260129091526000805160206149fb8339815191525460255490919293949596565b6009546001600160a01b031633146118ba57600080fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526019602052604081205460185482916118f99161495f565b600084815260166020526040902054909150600160401b90610e84908390614940565b6001600160a01b03166000908152601f602052604090205490565b600554600080546001546040516323b872dd60e01b8152929333936001600160a01b03918216936323b872dd936119759387939216916004016144a2565b602060405180830381600087803b15801561198f57600080fd5b505af11580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c791906141f9565b6119d057600080fd5b6003546001600160a01b031663074c516a846119ec57826119f9565b6000546001600160a01b03165b602254876040518463ffffffff1660e01b8152600401611a1b93929190614543565b600060405180830381600087803b158015611a3557600080fd5b505af1158015611a49573d6000803e3d6000fd5b505050508215611a6457611a5f81602254613905565b611ac0565b611a7060225485613a54565b6001600160a01b03811660008181526023602090815260408083206022805482546001818101855593875285872001559484526024835281842094548452939091529020805460ff191690911790555b600160226000828254611ad39190614908565b925050819055508360256000828254611aec9190614908565b9091555050600054611b099082906001600160a01b031686613551565b6000546040516060916001600160a01b039081169190841690600080516020614a1b83398151915290611b3f90899086906147ee565b60405180910390a37f27b747c9002e1f67b0556184d9d8f86030c662a0ad48a57b1fd41dfbd54ec436828686604051611b7a939291906144f9565b60405180910390a16001602254611b91919061495f565b95945050505050565b606080606080606080606080606060008a5160001415611bd357506001600160a01b038b16600090815260236020526040902054611bd7565b5089515b806001600160401b03811115611bfd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c26578160200160208202803683370190505b509950806001600160401b03811115611c4f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c78578160200160208202803683370190505b509750806001600160401b03811115611ca157634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611cca578160200160208202803683370190505b509850806001600160401b03811115611cf357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d1c578160200160208202803683370190505b509650806001600160401b03811115611d4557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d6e578160200160208202803683370190505b509550806001600160401b03811115611d9757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611dc0578160200160208202803683370190505b509450806001600160401b03811115611de957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611e12578160200160208202803683370190505b509150806001600160401b03811115611e3b57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611e64578160200160208202803683370190505b509350806001600160401b03811115611e8d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611eb6578160200160208202803683370190505b5092506000805b8281101561236b578c51611f15576001600160a01b038e166000908152602360205260409020805482908110611f0357634e487b7160e01b600052603260045260246000fd5b90600052602060002001549150611f40565b8c8181518110611f3557634e487b7160e01b600052603260045260246000fd5b602002602001015191505b818c8281518110611f6157634e487b7160e01b600052603260045260246000fd5b602090810291909101015260035460405163d851fdfd60e01b81526001600160a01b039091169063d851fdfd90611f9c9085906004016147e5565b60206040518083038186803b158015611fb457600080fd5b505afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061422d565b8a828151811061200c57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508d6001600160a01b03166028600084815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b0316148b828151811061207357634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101526000546003546040516331a9108f60e11b81526001600160a01b039283169290911690636352211e906120ba9086906004016147e5565b60206040518083038186803b1580156120d257600080fd5b505afa1580156120e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210a9190614001565b6001600160a01b03161487828151811061213457634e487b7160e01b600052603260045260246000fd5b911515602092830291909101820152600083815260279091526040902054885160ff9091169089908390811061217a57634e487b7160e01b600052603260045260246000fd5b9115156020928302919091018201526000838152602d9091526040902054845160ff909116908590839081106121c057634e487b7160e01b600052603260045260246000fd5b9115156020928302919091018201526000838152601a90915260409020546121e7836118dc565b6121f19190614908565b86828151811061221157634e487b7160e01b600052603260045260246000fd5b602002602001018181525050602960008381526020019081526020016000205485828151811061225157634e487b7160e01b600052603260045260246000fd5b6020908102919091018101919091526000838152602890915260409020546001600160a01b038f81169116148061232957508d6001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b0316636352211e846040518263ffffffff1660e01b81526004016122ce91906147e5565b60206040518083038186803b1580156122e657600080fd5b505afa1580156122fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231e9190614001565b6001600160a01b0316145b89828151811061234957634e487b7160e01b600052603260045260246000fd5b91151560209283029190910190910152612364600182614908565b9050611ebd565b5050509295985092959850929598565b600a546001600160a01b0316331461239257600080fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b601160209081526000928352604080842090915290825290205481565b60276020526000908152604090205460ff1681565b601e8054610afe90614976565b6008546001600160a01b03163314801561240f57506000600b54115b61241857600080fd5b600b80546000918290556008546040519192916001600160a01b039091169083906124429061448b565b60006040518083038185875af1925050503d806000811461247f576040519150601f19603f3d011682016040523d82523d6000602084013e612484565b606091505b50509050806124a55760405162461bcd60e51b8152600401610f80906147bb565b5050565b601a6020526000908152604090205481565b600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936124f29333939116918791016144a2565b602060405180830381600087803b15801561250c57600080fd5b505af1158015612520573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254491906141f9565b61254d57600080fd5b6125568161383a565b7fb4be3166b21846f2f110d6b948d56c561a16def710167c9756c9c811593b241b33826040516125879291906144c6565b60405180910390a150565b600060606125a1848483613ab1565b949350505050565b601b5481565b6125b881610c72565b156125c6576125c681613af1565b50565b60006125d484610c72565b156125eb576125e4848484613c3b565b9050610daf565b6125e4848484613ab1565b6006546001600160a01b03163314156126db576000805260126020526000805160206149fb8339815191525461262b57600080fd5b6000805260126020526000805160206149fb83398151915254612652600160401b85614940565b61265c9190614920565b6002600090815260136020527f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed19238054909190612699908490614908565b90915550506040517f0b6f805f55e534da95e83df42a3be5d987011a774c125d6cbc3cdf41620049b8906126ce9085906147e5565b60405180910390a16110a8565b60405162461bcd60e51b8152600401610f809061479a565b60008181526028602052604090205433906001600160a01b03168114801561272a57506000828152602d602052604090205460ff16155b80156127525750600082815260296020526040902054620151809061274f904261495f565b10155b61275b57600080fd5b60035460405163d851fdfd60e01b81526000916001600160a01b03169063d851fdfd9061278c9086906004016147e5565b60206040518083038186803b1580156127a457600080fd5b505afa1580156127b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dc919061422d565b600084815260296020526040902042905590506127fb600183836138a6565b600083815260286020526040902080546001600160a01b03191690556128218382613a54565b6003546000546040516323b872dd60e01b81526001600160a01b03928316926323b872dd9261285992911690869088906004016144a2565b600060405180830381600087803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505050507fd189f9264d7206fa03765606c54a04ae20609e3055dfcd0e76780c8662a6640582846040516128bc9291906144c6565b60405180910390a1505050565b6009546001600160a01b031681565b6000806000806000806128ea8761191c565b6001600160a01b03881660009081527f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b55260209081526040808320547fa31547ce6245cdb9ecea19cf8c7eb9f5974025bb4075011409251ae855b30aed9092528220549091612958908b612b5a565b6129629190614908565b6001600160a01b038a1660009081527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d60205260409020546129a560018c612b5a565b6129af9190614908565b6001546129bf90620f4240614940565b600560009054906101000a90046001600160a01b03166001600160a01b031663dd62ed3e8d60008054906101000a90046001600160a01b03166040518363ffffffff1660e01b8152600401612a159291906144df565b60206040518083038186803b158015612a2d57600080fd5b505afa158015612a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a65919061422d565b11600154620f4240612a779190614940565b600460009054906101000a90046001600160a01b03166001600160a01b031663dd62ed3e8e60008054906101000a90046001600160a01b03166040518363ffffffff1660e01b8152600401612acd9291906144df565b60206040518083038186803b158015612ae557600080fd5b505afa158015612af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1d919061422d565b1195509550955095509550955091939550919395565b60166020526000908152604090205481565b6008546001600160a01b031681565b600b5481565b60008281526014602090815260408083206001600160a01b038516845282528083205485845260139092528220548291612b939161495f565b60008581526011602090815260408083206001600160a01b0388168452909152902054909150600160401b90612bca908390614940565b6125a19190614920565b601c5442906201518090612be8908361495f565b118015612c1f5750600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35415155b8015612c2d57506000601b54115b156125c657601c819055602080546001600090815260129092527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354602554612c76919061495f565b601b54612c839190614940565b612c8d9190614920565b905080601b6000828254612ca1919061495f565b9091555050600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354612ce0600160401b83614940565b612cea9190614920565b6001600090815260136020527f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8054909190612d27908490614908565b90915550506040517f7129ce2f79c23a07093acd7ea119354b337fa472d7819587dc212041cb35d65d90612d5c9083906147e5565b60405180910390a15050565b6001600160a01b03918216600090815260216020908152604080832093909416825291909152205490565b60008381526028602052604081205433906001600160a01b031681148015612dca575060008581526027602052604090205460ff16155b8015612de557506000858152602d602052604090205460ff16155b612dee57600080fd5b600754604051631b5e4a7960e21b81526000916001600160a01b031690636d7929e4903490612e24906001908190600401614772565b6020604051808303818588803b158015612e3d57600080fd5b505af1158015612e51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e76919061422d565b6000818152602b602090815260408083208a9055898352602a825280832080546001600160a01b0319166001600160a01b038a16179055602c82529091208751929350612ec7929091880190613e89565b506000868152602d60209081526040808320805460ff19166001179055601a9091529020547f41b1f3d6785afe51d0f1e5111b8a7d1cf38be18f8bd5c3b91e06cd100ccdc9159083908890612f1b826118dc565b612f259190614908565b878986604051612f3a96959493929190614564565b60405180910390a195945050505050565b6000858152602b6020526040812054600754829182916001600160a01b03163314612f7557600080fd5b60005b8781101561300a57868181518110612fa057634e487b7160e01b600052603260045260246000fd5b602002602001015194506000868281518110612fcc57634e487b7160e01b600052603260045260246000fd5b60200260200101511315612feb57612fe48585614908565b9350612ff8565b612ff58584614908565b92505b613003600182614908565b9050612f78565b508715801561301857508183115b156131865760008181526027602052604090205460ff16613181576000818152602760209081526040808320805460ff19166001179055601a90915290205480156130e0576000828152602860205260409020546001600160a01b0316613087576130828161383a565b6130e0565b6000828152602860209081526040808320546001600160a01b031683527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d909152812080548392906130da908490614908565b90915550505b7f248c6780d2d35e738439fe85b29710742cf650c1765c45881537c4540906f03e6028600084815260200190815260200160002060009054906101000a90046001600160a01b03168383602a600087815260200190815260200160002060009054906101000a90046001600160a01b0316602c60008881526020019081526020016000208f604051613177969594939291906145b1565b60405180910390a1505b6131c0565b7f83174f77f9261d2e9831d002ea903948abc40d4eaf8dbcc5849ada2e03d66154818a6040516131b7929190614807565b60405180910390a15b6000908152602d60205260409020805460ff191690555050505050505050565b60175481565b6028602052600090815260409020546001600160a01b031681565b600c5481565b60035460009081906001600160a01b0316331480156132425750600084815260296020526040902054620151809061323f904261495f565b10155b61324b57600080fd5b60008481526029602052604090819020429055600354905163d851fdfd60e01b81526132e89186916001600160a01b039091169063d851fdfd906132939084906004016147e5565b60206040518083038186803b1580156132ab57600080fd5b505afa1580156132bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e3919061422d565b613cf2565b6125a18585613905565b6001600160a01b0381166133035750335b60003411801561331257503332145b61331b57600080fd5b60025434906000906301e1338090613333904261495f565b11613353576103e8613346836006614940565b6133509190614920565b90505b80600c60008282546133659190614908565b9091555060009050613377828461495f565b90506133838482613d46565b600060205460175460255460205461339b919061495f565b6133a59190614908565b6133af9084614940565b6133b99190614920565b90506133c5818361495f565b600b60008282546133d69190614908565b9250508190555080600d60008282546133ef9190614908565b90915550506040517fc6e962e7b569fe0538aca0fa7b36049a3d7ac9009bc0cbabe0b5c3313d6fa1739061342690879085906144c6565b60405180910390a1613436612bd4565b5050505050565b6009546001600160a01b03163314801561345957506000600c54115b61346257600080fd5b600c80546000918290556009546040519192916001600160a01b039091169083906124429061448b565b6000805260126020526000805160206149fb8339815191525434906134b057600080fd5b6000805260126020526000805160206149fb833981519152546134d7600160401b83614940565b6134e19190614920565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c805490919061351c908490614908565b90915550506040517ff0689ae6841002cf16b73981a1f76fd8846a837b7a34afe0cdab7496289678ac906125879083906147e5565b6001600160a01b0383166000908152601f602052604090205481111561357657600080fd5b6001600160a01b0383166000908152601f60205260408120805483929061359e90849061495f565b90915550506001600160a01b0382166000908152601f6020526040812080548392906135cb908490614908565b909155506135da905083610c72565b61369f576000546001600160a01b0383811691161461368e57600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd9361362a9389939116918791016144a2565b602060405180830381600087803b15801561364457600080fd5b505af1158015613658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367c91906141f9565b61368557600080fd5b61368e8161383a565b61369a600084836138a6565b6136a8565b6136a883613af1565b6136b182610c72565b6136c6576136c160008383613deb565b6136cf565b6136cf82613af1565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161371291906147e5565b60405180910390a3505050565b600061372b8383612b5a565b600084815260136020908152604080832054601483528184206001600160a01b0388168086529084528285209190915587845260158352818420908452909152812080549293508392909190613782908490614908565b9091555050826110aa5761379582610dc8565b7f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed1923546001600160a01b03841660009081527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a60209081526040808320939093557f07d4ff730d9753101d832555708a37d38c2c45fce8cacaefc99f06074e93fe0b905290812080549293508392909190613830908490614908565b9091555050505050565b60175461385e5780602660008282546138539190614908565b909155506125c69050565b601754600160401b602654836138749190614908565b61387e9190614940565b6138889190614920565b601860008282546138999190614908565b9091555050600060265550565b6138b0838361371f565b600083815260126020526040812080548392906138ce90849061495f565b909155505060008381526011602090815260408083206001600160a01b03861684529091528120805483929061383090849061495f565b600081815260286020908152604080832080546001600160a01b0319166001600160a01b03871690811790915583526024825280832084845290915290205460ff16613997576001600160a01b038216600081815260236020908152604080832080546001818101835591855283852001869055938352602482528083208584529091529020805460ff191690911790555b60035460405163d851fdfd60e01b8152613a239160019185916001600160a01b03169063d851fdfd906139ce9087906004016147e5565b60206040518083038186803b1580156139e657600080fd5b505afa1580156139fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1e919061422d565b613deb565b7f173ca1bf74155b9dca4f4031e88b399af1aa5c87b77ef963a87a419d486977d88282604051612d5c9291906144c6565b60008281526027602052604090205460ff166124a557613a7382613e4a565b8060176000828254613a859190614908565b909155505060008281526016602052604081208054839290613aa8908490614908565b90915550505050565b6000613abe338585613551565b836001600160a01b0316336001600160a01b0316600080516020614a1b8339815191528585604051610bd99291906147ee565b6001600160a01b03811660009081527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b7602052604090205480156124a557613b3b600083836138a6565b6001600160a01b03821660009081527fa31547ce6245cdb9ecea19cf8c7eb9f5974025bb4075011409251ae855b30aed602090815260408220805490839055918052601290526000805160206149fb83398151915254613b9a57600080fd5b6000805260126020526000805160206149fb83398151915254613bc1600160401b83614940565b613bcb9190614920565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c8054909190613c06908490614908565b90915550506040517ff0689ae6841002cf16b73981a1f76fd8846a837b7a34afe0cdab7496289678ac906128bc9083906147e5565b6000613c48338585613551565b60405163607705c560e11b815284906001600160a01b0382169063c0ee0b8a90613c7a9033908890889060040161451c565b600060405180830381600087803b158015613c9457600080fd5b505af1158015613ca8573d6000803e3d6000fd5b50505050846001600160a01b0316336001600160a01b0316600080516020614a1b8339815191528686604051613cdf9291906147ee565b60405180910390a3506001949350505050565b60008281526027602052604090205460ff166124a557613d1182613e4a565b8060176000828254613d23919061495f565b909155505060008281526016602052604081208054839290613aa890849061495f565b6001600160a01b0382166000908152601f602052604081208054839290613d6e908490614908565b925050819055508060206000828254613d879190614908565b90915550613d96905033610c72565b613da657613da660008383613deb565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051613ddf91906147e5565b60405180910390a25050565b613df5838361371f565b60008381526012602052604081208054839290613e13908490614908565b909155505060008381526011602090815260408083206001600160a01b038616845290915281208054839290613830908490614908565b6000613e55826118dc565b601854600084815260196020908152604080832093909355601a905290812080549293508392909190613aa8908490614908565b828054613e9590614976565b90600052602060002090601f016020900481019282613eb75760008555613efd565b82601f10613ed057805160ff1916838001178555613efd565b82800160010185558215613efd579182015b82811115613efd578251825591602001919060010190613ee2565b50613f09929150613f0d565b5090565b5b80821115613f095760008155600101613f0e565b60006001600160401b03831115613f3b57613f3b6149c1565b613f4e601f8401601f19166020016148b0565b9050828152838383011115613f6257600080fd5b828260208301376000602084830101529392505050565b600082601f830112613f89578081fd5b81356020613f9e613f99836148d9565b6148b0565b8281528181019085830183850287018401881015613fba578586fd5b855b85811015613fd857813584529284019290840190600101613fbc565b5090979650505050505050565b600060208284031215613ff6578081fd5b8135610daf816149d7565b600060208284031215614012578081fd5b8151610daf816149d7565b6000806040838503121561402f578081fd5b823561403a816149d7565b9150602083013561404a816149d7565b809150509250929050565b600080600060608486031215614069578081fd5b8335614074816149d7565b92506020840135614084816149d7565b929592945050506040919091013590565b600080604083850312156140a7578182fd5b82356140b2816149d7565b915060208301356001600160401b038111156140cc578182fd5b6140d885828601613f79565b9150509250929050565b600080604083850312156140f4578182fd5b82356140ff816149d7565b946020939093013593505050565b60008060008060608587031215614122578081fd5b843561412d816149d7565b93506020850135925060408501356001600160401b038082111561414f578283fd5b818701915087601f830112614162578283fd5b813581811115614170578384fd5b886020828501011115614181578384fd5b95989497505060200194505050565b6000806000606084860312156141a4578283fd5b83356141af816149d7565b92506020840135915060408401356001600160401b038111156141d0578182fd5b8401601f810186136141e0578182fd5b6141ef86823560208401613f22565b9150509250925092565b60006020828403121561420a578081fd5b8151610daf816149ec565b600060208284031215614226578081fd5b5035919050565b60006020828403121561423e578081fd5b5051919050565b60008060408385031215614257578182fd5b82359150602083013561404a816149d7565b6000806040838503121561427b578182fd5b82359150602083013561404a816149ec565b600080600080600060a086880312156142a4578283fd5b853594506020808701356142b7816149ec565b94506040870135935060608701356001600160401b03808211156142d9578384fd5b6142e58a838b01613f79565b945060808901359150808211156142fa578384fd5b508701601f8101891361430b578283fd5b8035614319613f99826148d9565b81815283810190838501858402850186018d1015614335578687fd5b8694505b83851015614357578035835260019490940193918501918501614339565b5080955050505050509295509295909350565b60008060006060848603121561437e578081fd5b8335925060208401356001600160401b0381111561439a578182fd5b8401601f810186136143aa578182fd5b6143b986823560208401613f22565b92505060408401356143ca816149d7565b809150509250925092565b6000815180845260208085019450808401835b838110156144065781511515875295820195908201906001016143e8565b509495945050505050565b6000815180845260208085019450808401835b8381101561440657815187529582019590820190600101614424565b60008151808452815b8181101561446557602081850181015186830182015201614449565b818111156144765782602083870101525b50601f01601f19169290920160200192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b600060018060a01b038516825283602083015260606040830152611b916060830184614440565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03878116825260208201879052604082018690528416606082015260c06080820181905260009061459e90830185614440565b90508260a0830152979650505050505050565b6001600160a01b038781168252602080830188905260408301879052908516606083015260c0608083015283546000918291600281046001828116806145f857607f831692505b84831081141561461657634e487b7160e01b87526022600452602487fd5b6146238360c08a016147e5565b818015614637576001811461464857614672565b60ff19861682528682019750614672565b6146518c6148fc565b895b8681101561466c57815484820152908501908801614653565b83019850505b505050505060a0949094019490945298975050505050505050565b60006101208083526146a18184018d614411565b905082810360208401526146b5818c6143d5565b905082810360408401526146c9818b614411565b905082810360608401526146dd818a6143d5565b905082810360808401526146f181896143d5565b905082810360a084015261470581886143d5565b905082810360c08401526147198187614411565b905082810360e084015261472d8186614411565b905082810361010084015261474281856143d5565b9c9b505050505050505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60ff9290921682521515602082015260400190565b600060208252610daf6020830184614440565b6020808252600790820152661b9bc81dd85b9d60ca1b604082015260600190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b90815260200190565b6000838252604060208301526125a16040830184614440565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b95865260208601949094526040850192909252606084015215156080830152151560a082015260c00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60ff91909116815260200190565b6040518181016001600160401b03811182821017156148d1576148d16149c1565b604052919050565b60006001600160401b038211156148f2576148f26149c1565b5060209081020190565b60009081526020902090565b6000821982111561491b5761491b6149ab565b500190565b60008261493b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561495a5761495a6149ab565b500290565b600082821015614971576149716149ab565b500390565b60028104600182168061498a57607f821691505b60208210811415610c9057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146125c657600080fd5b80151581146125c657600080fdfe7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7be19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16a26469706673582212205c05fdfd7232218effea4f88f0760ef73cce754de759f05f6b5f5e6e0059227b64736f6c6343000800003360806040523480156200001157600080fd5b5060405162001f5a38038062001f5a8339810160408190526200003491620001d2565b8151829082906200004d90600090602085019062000081565b5080516200006390600190602084019062000081565b5050600780546001600160a01b03191633179055506200028c915050565b8280546200008f9062000239565b90600052602060002090601f016020900481019282620000b35760008555620000fe565b82601f10620000ce57805160ff1916838001178555620000fe565b82800160010185558215620000fe579182015b82811115620000fe578251825591602001919060010190620000e1565b506200010c92915062000110565b5090565b5b808211156200010c576000815560010162000111565b600082601f83011262000138578081fd5b81516001600160401b038082111562000155576200015562000276565b6040516020601f8401601f19168201810183811183821017156200017d576200017d62000276565b604052838252858401810187101562000194578485fd5b8492505b83831015620001b7578583018101518284018201529182019162000198565b83831115620001c857848185840101525b5095945050505050565b60008060408385031215620001e5578182fd5b82516001600160401b0380821115620001fc578384fd5b6200020a8683870162000127565b9350602085015191508082111562000220578283fd5b506200022f8582860162000127565b9150509250929050565b6002810460018216806200024e57607f821691505b602082108114156200027057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b611cbe806200029c6000396000f3fe6080604052600436106101095760003560e01c80636352211e11610095578063b88d4fde11610064578063b88d4fde146102ca578063c87b56dd146102ea578063d851fdfd1461030a578063e87076cc1461032a578063e985e9c51461034a57610109565b80636352211e1461025557806370a082311461027557806395d89b4114610295578063a22cb465146102aa57610109565b8063095ea7b3116100dc578063095ea7b3146101b55780630e89341c146101d557806323b872dd146101f557806342842e0e1461021557806345d509cc1461023557610109565b806301ffc9a71461010e57806306fdde0314610144578063074c516a14610166578063081812fc14610188575b600080fd5b34801561011a57600080fd5b5061012e6101293660046114ce565b61036a565b60405161013b9190611718565b60405180910390f35b34801561015057600080fd5b506101596103b0565b60405161013b9190611738565b34801561017257600080fd5b5061018661018136600461147e565b610442565b005b34801561019457600080fd5b506101a86101a3366004611522565b610476565b60405161013b91906116d4565b3480156101c157600080fd5b506101866101d0366004611453565b6104c2565b3480156101e157600080fd5b506101596101f0366004611522565b61055a565b34801561020157600080fd5b50610186610210366004611369565b6105f4565b34801561022157600080fd5b50610186610230366004611369565b61062c565b610248610243366004611631565b610647565b60405161013b9190611b36565b34801561026157600080fd5b506101a8610270366004611522565b6107e6565b34801561028157600080fd5b5061024861029036600461130e565b61081b565b3480156102a157600080fd5b5061015961085f565b3480156102b657600080fd5b506101866102c5366004611426565b61086e565b3480156102d657600080fd5b506101866102e53660046113a9565b61093c565b3480156102f657600080fd5b50610159610305366004611522565b61097b565b34801561031657600080fd5b50610248610325366004611522565b610a40565b34801561033657600080fd5b50610186610345366004611552565b610a52565b34801561035657600080fd5b5061012e610365366004611331565b610cee565b60006001600160e01b031982166380ac58cd60e01b148061039b57506001600160e01b03198216635b5e139f60e01b145b806103aa57506103aa82610d1c565b92915050565b6060600080546103bf90611be5565b80601f01602080910402602001604051908101604052809291908181526020018280546103eb90611be5565b80156104385780601f1061040d57610100808354040283529160200191610438565b820191906000526020600020905b81548152906001019060200180831161041b57829003601f168201915b5050505050905090565b6007546001600160a01b0316331461045957600080fd5b6104638383610d35565b6000918252600860205260409091205550565b600061048182610e14565b6104a65760405162461bcd60e51b815260040161049d906119c0565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006104cd826107e6565b9050806001600160a01b0316836001600160a01b031614156105015760405162461bcd60e51b815260040161049d90611aa4565b806001600160a01b0316610513610e31565b6001600160a01b0316148061052f575061052f81610365610e31565b61054b5760405162461bcd60e51b815260040161049d9061189b565b6105558383610e35565b505050565b6006602052600090815260409020805461057390611be5565b80601f016020809104026020016040519081016040528092919081815260200182805461059f90611be5565b80156105ec5780601f106105c1576101008083540402835291602001916105ec565b820191906000526020600020905b8154815290600101906020018083116105cf57829003601f168201915b505050505081565b6106056105ff610e31565b82610ea3565b6106215760405162461bcd60e51b815260040161049d90611ae5565b610555838383610f28565b6105558383836040518060200160405280600081525061093c565b6000610652836107e6565b6001600160a01b0316336001600160a01b03161461066f57600080fd5b60075460408051631c009f8160e11b815290516000926001600160a01b0316916338013f02916004808301926020929190829003018186803b1580156106b457600080fd5b505afa1580156106c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ec9190611506565b6001600160a01b0316636d7929e4346001806040518463ffffffff1660e01b815260040161071b929190611723565b6020604051808303818588803b15801561073457600080fd5b505af1158015610748573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061076d919061153a565b60008181526009602090815260409091208551929350610791929091860190611136565b506000818152600a602052604090819020859055517fe2c34c2ff498fea2c84b1d42c0b1d28f8edafa81c8ffe0c3b8d1cf504da5aaa1906107d790869086908590611b3f565b60405180910390a19392505050565b6000818152600260205260408120546001600160a01b0316806103aa5760405162461bcd60e51b815260040161049d90611942565b60006001600160a01b0382166108435760405162461bcd60e51b815260040161049d906118f8565b506001600160a01b031660009081526003602052604090205490565b6060600180546103bf90611be5565b610876610e31565b6001600160a01b0316826001600160a01b031614156108a75760405162461bcd60e51b815260040161049d90611818565b80600560006108b4610e31565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556108f8610e31565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516109309190611718565b60405180910390a35050565b61094d610947610e31565b83610ea3565b6109695760405162461bcd60e51b815260040161049d90611ae5565b61097584848484611055565b50505050565b606061098682610e14565b6109a25760405162461bcd60e51b815260040161049d90611a55565b600082815260066020526040902080546109bb90611be5565b80601f01602080910402602001604051908101604052809291908181526020018280546109e790611be5565b8015610a345780601f10610a0957610100808354040283529160200191610a34565b820191906000526020600020905b815481529060010190602001808311610a1757829003601f168201915b50505050509050919050565b60009081526008602052604090205490565b6000806000600760009054906101000a90046001600160a01b03166001600160a01b03166338013f026040518163ffffffff1660e01b815260040160206040518083038186803b158015610aa557600080fd5b505afa158015610ab9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610add9190611506565b6001600160a01b0316336001600160a01b031614610afa57600080fd5b60005b86811015610b8f57858181518110610b2557634e487b7160e01b600052603260045260246000fd5b602002602001015193506000858281518110610b5157634e487b7160e01b600052603260045260246000fd5b60200260200101511315610b7057610b698484611bb6565b9250610b7d565b610b7a8483611bb6565b91505b610b88600182611bb6565b9050610afd565b506000888152600a602052604090205487158015610bac57508183115b8015610c3557506007546040516323151a0d60e21b81526001600160a01b0390911690638c54683490610be3908490600401611b36565b60206040518083038186803b158015610bfb57600080fd5b505afa158015610c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3391906114b2565b155b15610cab57600089815260096020908152604080832084845260069092529091208154909190610c6490611be5565b610c6f9291906111ba565b507e906f8b4de6544cc719ea55d16402a5fae3fc22d6b9fb73c1fc9e6ba1202fca81604051610c9e9190611b36565b60405180910390a1610ce3565b7fc9db1c268ff6a4b2760419cc1713e82e8297aba5dbd2acf62c478a11becb761c81604051610cda9190611b36565b60405180910390a15b505050505050505050565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b038216610d5b5760405162461bcd60e51b815260040161049d9061198b565b610d6481610e14565b15610d815760405162461bcd60e51b815260040161049d9061179d565b610d8d60008383610555565b6001600160a01b0382166000908152600360205260408120805460019290610db6908490611bb6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b0384169081179091558190610e6a826107e6565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610eae82610e14565b610eca5760405162461bcd60e51b815260040161049d9061184f565b6000610ed5836107e6565b9050806001600160a01b0316846001600160a01b03161480610f105750836001600160a01b0316610f0584610476565b6001600160a01b0316145b80610f205750610f208185610cee565b949350505050565b826001600160a01b0316610f3b826107e6565b6001600160a01b031614610f615760405162461bcd60e51b815260040161049d90611a0c565b6001600160a01b038216610f875760405162461bcd60e51b815260040161049d906117d4565b610f92838383610555565b610f9d600082610e35565b6001600160a01b0383166000908152600360205260408120805460019290610fc6908490611bce565b90915550506001600160a01b0382166000908152600360205260408120805460019290610ff4908490611bb6565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b611060848484610f28565b61106c84848484611088565b6109755760405162461bcd60e51b815260040161049d9061174b565b600061109c846001600160a01b0316611130565b156111255760405163785cf2dd60e11b81526001600160a01b0385169063f0b9e5ba906110d1908890879087906004016116e8565b602060405180830381600087803b1580156110eb57600080fd5b505af11580156110ff573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112391906114ea565b505b506001949350505050565b3b151590565b82805461114290611be5565b90600052602060002090601f01602090048101928261116457600085556111aa565b82601f1061117d57805160ff19168380011785556111aa565b828001600101855582156111aa579182015b828111156111aa57825182559160200191906001019061118f565b506111b6929150611235565b5090565b8280546111c690611be5565b90600052602060002090601f0160209004810192826111e857600085556111aa565b82601f106111f957805485556111aa565b828001600101855582156111aa57600052602060002091601f016020900482015b828111156111aa57825482559160010191906001019061121a565b5b808211156111b65760008155600101611236565b600067ffffffffffffffff83111561126457611264611c36565b611277601f8401601f1916602001611b68565b905082815283838301111561128b57600080fd5b828260208301376000602084830101529392505050565b600082601f8301126112b2578081fd5b813560206112c76112c283611b92565b611b68565b82815281810190858301838502870184018810156112e3578586fd5b855b85811015611301578135845292840192908401906001016112e5565b5090979650505050505050565b60006020828403121561131f578081fd5b813561132a81611c4c565b9392505050565b60008060408385031215611343578081fd5b823561134e81611c4c565b9150602083013561135e81611c4c565b809150509250929050565b60008060006060848603121561137d578081fd5b833561138881611c4c565b9250602084013561139881611c4c565b929592945050506040919091013590565b600080600080608085870312156113be578081fd5b84356113c981611c4c565b935060208501356113d981611c4c565b925060408501359150606085013567ffffffffffffffff8111156113fb578182fd5b8501601f8101871361140b578182fd5b61141a8782356020840161124a565b91505092959194509250565b60008060408385031215611438578182fd5b823561144381611c4c565b9150602083013561135e81611c64565b60008060408385031215611465578182fd5b823561147081611c4c565b946020939093013593505050565b600080600060608486031215611492578283fd5b833561149d81611c4c565b95602085013595506040909401359392505050565b6000602082840312156114c3578081fd5b815161132a81611c64565b6000602082840312156114df578081fd5b813561132a81611c72565b6000602082840312156114fb578081fd5b815161132a81611c72565b600060208284031215611517578081fd5b815161132a81611c4c565b600060208284031215611533578081fd5b5035919050565b60006020828403121561154b578081fd5b5051919050565b600080600080600060a08688031215611569578283fd5b8535945060208087013561157c81611c64565b945060408701359350606087013567ffffffffffffffff8082111561159f578384fd5b818901915089601f8301126115b2578384fd5b81356115c06112c282611b92565b81815284810190848601868402860187018e10156115dc578788fd5b8795505b838610156115fe5780358352600195909501949186019186016115e0565b50965050506080890135925080831115611616578384fd5b5050611624888289016112a2565b9150509295509295909350565b60008060408385031215611643578182fd5b82359150602083013567ffffffffffffffff811115611660578182fd5b8301601f81018513611670578182fd5b61167f8582356020840161124a565b9150509250929050565b60008151808452815b818110156116ae57602081850181015186830182015201611692565b818111156116bf5782602083870101525b50601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b600060018060a01b03851682528360208301526060604083015261170f6060830184611689565b95945050505050565b901515815260200190565b60ff9290921682521515602082015260400190565b60006020825261132a6020830184611689565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b90815260200190565b600084825260606020830152611b586060830185611689565b9050826040830152949350505050565b60405181810167ffffffffffffffff81118282101715611b8a57611b8a611c36565b604052919050565b600067ffffffffffffffff821115611bac57611bac611c36565b5060209081020190565b60008219821115611bc957611bc9611c20565b500190565b600082821015611be057611be0611c20565b500390565b600281046001821680611bf957607f821691505b60208210811415611c1a57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114611c6157600080fd5b50565b8015158114611c6157600080fd5b6001600160e01b031981168114611c6157600080fdfea2646970667358221220024a48b0116d3623d3c4e658180554ae0cb7b39ebc109de8c78519e16fb1e6e564736f6c63430008000033
Deployed Bytecode
0x6080604052600436106103a25760003560e01c80637389af5a116101e7578063c89109131161010d578063e87076cc116100a0578063f0b9e5ba1161006f578063f0b9e5ba14610a94578063f8d6c5e714610ac1578063f9d4d60314610ad4578063fa0cd58b14610ae9576103a2565b8063e87076cc14610a2a578063e890caab14610a4a578063ea38fab014610a5f578063ec62b1c114610a7f576103a2565b8063d4b67149116100dc578063d4b67149146109c2578063da8480ee146109e2578063dd62ed3e146109f7578063e326e32a14610a17576103a2565b8063c891091314610946578063c92df52b14610978578063ccfcb03014610998578063d0bb34f1146109ad576103a2565b8063a56294c211610185578063be45fd6211610154578063be45fd62146108d1578063c0ee0b8a146108f1578063c1dfa0bb14610911578063c1eb5ddd14610931576103a2565b8063a56294c21461085c578063a9059cbb1461087c578063aadc8ece1461089c578063bc9ec978146108b1576103a2565b80638c546834116101c15780638c546834146107f257806395d89b41146108125780639e3c0e0514610827578063a4e793b81461083c576103a2565b80637389af5a1461077d5780637adbf973146107b257806382481d49146107d2576103a2565b806338013f02116102cc578063520dbe2d1161026a57806364b4b57d1161023957806364b4b57d146106fd5780636c7e58f81461071d57806370a082311461073d578063713feefc1461075d576103a2565b8063520dbe2d1461068057806355def9f9146106a05780635b6007e4146106c0578063613ce410146106d5576103a2565b80634db9e855116102a65780634db9e855146105f15780634ea94c61146106115780634fa03bb61461064057806350c0395414610660576103a2565b806338013f02146105a75780633f0ec62c146105bc578063490fcbe8146105dc576103a2565b8063162790551161034457806327e235e31161031357806327e235e3146105255780632d9295e4146105455780632e1a7d4d14610565578063313ce56714610585576103a2565b806316279055146104b057806318160ddd146104d05780631cec8f04146104e557806323b872dd14610505576103a2565b806310c846e21161038057806310c846e21461042c57806313d1ee501461045957806313f2dad01461046e5780631409024c1461048e576103a2565b806306fdde03146103a7578063095ea7b3146103d25780630cb9d13f146103ff575b600080fd5b3480156103b357600080fd5b506103bc610af1565b6040516103c99190614787565b60405180910390f35b3480156103de57600080fd5b506103f26103ed3660046140e2565b610b7f565b6040516103c99190614752565b34801561040b57600080fd5b5061041f61041a366004614215565b610beb565b6040516103c9919061448e565b34801561043857600080fd5b5061044c610447366004614215565b610c06565b6040516103c991906147e5565b34801561046557600080fd5b5061041f610c18565b34801561047a57600080fd5b5061044c610489366004614215565b610c27565b34801561049a57600080fd5b506104ae6104a9366004613fe5565b610c39565b005b3480156104bc57600080fd5b506103f26104cb366004613fe5565b610c72565b3480156104dc57600080fd5b5061044c610c97565b3480156104f157600080fd5b5061044c6105003660046140e2565b610c9d565b34801561051157600080fd5b506103f2610520366004614055565b610cce565b34801561053157600080fd5b5061044c610540366004613fe5565b610db6565b34801561055157600080fd5b5061044c610560366004613fe5565b610dc8565b34801561057157600080fd5b506104ae610580366004614215565b610e8e565b34801561059157600080fd5b5061059a6110af565b6040516103c991906148a2565b3480156105b357600080fd5b5061041f6110b4565b3480156105c857600080fd5b506103bc6105d7366004614215565b6110c3565b3480156105e857600080fd5b5061044c6110dc565b3480156105fd57600080fd5b506104ae61060c366004613fe5565b6110e2565b34801561061d57600080fd5b5061063161062c366004613fe5565b61111b565b6040516103c993929190614815565b34801561064c57600080fd5b506103f261065b3660046140e2565b611277565b34801561066c57600080fd5b506104ae61067b366004614215565b611297565b34801561068c57600080fd5b5061044c61069b366004614245565b6114ff565b3480156106ac57600080fd5b506104ae6106bb366004614269565b61151c565b3480156106cc57600080fd5b5061041f61185f565b3480156106e157600080fd5b506106ea61186e565b6040516103c99796959493929190614872565b34801561070957600080fd5b506104ae610718366004613fe5565b6118a3565b34801561072957600080fd5b5061044c610738366004614215565b6118dc565b34801561074957600080fd5b5061044c610758366004613fe5565b61191c565b34801561076957600080fd5b5061044c610778366004614269565b611937565b34801561078957600080fd5b5061079d610798366004614095565b611b9a565b6040516103c99998979695949392919061468d565b3480156107be57600080fd5b506104ae6107cd366004613fe5565b61237b565b3480156107de57600080fd5b5061044c6107ed366004614245565b6123b4565b3480156107fe57600080fd5b506103f261080d366004614215565b6123d1565b34801561081e57600080fd5b506103bc6123e6565b34801561083357600080fd5b506104ae6123f3565b34801561084857600080fd5b5061044c610857366004614215565b6124a9565b34801561086857600080fd5b506104ae610877366004614215565b6124bb565b34801561088857600080fd5b506103f26108973660046140e2565b612592565b3480156108a857600080fd5b5061044c6125a9565b3480156108bd57600080fd5b506104ae6108cc366004613fe5565b6125af565b3480156108dd57600080fd5b506103f26108ec366004614190565b6125c9565b3480156108fd57600080fd5b506104ae61090c36600461410d565b6125f6565b34801561091d57600080fd5b506104ae61092c366004614215565b6126f3565b34801561093d57600080fd5b5061041f6128c9565b34801561095257600080fd5b50610966610961366004613fe5565b6128d8565b6040516103c996959493929190614846565b34801561098457600080fd5b5061044c610993366004614215565b612b33565b3480156109a457600080fd5b5061041f612b45565b3480156109b957600080fd5b5061044c612b54565b3480156109ce57600080fd5b5061044c6109dd366004614245565b612b5a565b3480156109ee57600080fd5b506104ae612bd4565b348015610a0357600080fd5b5061044c610a1236600461401d565b612d68565b61044c610a2536600461436a565b612d93565b348015610a3657600080fd5b506104ae610a4536600461428d565b612f4b565b348015610a5657600080fd5b5061044c6131e0565b348015610a6b57600080fd5b5061041f610a7a366004614215565b6131e6565b348015610a8b57600080fd5b5061044c613201565b348015610aa057600080fd5b50610ab4610aaf366004614190565b613207565b6040516103c9919061475d565b6104ae610acf366004613fe5565b6132f2565b348015610ae057600080fd5b506104ae61343d565b6104ae61348c565b601d8054610afe90614976565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2a90614976565b8015610b775780601f10610b4c57610100808354040283529160200191610b77565b820191906000526020600020905b815481529060010190602001808311610b5a57829003601f168201915b505050505081565b3360008181526021602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610bd99087906147e5565b60405180910390a35060019392505050565b602a602052600090815260409020546001600160a01b031681565b60296020526000908152604090205481565b600a546001600160a01b031681565b60126020526000908152604090205481565b6008546001600160a01b03163314610c5057600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000813b8015610c86576001915050610c92565b6000915050610c92565b505b919050565b60205490565b60236020528160005260406000208181548110610cb957600080fd5b90600052602060002001600091509150505481565b6001600160a01b0383166000908152602160209081526040808320338085529252822054831115610cfe57600080fd5b6001600160a01b0385166000908152601f6020526040902054831115610d2357600080fd5b6001600160a01b03808616600090815260216020908152604080832093851683529290529081208054859290610d5a90849061495f565b90915550610d6b9050858585613551565b6060846001600160a01b0316826001600160a01b0316600080516020614a1b8339815191528684604051610da09291906147ee565b60405180910390a36001925050505b9392505050565b601f6020526000908152604090205481565b6001600160a01b03811660009081527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a602090815260408220546002835260139091527f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed1923548291610e389161495f565b6001600160a01b03841660009081527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b76020526040902054909150600160401b90610e84908390614940565b610daf9190614920565b336002821115610e9d57600080fd5b6002821415610eb657610eb160008261371f565b610ec0565b610ec0828261371f565b81610ece57610ece816125af565b60008281526015602090815260408083206001600160a01b03851684529091528120805491905580610eff57600080fd5b82610f8f576000826001600160a01b031682604051610f1d9061448b565b60006040518083038185875af1925050503d8060008114610f5a576040519150601f19603f3d011682016040523d82523d6000602084013e610f5f565b606091505b5050905080610f895760405162461bcd60e51b8152600401610f80906147bb565b60405180910390fd5b506110aa565b600183141561101b576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610fc99186918691016144c6565b602060405180830381600087803b158015610fe357600080fd5b505af1158015610ff7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f8991906141f9565b60028314156110aa5760065460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb9061105690859085906004016144c6565b602060405180830381600087803b15801561107057600080fd5b505af1158015611084573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a891906141f9565b505b505050565b601281565b6007546001600160a01b031681565b602c6020526000908152604090208054610afe90614976565b601c5481565b600a546001600160a01b031633146110f957600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b8152600091829182916001600160a01b0316906370a082319061115090879060040161448e565b60206040518083038186803b15801561116857600080fd5b505afa15801561117c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a0919061422d565b600480546040516370a0823160e01b81526001600160a01b03909116916370a08231916111cf9189910161448e565b60206040518083038186803b1580156111e757600080fd5b505afa1580156111fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121f919061422d565b6001600160a01b03861660009081527f07d4ff730d9753101d832555708a37d38c2c45fce8cacaefc99f06074e93fe0b602052604090205461126087610dc8565b61126a9190614908565b9250925092509193909250565b602460209081526000928352604080842090915290825290205460ff1681565b600480546000546040516323b872dd60e01b815233936001600160a01b03938416936323b872dd936112d293879391909216918891016144a2565b602060405180830381600087803b1580156112ec57600080fd5b505af1158015611300573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061132491906141f9565b61132d57600080fd5b600e54429081106113915760105460ff1615611363576010805460ff19169055600f5461135b90600a614940565b600f55611375565b600f54611371906003614940565b600f555b63018b8200600e600082825461138b9190614908565b90915550505b600060015484600f546113a49190614940565b6113ae9190614920565b905080600d54101580156113c25750600081115b6113cb57600080fd5b80600d60008282546113dd919061495f565b9091555050602054601754602554600092916113f89161495f565b6114029087614940565b61140c9190614920565b9050600061141a828761495f565b905080601b600082825461142e9190614908565b9091555061143d90508261383a565b7f681ef4a11a25a24666b1b6a0d4475426a4d90bfca485704d78eded24de09315886848484604051611472949392919061482b565b60405180910390a16000856001600160a01b0316846040516114939061448b565b60006040518083038185875af1925050503d80600081146114d0576040519150601f19603f3d011682016040523d82523d6000602084013e6114d5565b606091505b50509050806114f65760405162461bcd60e51b8152600401610f80906147bb565b50505050505050565b601560209081526000928352604080842090915290825290205481565b60008281526028602052604090205433906001600160a01b031681148015611553575060008381526027602052604090205460ff16155b801561156e57506000838152602d602052604090205460ff16155b61157757600080fd5b60055460015460405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb916115ab918591906004016144c6565b602060405180830381600087803b1580156115c557600080fd5b505af11580156115d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fd91906141f9565b61160657600080fd5b60035460405163d851fdfd60e01b81526000916001600160a01b03169063d851fdfd906116379087906004016147e5565b60206040518083038186803b15801561164f57600080fd5b505afa158015611663573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611687919061422d565b9050611695600183836138a6565b600084815260286020526040812080546001600160a01b0319169055831561175757600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936116ee9389939116918891016144a2565b602060405180830381600087803b15801561170857600080fd5b505af115801561171c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174091906141f9565b61174957600080fd5b6117528261383a565b611774565b6020546025546117679084614940565b6117719190614920565b90505b6000858152601a602052604090205461179f90611790876118dc565b61179a9190614908565b61383a565b6000546117bf906001600160a01b0316846117ba848661495f565b613551565b80602060008282546117d1919061495f565b9091555050600080546001600160a01b03168152601f6020526040812080548392906117fe90849061495f565b925050819055508160256000828254611817919061495f565b90915550506040517fcc1e401c461caebcaa61b6c5cf16d39bdd80ef974ae2e004d1813f74c4958f3f90611850908590889088906144f9565b60405180910390a15050505050565b6003546001600160a01b031681565b601b54600d54600e54600f54602080546000805260129091526000805160206149fb8339815191525460255490919293949596565b6009546001600160a01b031633146118ba57600080fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526019602052604081205460185482916118f99161495f565b600084815260166020526040902054909150600160401b90610e84908390614940565b6001600160a01b03166000908152601f602052604090205490565b600554600080546001546040516323b872dd60e01b8152929333936001600160a01b03918216936323b872dd936119759387939216916004016144a2565b602060405180830381600087803b15801561198f57600080fd5b505af11580156119a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c791906141f9565b6119d057600080fd5b6003546001600160a01b031663074c516a846119ec57826119f9565b6000546001600160a01b03165b602254876040518463ffffffff1660e01b8152600401611a1b93929190614543565b600060405180830381600087803b158015611a3557600080fd5b505af1158015611a49573d6000803e3d6000fd5b505050508215611a6457611a5f81602254613905565b611ac0565b611a7060225485613a54565b6001600160a01b03811660008181526023602090815260408083206022805482546001818101855593875285872001559484526024835281842094548452939091529020805460ff191690911790555b600160226000828254611ad39190614908565b925050819055508360256000828254611aec9190614908565b9091555050600054611b099082906001600160a01b031686613551565b6000546040516060916001600160a01b039081169190841690600080516020614a1b83398151915290611b3f90899086906147ee565b60405180910390a37f27b747c9002e1f67b0556184d9d8f86030c662a0ad48a57b1fd41dfbd54ec436828686604051611b7a939291906144f9565b60405180910390a16001602254611b91919061495f565b95945050505050565b606080606080606080606080606060008a5160001415611bd357506001600160a01b038b16600090815260236020526040902054611bd7565b5089515b806001600160401b03811115611bfd57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c26578160200160208202803683370190505b509950806001600160401b03811115611c4f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c78578160200160208202803683370190505b509750806001600160401b03811115611ca157634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611cca578160200160208202803683370190505b509850806001600160401b03811115611cf357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d1c578160200160208202803683370190505b509650806001600160401b03811115611d4557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d6e578160200160208202803683370190505b509550806001600160401b03811115611d9757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611dc0578160200160208202803683370190505b509450806001600160401b03811115611de957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611e12578160200160208202803683370190505b509150806001600160401b03811115611e3b57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611e64578160200160208202803683370190505b509350806001600160401b03811115611e8d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611eb6578160200160208202803683370190505b5092506000805b8281101561236b578c51611f15576001600160a01b038e166000908152602360205260409020805482908110611f0357634e487b7160e01b600052603260045260246000fd5b90600052602060002001549150611f40565b8c8181518110611f3557634e487b7160e01b600052603260045260246000fd5b602002602001015191505b818c8281518110611f6157634e487b7160e01b600052603260045260246000fd5b602090810291909101015260035460405163d851fdfd60e01b81526001600160a01b039091169063d851fdfd90611f9c9085906004016147e5565b60206040518083038186803b158015611fb457600080fd5b505afa158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fec919061422d565b8a828151811061200c57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508d6001600160a01b03166028600084815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b0316148b828151811061207357634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101526000546003546040516331a9108f60e11b81526001600160a01b039283169290911690636352211e906120ba9086906004016147e5565b60206040518083038186803b1580156120d257600080fd5b505afa1580156120e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061210a9190614001565b6001600160a01b03161487828151811061213457634e487b7160e01b600052603260045260246000fd5b911515602092830291909101820152600083815260279091526040902054885160ff9091169089908390811061217a57634e487b7160e01b600052603260045260246000fd5b9115156020928302919091018201526000838152602d9091526040902054845160ff909116908590839081106121c057634e487b7160e01b600052603260045260246000fd5b9115156020928302919091018201526000838152601a90915260409020546121e7836118dc565b6121f19190614908565b86828151811061221157634e487b7160e01b600052603260045260246000fd5b602002602001018181525050602960008381526020019081526020016000205485828151811061225157634e487b7160e01b600052603260045260246000fd5b6020908102919091018101919091526000838152602890915260409020546001600160a01b038f81169116148061232957508d6001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b0316636352211e846040518263ffffffff1660e01b81526004016122ce91906147e5565b60206040518083038186803b1580156122e657600080fd5b505afa1580156122fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231e9190614001565b6001600160a01b0316145b89828151811061234957634e487b7160e01b600052603260045260246000fd5b91151560209283029190910190910152612364600182614908565b9050611ebd565b5050509295985092959850929598565b600a546001600160a01b0316331461239257600080fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b601160209081526000928352604080842090915290825290205481565b60276020526000908152604090205460ff1681565b601e8054610afe90614976565b6008546001600160a01b03163314801561240f57506000600b54115b61241857600080fd5b600b80546000918290556008546040519192916001600160a01b039091169083906124429061448b565b60006040518083038185875af1925050503d806000811461247f576040519150601f19603f3d011682016040523d82523d6000602084013e612484565b606091505b50509050806124a55760405162461bcd60e51b8152600401610f80906147bb565b5050565b601a6020526000908152604090205481565b600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936124f29333939116918791016144a2565b602060405180830381600087803b15801561250c57600080fd5b505af1158015612520573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254491906141f9565b61254d57600080fd5b6125568161383a565b7fb4be3166b21846f2f110d6b948d56c561a16def710167c9756c9c811593b241b33826040516125879291906144c6565b60405180910390a150565b600060606125a1848483613ab1565b949350505050565b601b5481565b6125b881610c72565b156125c6576125c681613af1565b50565b60006125d484610c72565b156125eb576125e4848484613c3b565b9050610daf565b6125e4848484613ab1565b6006546001600160a01b03163314156126db576000805260126020526000805160206149fb8339815191525461262b57600080fd5b6000805260126020526000805160206149fb83398151915254612652600160401b85614940565b61265c9190614920565b6002600090815260136020527f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed19238054909190612699908490614908565b90915550506040517f0b6f805f55e534da95e83df42a3be5d987011a774c125d6cbc3cdf41620049b8906126ce9085906147e5565b60405180910390a16110a8565b60405162461bcd60e51b8152600401610f809061479a565b60008181526028602052604090205433906001600160a01b03168114801561272a57506000828152602d602052604090205460ff16155b80156127525750600082815260296020526040902054620151809061274f904261495f565b10155b61275b57600080fd5b60035460405163d851fdfd60e01b81526000916001600160a01b03169063d851fdfd9061278c9086906004016147e5565b60206040518083038186803b1580156127a457600080fd5b505afa1580156127b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dc919061422d565b600084815260296020526040902042905590506127fb600183836138a6565b600083815260286020526040902080546001600160a01b03191690556128218382613a54565b6003546000546040516323b872dd60e01b81526001600160a01b03928316926323b872dd9261285992911690869088906004016144a2565b600060405180830381600087803b15801561287357600080fd5b505af1158015612887573d6000803e3d6000fd5b505050507fd189f9264d7206fa03765606c54a04ae20609e3055dfcd0e76780c8662a6640582846040516128bc9291906144c6565b60405180910390a1505050565b6009546001600160a01b031681565b6000806000806000806128ea8761191c565b6001600160a01b03881660009081527f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b55260209081526040808320547fa31547ce6245cdb9ecea19cf8c7eb9f5974025bb4075011409251ae855b30aed9092528220549091612958908b612b5a565b6129629190614908565b6001600160a01b038a1660009081527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d60205260409020546129a560018c612b5a565b6129af9190614908565b6001546129bf90620f4240614940565b600560009054906101000a90046001600160a01b03166001600160a01b031663dd62ed3e8d60008054906101000a90046001600160a01b03166040518363ffffffff1660e01b8152600401612a159291906144df565b60206040518083038186803b158015612a2d57600080fd5b505afa158015612a41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a65919061422d565b11600154620f4240612a779190614940565b600460009054906101000a90046001600160a01b03166001600160a01b031663dd62ed3e8e60008054906101000a90046001600160a01b03166040518363ffffffff1660e01b8152600401612acd9291906144df565b60206040518083038186803b158015612ae557600080fd5b505afa158015612af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b1d919061422d565b1195509550955095509550955091939550919395565b60166020526000908152604090205481565b6008546001600160a01b031681565b600b5481565b60008281526014602090815260408083206001600160a01b038516845282528083205485845260139092528220548291612b939161495f565b60008581526011602090815260408083206001600160a01b0388168452909152902054909150600160401b90612bca908390614940565b6125a19190614920565b601c5442906201518090612be8908361495f565b118015612c1f5750600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35415155b8015612c2d57506000601b54115b156125c657601c819055602080546001600090815260129092527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354602554612c76919061495f565b601b54612c839190614940565b612c8d9190614920565b905080601b6000828254612ca1919061495f565b9091555050600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354612ce0600160401b83614940565b612cea9190614920565b6001600090815260136020527f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8054909190612d27908490614908565b90915550506040517f7129ce2f79c23a07093acd7ea119354b337fa472d7819587dc212041cb35d65d90612d5c9083906147e5565b60405180910390a15050565b6001600160a01b03918216600090815260216020908152604080832093909416825291909152205490565b60008381526028602052604081205433906001600160a01b031681148015612dca575060008581526027602052604090205460ff16155b8015612de557506000858152602d602052604090205460ff16155b612dee57600080fd5b600754604051631b5e4a7960e21b81526000916001600160a01b031690636d7929e4903490612e24906001908190600401614772565b6020604051808303818588803b158015612e3d57600080fd5b505af1158015612e51573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612e76919061422d565b6000818152602b602090815260408083208a9055898352602a825280832080546001600160a01b0319166001600160a01b038a16179055602c82529091208751929350612ec7929091880190613e89565b506000868152602d60209081526040808320805460ff19166001179055601a9091529020547f41b1f3d6785afe51d0f1e5111b8a7d1cf38be18f8bd5c3b91e06cd100ccdc9159083908890612f1b826118dc565b612f259190614908565b878986604051612f3a96959493929190614564565b60405180910390a195945050505050565b6000858152602b6020526040812054600754829182916001600160a01b03163314612f7557600080fd5b60005b8781101561300a57868181518110612fa057634e487b7160e01b600052603260045260246000fd5b602002602001015194506000868281518110612fcc57634e487b7160e01b600052603260045260246000fd5b60200260200101511315612feb57612fe48585614908565b9350612ff8565b612ff58584614908565b92505b613003600182614908565b9050612f78565b508715801561301857508183115b156131865760008181526027602052604090205460ff16613181576000818152602760209081526040808320805460ff19166001179055601a90915290205480156130e0576000828152602860205260409020546001600160a01b0316613087576130828161383a565b6130e0565b6000828152602860209081526040808320546001600160a01b031683527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d909152812080548392906130da908490614908565b90915550505b7f248c6780d2d35e738439fe85b29710742cf650c1765c45881537c4540906f03e6028600084815260200190815260200160002060009054906101000a90046001600160a01b03168383602a600087815260200190815260200160002060009054906101000a90046001600160a01b0316602c60008881526020019081526020016000208f604051613177969594939291906145b1565b60405180910390a1505b6131c0565b7f83174f77f9261d2e9831d002ea903948abc40d4eaf8dbcc5849ada2e03d66154818a6040516131b7929190614807565b60405180910390a15b6000908152602d60205260409020805460ff191690555050505050505050565b60175481565b6028602052600090815260409020546001600160a01b031681565b600c5481565b60035460009081906001600160a01b0316331480156132425750600084815260296020526040902054620151809061323f904261495f565b10155b61324b57600080fd5b60008481526029602052604090819020429055600354905163d851fdfd60e01b81526132e89186916001600160a01b039091169063d851fdfd906132939084906004016147e5565b60206040518083038186803b1580156132ab57600080fd5b505afa1580156132bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e3919061422d565b613cf2565b6125a18585613905565b6001600160a01b0381166133035750335b60003411801561331257503332145b61331b57600080fd5b60025434906000906301e1338090613333904261495f565b11613353576103e8613346836006614940565b6133509190614920565b90505b80600c60008282546133659190614908565b9091555060009050613377828461495f565b90506133838482613d46565b600060205460175460255460205461339b919061495f565b6133a59190614908565b6133af9084614940565b6133b99190614920565b90506133c5818361495f565b600b60008282546133d69190614908565b9250508190555080600d60008282546133ef9190614908565b90915550506040517fc6e962e7b569fe0538aca0fa7b36049a3d7ac9009bc0cbabe0b5c3313d6fa1739061342690879085906144c6565b60405180910390a1613436612bd4565b5050505050565b6009546001600160a01b03163314801561345957506000600c54115b61346257600080fd5b600c80546000918290556009546040519192916001600160a01b039091169083906124429061448b565b6000805260126020526000805160206149fb8339815191525434906134b057600080fd5b6000805260126020526000805160206149fb833981519152546134d7600160401b83614940565b6134e19190614920565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c805490919061351c908490614908565b90915550506040517ff0689ae6841002cf16b73981a1f76fd8846a837b7a34afe0cdab7496289678ac906125879083906147e5565b6001600160a01b0383166000908152601f602052604090205481111561357657600080fd5b6001600160a01b0383166000908152601f60205260408120805483929061359e90849061495f565b90915550506001600160a01b0382166000908152601f6020526040812080548392906135cb908490614908565b909155506135da905083610c72565b61369f576000546001600160a01b0383811691161461368e57600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd9361362a9389939116918791016144a2565b602060405180830381600087803b15801561364457600080fd5b505af1158015613658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367c91906141f9565b61368557600080fd5b61368e8161383a565b61369a600084836138a6565b6136a8565b6136a883613af1565b6136b182610c72565b6136c6576136c160008383613deb565b6136cf565b6136cf82613af1565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161371291906147e5565b60405180910390a3505050565b600061372b8383612b5a565b600084815260136020908152604080832054601483528184206001600160a01b0388168086529084528285209190915587845260158352818420908452909152812080549293508392909190613782908490614908565b9091555050826110aa5761379582610dc8565b7f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed1923546001600160a01b03841660009081527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a60209081526040808320939093557f07d4ff730d9753101d832555708a37d38c2c45fce8cacaefc99f06074e93fe0b905290812080549293508392909190613830908490614908565b9091555050505050565b60175461385e5780602660008282546138539190614908565b909155506125c69050565b601754600160401b602654836138749190614908565b61387e9190614940565b6138889190614920565b601860008282546138999190614908565b9091555050600060265550565b6138b0838361371f565b600083815260126020526040812080548392906138ce90849061495f565b909155505060008381526011602090815260408083206001600160a01b03861684529091528120805483929061383090849061495f565b600081815260286020908152604080832080546001600160a01b0319166001600160a01b03871690811790915583526024825280832084845290915290205460ff16613997576001600160a01b038216600081815260236020908152604080832080546001818101835591855283852001869055938352602482528083208584529091529020805460ff191690911790555b60035460405163d851fdfd60e01b8152613a239160019185916001600160a01b03169063d851fdfd906139ce9087906004016147e5565b60206040518083038186803b1580156139e657600080fd5b505afa1580156139fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1e919061422d565b613deb565b7f173ca1bf74155b9dca4f4031e88b399af1aa5c87b77ef963a87a419d486977d88282604051612d5c9291906144c6565b60008281526027602052604090205460ff166124a557613a7382613e4a565b8060176000828254613a859190614908565b909155505060008281526016602052604081208054839290613aa8908490614908565b90915550505050565b6000613abe338585613551565b836001600160a01b0316336001600160a01b0316600080516020614a1b8339815191528585604051610bd99291906147ee565b6001600160a01b03811660009081527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b7602052604090205480156124a557613b3b600083836138a6565b6001600160a01b03821660009081527fa31547ce6245cdb9ecea19cf8c7eb9f5974025bb4075011409251ae855b30aed602090815260408220805490839055918052601290526000805160206149fb83398151915254613b9a57600080fd5b6000805260126020526000805160206149fb83398151915254613bc1600160401b83614940565b613bcb9190614920565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c8054909190613c06908490614908565b90915550506040517ff0689ae6841002cf16b73981a1f76fd8846a837b7a34afe0cdab7496289678ac906128bc9083906147e5565b6000613c48338585613551565b60405163607705c560e11b815284906001600160a01b0382169063c0ee0b8a90613c7a9033908890889060040161451c565b600060405180830381600087803b158015613c9457600080fd5b505af1158015613ca8573d6000803e3d6000fd5b50505050846001600160a01b0316336001600160a01b0316600080516020614a1b8339815191528686604051613cdf9291906147ee565b60405180910390a3506001949350505050565b60008281526027602052604090205460ff166124a557613d1182613e4a565b8060176000828254613d23919061495f565b909155505060008281526016602052604081208054839290613aa890849061495f565b6001600160a01b0382166000908152601f602052604081208054839290613d6e908490614908565b925050819055508060206000828254613d879190614908565b90915550613d96905033610c72565b613da657613da660008383613deb565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051613ddf91906147e5565b60405180910390a25050565b613df5838361371f565b60008381526012602052604081208054839290613e13908490614908565b909155505060008381526011602090815260408083206001600160a01b038616845290915281208054839290613830908490614908565b6000613e55826118dc565b601854600084815260196020908152604080832093909355601a905290812080549293508392909190613aa8908490614908565b828054613e9590614976565b90600052602060002090601f016020900481019282613eb75760008555613efd565b82601f10613ed057805160ff1916838001178555613efd565b82800160010185558215613efd579182015b82811115613efd578251825591602001919060010190613ee2565b50613f09929150613f0d565b5090565b5b80821115613f095760008155600101613f0e565b60006001600160401b03831115613f3b57613f3b6149c1565b613f4e601f8401601f19166020016148b0565b9050828152838383011115613f6257600080fd5b828260208301376000602084830101529392505050565b600082601f830112613f89578081fd5b81356020613f9e613f99836148d9565b6148b0565b8281528181019085830183850287018401881015613fba578586fd5b855b85811015613fd857813584529284019290840190600101613fbc565b5090979650505050505050565b600060208284031215613ff6578081fd5b8135610daf816149d7565b600060208284031215614012578081fd5b8151610daf816149d7565b6000806040838503121561402f578081fd5b823561403a816149d7565b9150602083013561404a816149d7565b809150509250929050565b600080600060608486031215614069578081fd5b8335614074816149d7565b92506020840135614084816149d7565b929592945050506040919091013590565b600080604083850312156140a7578182fd5b82356140b2816149d7565b915060208301356001600160401b038111156140cc578182fd5b6140d885828601613f79565b9150509250929050565b600080604083850312156140f4578182fd5b82356140ff816149d7565b946020939093013593505050565b60008060008060608587031215614122578081fd5b843561412d816149d7565b93506020850135925060408501356001600160401b038082111561414f578283fd5b818701915087601f830112614162578283fd5b813581811115614170578384fd5b886020828501011115614181578384fd5b95989497505060200194505050565b6000806000606084860312156141a4578283fd5b83356141af816149d7565b92506020840135915060408401356001600160401b038111156141d0578182fd5b8401601f810186136141e0578182fd5b6141ef86823560208401613f22565b9150509250925092565b60006020828403121561420a578081fd5b8151610daf816149ec565b600060208284031215614226578081fd5b5035919050565b60006020828403121561423e578081fd5b5051919050565b60008060408385031215614257578182fd5b82359150602083013561404a816149d7565b6000806040838503121561427b578182fd5b82359150602083013561404a816149ec565b600080600080600060a086880312156142a4578283fd5b853594506020808701356142b7816149ec565b94506040870135935060608701356001600160401b03808211156142d9578384fd5b6142e58a838b01613f79565b945060808901359150808211156142fa578384fd5b508701601f8101891361430b578283fd5b8035614319613f99826148d9565b81815283810190838501858402850186018d1015614335578687fd5b8694505b83851015614357578035835260019490940193918501918501614339565b5080955050505050509295509295909350565b60008060006060848603121561437e578081fd5b8335925060208401356001600160401b0381111561439a578182fd5b8401601f810186136143aa578182fd5b6143b986823560208401613f22565b92505060408401356143ca816149d7565b809150509250925092565b6000815180845260208085019450808401835b838110156144065781511515875295820195908201906001016143e8565b509495945050505050565b6000815180845260208085019450808401835b8381101561440657815187529582019590820190600101614424565b60008151808452815b8181101561446557602081850181015186830182015201614449565b818111156144765782602083870101525b50601f01601f19169290920160200192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b600060018060a01b038516825283602083015260606040830152611b916060830184614440565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03878116825260208201879052604082018690528416606082015260c06080820181905260009061459e90830185614440565b90508260a0830152979650505050505050565b6001600160a01b038781168252602080830188905260408301879052908516606083015260c0608083015283546000918291600281046001828116806145f857607f831692505b84831081141561461657634e487b7160e01b87526022600452602487fd5b6146238360c08a016147e5565b818015614637576001811461464857614672565b60ff19861682528682019750614672565b6146518c6148fc565b895b8681101561466c57815484820152908501908801614653565b83019850505b505050505060a0949094019490945298975050505050505050565b60006101208083526146a18184018d614411565b905082810360208401526146b5818c6143d5565b905082810360408401526146c9818b614411565b905082810360608401526146dd818a6143d5565b905082810360808401526146f181896143d5565b905082810360a084015261470581886143d5565b905082810360c08401526147198187614411565b905082810360e084015261472d8186614411565b905082810361010084015261474281856143d5565b9c9b505050505050505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60ff9290921682521515602082015260400190565b600060208252610daf6020830184614440565b6020808252600790820152661b9bc81dd85b9d60ca1b604082015260600190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b90815260200190565b6000838252604060208301526125a16040830184614440565b918252602082015260400190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b95865260208601949094526040850192909252606084015215156080830152151560a082015260c00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60ff91909116815260200190565b6040518181016001600160401b03811182821017156148d1576148d16149c1565b604052919050565b60006001600160401b038211156148f2576148f26149c1565b5060209081020190565b60009081526020902090565b6000821982111561491b5761491b6149ab565b500190565b60008261493b57634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561495a5761495a6149ab565b500290565b600082821015614971576149716149ab565b500390565b60028104600182168061498a57607f821691505b60208210811415610c9057634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146125c657600080fd5b80151581146125c657600080fdfe7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7be19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16a26469706673582212205c05fdfd7232218effea4f88f0760ef73cce754de759f05f6b5f5e6e0059227b64736f6c63430008000033
Deployed Bytecode Sourcemap
32969:25415:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44568:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49219:244;;;;;;;;;;-1:-1:-1;49219:244:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;55686:37::-;;;;;;;;;;-1:-1:-1;55686:37:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;52361:::-;;;;;;;;;;-1:-1:-1;52361:37:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33477:27::-;;;;;;;;;;;;;:::i;38409:40::-;;;;;;;;;;-1:-1:-1;38409:40:0;;;;;:::i;:::-;;:::i;33877:142::-;;;;;;;;;;-1:-1:-1;33877:142:0;;;;;:::i;:::-;;:::i;:::-;;49475:410;;;;;;;;;;-1:-1:-1;49475:410:0;;;;;:::i;:::-;;:::i;45520:99::-;;;;;;;;;;;;;:::i;49931:43::-;;;;;;;;;;-1:-1:-1;49931:43:0;;;;;:::i;:::-;;:::i;48684:443::-;;;;;;;;;;-1:-1:-1;48684:443:0;;;;;:::i;:::-;;:::i;44692:43::-;;;;;;;;;;-1:-1:-1;44692:43:0;;;;;:::i;:::-;;:::i;40383:242::-;;;;;;;;;;-1:-1:-1;40383:242:0;;;;;:::i;:::-;;:::i;38807:884::-;;;;;;;;;;-1:-1:-1;38807:884:0;;;;;:::i;:::-;;:::i;44646:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33347:41::-;;;;;;;;;;;;;:::i;55785:32::-;;;;;;;;;;-1:-1:-1;55785:32:0;;;;;:::i;:::-;;:::i;43204:23::-;;;;;;;;;;;;;:::i;34742:143::-;;;;;;;;;;-1:-1:-1;34742:143:0;;;;;:::i;:::-;;:::i;35878:254::-;;;;;;;;;;-1:-1:-1;35878:254:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;49985:70::-;;;;;;;;;;-1:-1:-1;49985:70:0;;;;;:::i;:::-;;:::i;37207:1123::-;;;;;;;;;;-1:-1:-1;37207:1123:0;;;;;:::i;:::-;;:::i;38565:58::-;;;;;;;;;;-1:-1:-1;38565:58:0;;;;;:::i;:::-;;:::i;51207:1093::-;;;;;;;;;;-1:-1:-1;51207:1093:0;;;;;:::i;:::-;;:::i;33097:21::-;;;;;;;;;;;;;:::i;35046:353::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;34614:116::-;;;;;;;;;;-1:-1:-1;34614:116:0;;;;;:::i;:::-;;:::i;42676:229::-;;;;;;;;;;-1:-1:-1;42676:229:0;;;;;:::i;:::-;;:::i;45631:123::-;;;;;;;;;;-1:-1:-1;45631:123:0;;;;;:::i;:::-;;:::i;50174:856::-;;;;;;;;;;-1:-1:-1;50174:856:0;;;;;:::i;:::-;;:::i;53518:1713::-;;;;;;;;;;-1:-1:-1;53518:1713:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;34897:137::-;;;;;;;;;;-1:-1:-1;34897:137:0;;;;;:::i;:::-;;:::i;38342:56::-;;;;;;;;;;-1:-1:-1;38342:56:0;;;;;:::i;:::-;;:::i;51154:42::-;;;;;;;;;;-1:-1:-1;51154:42:0;;;;;:::i;:::-;;:::i;44606:29::-;;;;;;;;;;;;;:::i;34031:294::-;;;;;;;;;;;;;:::i;42062:46::-;;;;;;;;;;-1:-1:-1;42062:46:0;;;;;:::i;:::-;;:::i;43304:233::-;;;;;;;;;;-1:-1:-1;43304:233:0;;;;;:::i;:::-;;:::i;45766:178::-;;;;;;;;;;-1:-1:-1;45766:178:0;;;;;:::i;:::-;;:::i;43167:26::-;;;;;;;;;;;;;:::i;47073:132::-;;;;;;;;;;-1:-1:-1;47073:132:0;;;;;:::i;:::-;;:::i;45956:304::-;;;;;;;;;;-1:-1:-1;45956:304:0;;;;;:::i;:::-;;:::i;41482:386::-;;;;;;;;;;-1:-1:-1;41482:386:0;;;;;:::i;:::-;;:::i;52931:575::-;;;;;;;;;;-1:-1:-1;52931:575:0;;;;;:::i;:::-;;:::i;33448:18::-;;;;;;;;;;;;;:::i;35419:447::-;;;;;;;;;;-1:-1:-1;35419:447:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;41882:44::-;;;;;;;;;;-1:-1:-1;41882:44:0;;;;;:::i;:::-;;:::i;33409:28::-;;;;;;;;;;;;;:::i;33515:21::-;;;;;;;;;;;;;:::i;40138:235::-;;;;;;;;;;-1:-1:-1;40138:235:0;;;;;:::i;:::-;;:::i;43971:585::-;;;;;;;;;;;;;:::i;48539:125::-;;;;;;;;;;-1:-1:-1;48539:125:0;;;;;:::i;:::-;;:::i;56003:685::-;;;;;;:::i;:::-;;:::i;56887:1490::-;;;;;;;;;;-1:-1:-1;56887:1490:0;;;;;:::i;:::-;;:::i;41937:31::-;;;;;;;;;;;;;:::i;52312:38::-;;;;;;;;;;-1:-1:-1;52312:38:0;;;;;:::i;:::-;;:::i;33547:18::-;;;;;;;;;;;;;:::i;55243:431::-;;;;;;;;;;-1:-1:-1;55243:431:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36238:763::-;;;;;;:::i;:::-;;:::i;34337:265::-;;;;;;;;;;;;;:::i;41169:261::-;;;:::i;44568:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49219:244::-;49316:10;49278:4;49341:17;;;:9;:17;;;;;;;;-1:-1:-1;;;;;49341:22:0;;;;;;;;;;:31;;;49394;49278:4;;49316:10;;;49394:31;;;;49366:6;;49394:31;:::i;:::-;;;;;;;;-1:-1:-1;49447:4:0;;49219:244;-1:-1:-1;;;49219:244:0:o;55686:37::-;;;;;;;;;;;;-1:-1:-1;;;;;55686:37:0;;:::o;52361:::-;;;;;;;;;;;;;:::o;33477:27::-;;;-1:-1:-1;;;;;33477:27:0;;:::o;38409:40::-;;;;;;;;;;;;;:::o;33877:142::-;33958:13;;-1:-1:-1;;;;;33958:13:0;33944:10;:27;33936:36;;;;;;33987:13;:20;;-1:-1:-1;;;;;;33987:20:0;-1:-1:-1;;;;;33987:20:0;;;;;;;;;;33877:142::o;49475:410::-;49531:16;49716:18;;49766:8;;49763:111;;49802:4;49795:11;;;;;49763:111;49853:5;49846:12;;;;;49763:111;49475:410;;;;;:::o;45520:99::-;45595:12;;45520:99;:::o;49931:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48684:443::-;-1:-1:-1;;;;;48831:14:0;;48761:4;48831:14;;;:9;:14;;;;;;;;48798:10;48831:22;;;;;;;;:33;-1:-1:-1;48831:33:0;48823:42;;;;;;-1:-1:-1;;;;;48888:13:0;;;;;;:8;:13;;;;;;:23;-1:-1:-1;48888:23:0;48880:32;;;;;;-1:-1:-1;;;;;48927:14:0;;;;;;;:9;:14;;;;;;;;:22;;;;;;;;;;;:32;;48953:6;;48927:14;:32;;48953:6;;48927:32;:::i;:::-;;;;-1:-1:-1;48974:26:0;;-1:-1:-1;48985:3:0;48989;48993:6;48974:10;:26::i;:::-;49015:18;49070:3;-1:-1:-1;;;;;49053:36:0;49062:6;-1:-1:-1;;;;;49053:36:0;-1:-1:-1;;;;;;;;;;;49075:6:0;49083:5;49053:36;;;;;;;:::i;:::-;;;;;;;;49111:4;49104:11;;;;48684:443;;;;;;:::o;44692:43::-;;;;;;;;;;;;;:::o;40383:242::-;-1:-1:-1;;;;;40511:27:0;;40446:4;40511:27;;;:18;;:27;;;:18;:27;;;38793:1;40486:22;;:11;:22;;;;;40446:4;;40486:52;;;:::i;:::-;-1:-1:-1;;;;;40560:24:0;;:15;:24;;;:15;;:24;:15;:24;;;40466:72;;-1:-1:-1;;;;38665:19:0;40560:39;;40466:72;;40560:39;:::i;:::-;:53;;;;:::i;38807:884::-;38890:10;38941:1;38935:4;:7;;38916:27;;;;;;38793:1;38965:4;:17;38962:138;;;39002:23;38719:1;39018:6;39002;:23::i;:::-;38962:138;;;39064:20;39071:4;39077:6;39064;:20::i;:::-;39119:15;39116:71;;39154:17;39164:6;39154:9;:17::i;:::-;39217:11;39231:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;39231:22:0;;;;;;;;;;;39268:26;;;39231:22;39309:19;;;;;;39348:15;39345:335;;39384:12;39402:6;-1:-1:-1;;;;;39402:11:0;39420:6;39402:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39383:48;;;39458:7;39450:36;;;;-1:-1:-1;;;39450:36:0;;;;;;;:::i;:::-;;;;;;;;;39345:335;;;;38755:1;39510:4;:15;39507:173;;;39545:3;;;:28;;-1:-1:-1;;;39545:28:0;;-1:-1:-1;;;;;39545:3:0;;;;:12;;:28;;39558:6;;39566;;39545:28;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39507:173::-;38793:1;39597:4;:17;39594:86;;;39634:5;;:30;;-1:-1:-1;;;39634:30:0;;-1:-1:-1;;;;;39634:5:0;;;;:14;;:30;;39649:6;;39657;;39634:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39594:86;38807:884;;;:::o;44646:35::-;44679:2;44646:35;:::o;33347:41::-;;;-1:-1:-1;;;;;33347:41:0;;:::o;55785:32::-;;;;;;;;;;;;;;;;:::i;43204:23::-;;;;:::o;34742:143::-;34826:12;;-1:-1:-1;;;;;34826:12:0;34812:10;:26;34804:35;;;;;;34854:12;:19;;-1:-1:-1;;;;;;34854:19:0;-1:-1:-1;;;;;34854:19:0;;;;;;;;;;34742:143::o;35878:254::-;36014:3;;:22;;-1:-1:-1;;;36014:22:0;;35934:16;;;;;;-1:-1:-1;;;;;36014:3:0;;:13;;:22;;36028:7;;36014:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36038:3;;;:22;;-1:-1:-1;;;36038:22:0;;-1:-1:-1;;;;;36038:3:0;;;;:13;;:22;;36052:7;;36038:22;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36090:28:0;;:19;:28;;;:19;;:28;:19;:28;;;36062:25;36110:7;36062:16;:25::i;:::-;:56;;;;:::i;:::-;36005:115;;;;;;35878:254;;;;;:::o;49985:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37207:1123::-;37327:3;;;37259:22;37352:4;37327:38;;-1:-1:-1;;;37327:38:0;;37292:10;;-1:-1:-1;;;;;37327:3:0;;;;:16;;:38;;37292:10;;37352:4;;;;;37358:6;;37327:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37318:49;;;;;;37447:20;;37393:15;;37440:27;;37437:317;;37490:9;;;;37487:198;;;37523:9;:17;;-1:-1:-1;;37523:17:0;;;37576:10;;:15;;37589:2;37576:15;:::i;:::-;37563:10;:28;37487:198;;;37651:10;;:14;;37664:1;37651:14;:::i;:::-;37638:10;:27;37487:198;37727:11;37703:20;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;37437:317:0;37770:9;37800:1;;37793:6;37782:10;;:17;;;;:::i;:::-;:19;;;;:::i;:::-;37770:31;;37842:4;37825:13;;:21;;:33;;;;;37857:1;37850:4;:8;37825:33;37816:44;;;;;;37892:4;37875:13;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;37985:12:0;;37962:19;;37943:16;;37913;;37985:12;37943:38;;;:::i;:::-;37932:50;;:6;:50;:::i;:::-;:65;;;;:::i;:::-;37913:84;-1:-1:-1;38012:13:0;38029:21;37913:84;38029:6;:21;:::i;:::-;38012:38;;38083:8;38065:14;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;38106:36:0;;-1:-1:-1;38130:11:0;38106:23;:36::i;:::-;38162:44;38171:6;38179:4;38184:11;38197:8;38162:44;;;;;;;;;:::i;:::-;;;;;;;;38222:12;38240:6;-1:-1:-1;;;;;38240:11:0;38258:4;38240:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38221:46;;;38290:7;38282:36;;;;-1:-1:-1;;;38282:36:0;;;;;;;:::i;:::-;37207:1123;;;;;;;:::o;38565:58::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;51207:1093::-;51280:14;51341:15;;;:6;:15;;;;;;51297:10;;-1:-1:-1;;;;;51341:15:0;51331:25;;:52;;;;-1:-1:-1;51361:22:0;;;;:13;:22;;;;;;;;51360:23;51331:52;:79;;;;-1:-1:-1;51388:22:0;;;;:13;:22;;;;;;;;51387:23;51331:79;51322:89;;;;;;51435:3;;;51456:1;51435:23;;-1:-1:-1;;;51435:23:0;;-1:-1:-1;;;;;51435:3:0;;;;:12;;:23;;51448:6;;51456:1;51435:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51426:34;;;;;;51494:8;;:27;;-1:-1:-1;;;51494:27:0;;51475:16;;-1:-1:-1;;;;;51494:8:0;;:18;;:27;;51513:7;;51494:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51475:46;;51536:44;38755:1;51559:6;51567:11;51536:12;:44::i;:::-;51621:1;51595:15;;;:6;:15;;;;;:28;;-1:-1:-1;;;;;;51595:28:0;;;51667:252;;;;51710:3;;;;51734:4;51710:42;;-1:-1:-1;;;51710:42:0;;-1:-1:-1;;;;;51710:3:0;;;;:16;;:42;;51727:6;;51734:4;;;51740:11;;51710:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51701:53;;;;;;51773:36;51797:11;51773:23;:36::i;:::-;51667:252;;;51891:12;;51872:16;;51858:30;;:11;:30;:::i;:::-;:45;;;;:::i;:::-;51848:55;;51667:252;51986:25;;;;:16;:25;;;;;;51933:79;;51957:28;52003:7;51957:19;:28::i;:::-;:54;;;;:::i;:::-;51933:23;:79::i;:::-;52052:4;;52041:47;;-1:-1:-1;;;;;52052:4:0;52058:6;52066:21;52080:7;52066:11;:21;:::i;:::-;52041:10;:47::i;:::-;52119:7;52103:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;52141:14:0;52150:4;;-1:-1:-1;;;;;52150:4:0;52141:14;;:8;:14;;;;;:25;;52159:7;;52141:14;:25;;52159:7;;52141:25;:::i;:::-;;;;;;;;52203:11;52183:16;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;52248:40:0;;;;;;52259:6;;52267:7;;52276:11;;52248:40;:::i;:::-;;;;;;;;51207:1093;;;;;:::o;33097:21::-;;;-1:-1:-1;;;;;33097:21:0;;:::o;35046:353::-;35269:14;;35285:13;;35300:20;;35322:10;;35334:12;;;35088:20;35348;;:11;:20;;;-1:-1:-1;;;;;;;;;;;35348:20:0;35370:16;;35046:353;;;;;;;:::o;34614:116::-;34689:3;;-1:-1:-1;;;;;34689:3:0;34675:10;:17;34667:26;;;;;;34708:3;:10;;-1:-1:-1;;;;;;34708:10:0;-1:-1:-1;;;;;34708:10:0;;;;;;;;;;34614:116::o;42676:229::-;42737:4;42799:22;;;:15;:22;;;;;;42777:19;;42737:4;;42777:44;;;:::i;:::-;42843:21;;;;:14;:21;;;;;;42757:64;;-1:-1:-1;;;;38665:19:0;42843:36;;42757:64;;42843:36;:::i;45631:123::-;-1:-1:-1;;;;;45726:16:0;45687:15;45726:16;;;:8;:16;;;;;;;45631:123::o;50174:856::-;50319:3;;50239:13;50344:4;;50319:3;50350:1;50319:33;;-1:-1:-1;;;50319:33:0;;50239:13;;50285:10;;-1:-1:-1;;;;;50319:3:0;;;;:16;;:33;;50285:10;;50344:4;;;50319:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50310:44;;;;;;50371:8;;-1:-1:-1;;;;;50371:8:0;:26;50398:9;:21;;50413:6;50398:21;;;50408:4;;-1:-1:-1;;;;;50408:4:0;50398:21;50421:8;;50431:6;50371:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50458:9;50455:264;;;50487:26;50496:6;50504:8;;50487;:26::i;:::-;50455:264;;;50552:35;50570:8;;50580:6;50552:17;:35::i;:::-;-1:-1:-1;;;;;50606:17:0;;;;;;:9;:17;;;;;;;;50629:8;;;50606:32;;;;;;;;;;;;;;;;50657:29;;;:21;:29;;;;;50687:8;;50657:39;;;;;;;;:46;;-1:-1:-1;;50657:46:0;;;;;;50455:264;50747:1;50735:8;;:13;;;;;;;:::i;:::-;;;;;;;;50783:6;50763:16;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;50823:4:0;;50804:32;;50815:6;;-1:-1:-1;;;;;50823:4:0;50829:6;50804:10;:32::i;:::-;50906:4;;50889:37;;50851:18;;-1:-1:-1;;;;;50906:4:0;;;;50889:37;;;;-1:-1:-1;;;;;;;;;;;50889:37:0;;;50912:6;;50851:18;;50889:37;:::i;:::-;;;;;;;;50946:38;50958:6;50966;50974:9;50946:38;;;;;;;;:::i;:::-;;;;;;;;51017:1;51006:8;;:12;;;;:::i;:::-;50999:19;50174:856;-1:-1:-1;;;;;50174:856:0:o;53518:1713::-;53597:22;53621:39;53662:24;53688:19;53709:24;53735:20;53757:30;53789:23;53813:29;53858:6;53882;:13;53897:1;53882:16;53879:140;;;-1:-1:-1;;;;;;53922:18:0;;;;;;:9;:18;;;;;:25;53879:140;;;-1:-1:-1;53990:13:0;;53879:140;54057:1;-1:-1:-1;;;;;54046:13:0;;;;;-1:-1:-1;;;54046:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54046:13:0;;54035:24;;54098:1;-1:-1:-1;;;;;54087:13:0;;;;;-1:-1:-1;;;54087:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54087:13:0;;54074:26;;54154:1;-1:-1:-1;;;;;54143:13:0;;;;;-1:-1:-1;;;54143:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54143:13:0;;54115:41;;54190:1;-1:-1:-1;;;;;54179:13:0;;;;;-1:-1:-1;;;54179:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54179:13:0;;54171:21;;54231:1;-1:-1:-1;;;;;54220:13:0;;;;;-1:-1:-1;;;54220:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54220:13:0;;54207:26;;54268:1;-1:-1:-1;;;;;54257:13:0;;;;;-1:-1:-1;;;54257:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54257:13:0;;54248:22;;54314:1;-1:-1:-1;;;;;54303:13:0;;;;;-1:-1:-1;;;54303:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54303:13:0;;54285:31;;54361:1;-1:-1:-1;;;;;54350:13:0;;;;;-1:-1:-1;;;54350:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54350:13:0;;54331:32;;54401:1;-1:-1:-1;;;;;54390:13:0;;;;;-1:-1:-1;;;54390:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;54390:13:0;-1:-1:-1;54378:25:0;-1:-1:-1;54420:8:0;;54443:777;54461:1;54459;:3;54443:777;;;54491:13;;54488:152;;-1:-1:-1;;;;;54537:18:0;;;;;;:9;:18;;;;;:21;;54556:1;;54537:21;;;;-1:-1:-1;;;54537:21:0;;;;;;;;;;;;;;;;;54531:27;;54488:152;;;54611:6;54618:1;54611:9;;;;;;-1:-1:-1;;;54611:9:0;;;;;;;;;;;;;;;54605:15;;54488:152;54672:3;54658:8;54667:1;54658:11;;;;;;-1:-1:-1;;;54658:11:0;;;;;;;;;;;;;;;;;;:17;54710:8;;:23;;-1:-1:-1;;;54710:23:0;;-1:-1:-1;;;;;54710:8:0;;;;:18;;:23;;54729:3;;54710:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54694:10;54705:1;54694:13;;;;;;-1:-1:-1;;;54694:13:0;;;;;;;;;;;;;;:39;;;;;54798:7;-1:-1:-1;;;;;54783:22:0;:6;:11;54790:3;54783:11;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;54783:11:0;-1:-1:-1;;;;;54783:22:0;;54752:25;54778:1;54752:28;;;;;;-1:-1:-1;;;54752:28:0;;;;;;;;;:53;;;:28;;;;;;;;;;;:53;54861:4;;54836:8;;:21;;-1:-1:-1;;;54836:21:0;;-1:-1:-1;;;;;54861:4:0;;;;54836:8;;;;:16;;:21;;54853:3;;54836:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;54836:29:0;;54824:6;54831:1;54824:9;;;;;;-1:-1:-1;;;54824:9:0;;;;;;;;;:41;;;:9;;;;;;;;;;:41;54900:18;;;;:13;:18;;;;;;;54884:13;;54900:18;;;;;54884:10;;54895:1;;54884:13;;;;-1:-1:-1;;;54884:13:0;;;;;;;;;:34;;;:13;;;;;;;;;;:34;54958:18;;;;:13;:18;;;;;;;54937;;54958;;;;;54937:15;;54953:1;;54937:18;;;;-1:-1:-1;;;54937:18:0;;;;;;;;;:39;;;:18;;;;;;;;;;:39;55044:21;;;;:16;:21;;;;;;;55017:24;55061:3;55017:19;:24::i;:::-;:48;;;;:::i;:::-;54995:16;55012:1;54995:19;;;;;;-1:-1:-1;;;54995:19:0;;;;;;;;;;;;;;:70;;;;;55099:8;:13;55108:3;55099:13;;;;;;;;;;;;55084:9;55094:1;55084:12;;;;;;-1:-1:-1;;;55084:12:0;;;;;;;;;;;;;;;;;;;:28;;;;55144:11;;;;:6;:11;;;;;;;-1:-1:-1;;;;;55144:22:0;;;:11;;:22;;:58;;;55195:7;-1:-1:-1;;;;;55170:32:0;:8;;;;;;;;;-1:-1:-1;;;;;55170:8:0;-1:-1:-1;;;;;55170:16:0;;55187:3;55170:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;55170:32:0;;55144:58;55131:5;55137:1;55131:8;;;;;;-1:-1:-1;;;55131:8:0;;;;;;;;;:73;;;:8;;;;;;;;;;;:73;54464:4;54467:1;54464:4;;:::i;:::-;;;54443:777;;;;53518:1713;;;;;;;;;;;;;:::o;34897:137::-;34973:12;;-1:-1:-1;;;;;34973:12:0;34959:10;:26;34951:35;;;;;;35001:6;:21;;-1:-1:-1;;;;;;35001:21:0;-1:-1:-1;;;;;35001:21:0;;;;;;;;;;34897:137::o;38342:56::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;51154:42::-;;;;;;;;;;;;;;;:::o;44606:29::-;;;;;;;:::i;34031:294::-;34099:13;;-1:-1:-1;;;;;34099:13:0;34085:10;:27;:44;;;;;34128:1;34116:9;;:13;34085:44;34077:53;;;;;;34157:9;;;34145;34181:13;;;;34228;;:34;;34157:9;;34145;-1:-1:-1;;;;;34228:13:0;;;;34157:9;;34228:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34209:53;;;34285:7;34277:36;;;;-1:-1:-1;;;34277:36:0;;;;;;;:::i;:::-;34031:294;;:::o;42062:46::-;;;;;;;;;;;;;:::o;43304:233::-;43376:3;;;;43405:4;43376:42;;-1:-1:-1;;;43376:42:0;;-1:-1:-1;;;;;43376:3:0;;;;:16;;:42;;43393:10;;43405:4;;;43411:6;;43376:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43368:51;;;;;;43434:31;43458:6;43434:23;:31::i;:::-;43485:40;43506:10;43518:6;43485:40;;;;;;;:::i;:::-;;;;;;;;43304:233;:::o;45766:178::-;45834:4;45855:18;45895:37;45913:3;45918:6;45926:5;45895:17;:37::i;:::-;45888:44;45766:178;-1:-1:-1;;;;45766:178:0:o;43167:26::-;;;;:::o;47073:132::-;47131:16;47142:4;47131:10;:16::i;:::-;47128:66;;;47167:11;47173:4;47167:5;:11::i;:::-;47073:132;:::o;45956:304::-;46044:4;46069:15;46080:3;46069:10;:15::i;:::-;46065:184;;;46112:38;46131:3;46136:6;46144:5;46112:18;:38::i;:::-;46105:45;;;;46065:184;46196:37;46214:3;46219:6;46227:5;46196:17;:37::i;41482:386::-;41601:5;;-1:-1:-1;;;;;41601:5:0;41579:10;:28;41576:281;;;41657:1;41636:20;;:11;:20;;-1:-1:-1;;;;;;;;;;;41636:20:0;41628:31;;;;;;41726:20;;;:11;:20;;-1:-1:-1;;;;;;;;;;;41726:20:0;41704:19;-1:-1:-1;;;41704:5:0;:19;:::i;:::-;:42;;;;:::i;:::-;38793:1;41678:22;;;;:11;:22;;;:68;;:22;;;:68;;;;;:::i;:::-;;;;-1:-1:-1;;41770:15:0;;;;;;41779:5;;41770:15;:::i;:::-;;;;;;;;41576:281;;;41824:17;;-1:-1:-1;;;41824:17:0;;;;;;;:::i;52931:575::-;52986:14;53036:15;;;:6;:15;;;;;;53003:10;;-1:-1:-1;;;;;53036:15:0;:25;;:52;;;;-1:-1:-1;53066:22:0;;;;:13;:22;;;;;;;;53065:23;53036:52;:96;;;;-1:-1:-1;53108:17:0;;;;:8;:17;;;;;;53127:5;;53092:33;;:15;:33;:::i;:::-;:40;;53036:96;53028:106;;;;;;53163:8;;:27;;-1:-1:-1;;;53163:27:0;;53149:11;;-1:-1:-1;;;;;53163:8:0;;:18;;:27;;53182:7;;53163:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53205:17;;;;:8;:17;;;;;53225:15;53205:35;;53149:41;-1:-1:-1;53255:39:0;38755:1;53278:6;53149:41;53255:12;:39::i;:::-;53335:1;53309:15;;;:6;:15;;;;;:28;;-1:-1:-1;;;;;;53309:28:0;;;53352:34;53316:7;53379:6;53352:17;:34::i;:::-;53403:8;;;53425:4;53403:44;;-1:-1:-1;;;53403:44:0;;-1:-1:-1;;;;;53403:8:0;;;;:21;;:44;;53425:4;;;53431:6;;53439:7;;53403:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53467:27;53478:6;53486:7;53467:27;;;;;;;:::i;:::-;;;;;;;;52931:575;;;:::o;33448:18::-;;;-1:-1:-1;;;;;33448:18:0;;:::o;35419:447::-;35474:16;35492;35510:18;35530:19;35551:17;35570;35611:18;35621:7;35611:9;:18::i;:::-;-1:-1:-1;;;;;35631:24:0;;:15;:24;;;:15;;:24;;;:15;:24;;;;35689:17;:26;;;;;;35631:24;;35657:29;;35631:24;35657:11;:29::i;:::-;:58;;;;:::i;:::-;-1:-1:-1;;;;;35749:26:0;;:17;:26;;;:17;;:26;:17;:26;;;35717:29;38755:1;35767:7;35717:11;:29::i;:::-;:58;;;;:::i;:::-;35805:1;;:9;;35807:7;35805:9;:::i;:::-;35777:3;;;;;;;;;-1:-1:-1;;;;;35777:3:0;-1:-1:-1;;;;;35777:13:0;;35791:7;35799:4;;;;;;;;-1:-1:-1;;;;;35799:4:0;35777:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;35844:1;;35846:7;35844:9;;;;:::i;:::-;35816:3;;;;;;;;;-1:-1:-1;;;;;35816:3:0;-1:-1:-1;;;;;35816:13:0;;35830:7;35838:4;;;;;;;;-1:-1:-1;;;;;35838:4:0;35816:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;35603:251;;;;;;;;;;;;35419:447;;;;;;;:::o;41882:44::-;;;;;;;;;;;;;:::o;33409:28::-;;;-1:-1:-1;;;;;33409:28:0;;:::o;33515:21::-;;;;:::o;40138:235::-;40207:4;40267:13;;;:7;:13;;;;;;;;-1:-1:-1;;;;;40267:22:0;;;;;;;;;;40247:17;;;:11;:17;;;;;;40207:4;;40247:42;;;:::i;:::-;40311:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;40311:21:0;;;;;;;;;;40227:62;;-1:-1:-1;;;;38665:19:0;40311:36;;40227:62;;40311:36;:::i;:::-;:50;;;;:::i;43971:585::-;44082:11;;44041:15;;44097:5;;44076:17;;44041:15;44076:17;:::i;:::-;44075:27;:55;;;;-1:-1:-1;38755:1:0;44129;44106:20;:11;:20;;;;:24;;44075:55;:78;;;;;44152:1;44135:14;;:18;44075:78;44071:474;;;44173:11;:17;;;44294:12;;;38755:1;44209:23;44270:20;;;:11;:20;;;;;44253:16;;:37;;44270:20;44253:37;:::i;:::-;44235:14;;:56;;;;:::i;:::-;:71;;;;:::i;:::-;44209:97;;44343:18;44325:14;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;38755:1:0;44439:20;;:11;:20;;;;44404:32;-1:-1:-1;;;44404:18:0;:32;:::i;:::-;:55;;;;:::i;:::-;38755:1;44380:20;;;;:11;:20;;;:79;;:20;;;:79;;;;;:::i;:::-;;;;-1:-1:-1;;44483:46:0;;;;;;44510:18;;44483:46;:::i;:::-;;;;;;;;44071:474;43971:585;:::o;48539:125::-;-1:-1:-1;;;;;48633:14:0;;;48605:4;48633:14;;;:9;:14;;;;;;;;:19;;;;;;;;;;;;;48539:125::o;56003:685::-;56110:13;56190:15;;;:6;:15;;;;;;56156:10;;-1:-1:-1;;;;;56190:15:0;:25;;:52;;;;-1:-1:-1;56220:22:0;;;;:13;:22;;;;;;;;56219:23;56190:52;:79;;;;-1:-1:-1;56247:22:0;;;;:13;:22;;;;;;;;56246:23;56190:79;56181:90;;;;;;56296:6;;:51;;-1:-1:-1;;;56296:51:0;;56286:7;;-1:-1:-1;;;;;56296:6:0;;:24;;56328:9;;56296:51;;:6;;;;:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56362:16;;;;:12;:16;;;;;;;;:26;;;56403:16;;;:7;:16;;;;;:36;;-1:-1:-1;;;;;;56403:36:0;-1:-1:-1;;;;;56403:36:0;;;;;56454:3;:12;;;;;:19;;56362:16;;-1:-1:-1;56454:19:0;;:12;;:19;;;;:::i;:::-;-1:-1:-1;56488:22:0;;;;:13;:22;;;;;;;;:29;;-1:-1:-1;;56488:29:0;56513:4;56488:29;;;56597:16;:25;;;;;;56537:115;;56551:6;;56502:7;;56568:28;56502:7;56568:19;:28::i;:::-;:54;;;;:::i;:::-;56624:17;56643:4;56649:2;56537:115;;;;;;;;;;;:::i;:::-;;;;;;;;56674:2;56003:685;-1:-1:-1;;;;;56003:685:0:o;56887:1490::-;57048:14;57148:22;;;:12;:22;;;;;;57216:6;;57048:14;;;;-1:-1:-1;;;;;57216:6:0;57194:10;:29;57185:40;;;;;;57246:6;57242:270;57258:15;57254:1;:19;57242:270;;;57311:13;57325:1;57311:16;;;;;;-1:-1:-1;;;57311:16:0;;;;;;;;;;;;;;;57299:28;;57363:1;57349:10;57360:1;57349:13;;;;;;-1:-1:-1;;;57349:13:0;;;;;;;;;;;;;;;:15;57346:151;;;57388:21;57400:9;57388:21;;:::i;:::-;;;57346:151;;;57456:21;57468:9;57456:21;;:::i;:::-;;;57346:151;57275:4;57278:1;57275:4;;:::i;:::-;;;57242:270;;;;57532:15;57531:16;:37;;;;;57560:8;57551;:17;57531:37;57528:793;;;57638:22;;;;:13;:22;;;;;;;;57634:595;;57684:22;;;;:13;:22;;;;;;;;:29;;-1:-1:-1;;57684:29:0;57709:4;57684:29;;;57750:16;:25;;;;;;57801:8;;57798:292;;57866:1;57841:15;;;:6;:15;;;;;;-1:-1:-1;;;;;57841:15:0;57837:230;;57901:31;57925:6;57901:23;:31::i;:::-;57837:230;;;57995:17;58013:15;;;:6;57995:17;58013:15;;;57995:17;58013:15;;;;-1:-1:-1;;;;;58013:15:0;57995:34;;:17;:34;;;;;:44;;58033:6;;57995:17;:44;;58033:6;;57995:44;:::i;:::-;;;;-1:-1:-1;;57837:230:0;58117:92;58133:6;:15;58140:7;58133:15;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58133:15:0;58150:7;58159:6;58167:7;:16;58175:7;58167:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;58167:16:0;58185:3;:12;58189:7;58185:12;;;;;;;;;;;58199:8;58117:92;;;;;;;;;;;:::i;:::-;;;;;;;;57634:595;;57528:793;;;58272:33;58288:7;58296:8;58272:33;;;;;;;:::i;:::-;;;;;;;;57528:793;58360:5;58335:22;;;:13;:22;;;;;:30;;-1:-1:-1;;58335:30:0;;;-1:-1:-1;;;;;;;;56887:1490:0:o;41937:31::-;;;;:::o;52312:38::-;;;;;;;;;;;;-1:-1:-1;;;;;52312:38:0;;:::o;33547:18::-;;;;:::o;55243:431::-;55418:8;;55337:6;;;;-1:-1:-1;;;;;55418:8:0;55396:10;:31;:75;;;;-1:-1:-1;55447:17:0;;;;:8;:17;;;;;;55466:5;;55431:33;;:15;:33;:::i;:::-;:40;;55396:75;55387:86;;;;;;55488:17;;;;:8;:17;;;;;;;55508:15;55488:35;;55568:8;;:27;;-1:-1:-1;;;55568:27:0;;55538:59;;55497:7;;-1:-1:-1;;;;;55568:8:0;;;;:18;;:27;;55497:7;;55568:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55538:20;:59::i;:::-;55612:23;55621:4;55627:7;55612:8;:23::i;36238:763::-;-1:-1:-1;;;;;36309:20:0;;36305:80;;-1:-1:-1;36359:10:0;36305:80;36421:1;36409:9;:13;:40;;;;-1:-1:-1;36426:10:0;36440:9;36426:23;36409:40;36401:49;;;;;;36549:7;;36478:9;;36465:10;;36560:9;;36531:25;;:15;:25;:::i;:::-;:38;36528:68;;36590:4;36580:9;:5;36588:1;36580:9;:::i;:::-;:14;;;;:::i;:::-;36571:23;;36528:68;36620:6;36610;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;36643:8:0;;-1:-1:-1;36654:14:0;36662:6;36654:5;:14;:::i;:::-;36643:25;;36683:17;36688:6;36696:3;36683:4;:17::i;:::-;36715;36799:12;;36776:19;;36757:16;;36742:12;;:31;;;;:::i;:::-;:53;;;;:::i;:::-;36735:61;;:3;:61;:::i;:::-;:76;;;;:::i;:::-;36715:96;-1:-1:-1;36839:18:0;36715:96;36839:3;:18;:::i;:::-;36826:9;;:31;;;;;;;:::i;:::-;;;;;;;;36889:12;36872:13;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;36921:25:0;;;;;;36934:6;;36942:3;;36921:25;:::i;:::-;;;;;;;;36961:28;:26;:28::i;:::-;36238:763;;;;;:::o;34337:265::-;34405:3;;-1:-1:-1;;;;;34405:3:0;34391:10;:17;:31;;;;;34421:1;34412:6;;:10;34391:31;34383:40;;;;;;34450:6;;;34438:9;34471:10;;;;34515:3;;:24;;34450:6;;34438:9;-1:-1:-1;;;;;34515:3:0;;;;34450:6;;34515:24;;;:::i;41169:261::-;41229:8;41272:20;;:11;:20;;-1:-1:-1;;;;;;;;;;;41272:20:0;41240:9;;41264:31;;;;;;41354:20;;;:11;:20;;-1:-1:-1;;;;;;;;;;;41354:20:0;41334:17;-1:-1:-1;;;41334:3:0;:17;:::i;:::-;:40;;;;:::i;:::-;41310:20;;;;:11;:20;;;:64;;:20;;;:64;;;;;:::i;:::-;;;;-1:-1:-1;;41394:24:0;;;;;;41414:3;;41394:24;:::i;47726:801::-;-1:-1:-1;;;;;47839:15:0;;;;;;:8;:15;;;;;;47828:26;;;47819:37;;;;;;-1:-1:-1;;;;;47902:15:0;;;;;;:8;:15;;;;;:26;;47921:7;;47902:15;:26;;47921:7;;47902:26;:::i;:::-;;;;-1:-1:-1;;;;;;;47943:13:0;;;;;;:8;:13;;;;;:24;;47960:7;;47943:13;:24;;47960:7;;47943:24;:::i;:::-;;;;-1:-1:-1;47988:17:0;;-1:-1:-1;47999:5:0;47988:10;:17::i;:::-;47984:327;;48036:4;;-1:-1:-1;;;;;48029:11:0;;;48036:4;;48029:11;48026:163;;48074:3;;;;48098:4;48074:38;;-1:-1:-1;;;48074:38:0;;-1:-1:-1;;;;;48074:3:0;;;;:16;;:38;;48091:5;;48098:4;;;48104:7;;48074:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48065:49;;;;;;48137:32;48161:7;48137:23;:32::i;:::-;48207:37;38719:1;48229:5;48236:7;48207:12;:37::i;:::-;47984:327;;;48283:12;48289:5;48283;:12::i;:::-;48332:15;48343:3;48332:10;:15::i;:::-;48327:138;;48368:32;38719:1;48387:3;48392:7;48368:9;:32::i;:::-;48327:138;;;48439:10;48445:3;48439:5;:10::i;:::-;48502:3;-1:-1:-1;;;;;48486:29:0;48495:5;-1:-1:-1;;;;;48486:29:0;;48507:7;48486:29;;;;;;:::i;:::-;;;;;;;;47726:801;;;:::o;40645:463::-;40713:13;40729:26;40741:4;40747:7;40729:11;:26::i;:::-;40795:17;;;;:11;:17;;;;;;;;;40770:7;:13;;;;;-1:-1:-1;;;;;40770:22:0;;;;;;;;;;;:42;;;;40827:14;;;:8;:14;;;;;:23;;;;;;;;:35;;40713:42;;-1:-1:-1;40713:42:0;;40827:23;;40795:17;40827:35;;40713:42;;40827:35;:::i;:::-;;;;-1:-1:-1;;40880:15:0;40877:220;;40926:25;40943:7;40926:16;:25::i;:::-;41000:22;;-1:-1:-1;;;;;40970:27:0;;41000:22;40970:27;;;:18;41000:22;40970:27;;;41000:22;40970:27;;;:52;;;;41041:19;:28;;;;;:40;;40915:36;;-1:-1:-1;40915:36:0;;41041:28;;41000:22;41041:40;;40915:36;;41041:40;:::i;:::-;;;;-1:-1:-1;;40645:463:0;;;:::o;43549:342::-;43621:19;;43617:263;;43688:6;43666:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;43617:263:0;;-1:-1:-1;43617:263:0;;43804:19;;-1:-1:-1;;;43767:18:0;;43758:6;:27;;;;:::i;:::-;43756:45;;;;:::i;:::-;:67;;;;:::i;:::-;43733:19;;:90;;;;;;;:::i;:::-;;;;-1:-1:-1;;43863:1:0;43842:18;:22;43549:342;:::o;39919:207::-;40005:21;40012:4;40018:7;40005:6;:21::i;:::-;40041:17;;;;:11;:17;;;;;:27;;40062:6;;40041:17;:27;;40062:6;;40041:27;:::i;:::-;;;;-1:-1:-1;;40083:12:0;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;40083:21:0;;;;;;;;;:31;;40108:6;;40083:12;:31;;40108:6;;40083:31;:::i;52461:399::-;52532:15;;;;:6;:15;;;;;;;;:21;;-1:-1:-1;;;;;;52532:21:0;-1:-1:-1;;;;;52532:21:0;;;;;;;;52575:26;;:21;:26;;;;;:35;;;;;;;;;;;52570:166;;-1:-1:-1;;;;;52631:14:0;;;;;;:9;:14;;;;;;;;:28;;;;;;;;;;;;;;;;;;52678:26;;;:21;:26;;;;;:35;;;;;;;;:42;;-1:-1:-1;;52678:42:0;;;;;;52570:166;52777:8;;:27;;-1:-1:-1;;;52777:27:0;;52752:54;;38755:1;;52772:3;;-1:-1:-1;;;;;52777:8:0;;:18;;:27;;52796:7;;52777:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52752:9;:54::i;:::-;52826:22;52835:3;52840:7;52826:22;;;;;;;:::i;42119:265::-;42198:20;;;;:13;:20;;;;;;;;42194:179;;42238:21;42253:5;42238:14;:21::i;:::-;42301:6;42278:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;42326:21:0;;;;:14;:21;;;;;:31;;42351:6;;42326:21;:31;;42351:6;;42326:31;:::i;:::-;;;;-1:-1:-1;;42119:265:0;;:::o;46345:244::-;46435:4;46456:35;46467:10;46479:3;46484:6;46456:10;:35::i;:::-;46532:3;-1:-1:-1;;;;;46511:40:0;46520:10;-1:-1:-1;;;;;46511:40:0;-1:-1:-1;;;;;;;;;;;46537:6:0;46545:5;46511:40;;;;;;;:::i;47217:497::-;-1:-1:-1;;;;;47284:21:0;;47269:12;47284:21;;;:15;;:21;:15;:21;;;47324:11;;47320:383;;47356:36;38719:1;47378:4;47384:7;47356:12;:36::i;:::-;-1:-1:-1;;;;;47425:23:0;;47411:11;47425:23;;;:17;;:23;;;:17;:23;;;;47467:27;;;;47524:20;;;:11;:20;;-1:-1:-1;;;;;;;;;;;47524:20:0;47515:35;;;;;;47616:20;;;:11;:20;;-1:-1:-1;;;;;;;;;;;47616:20:0;47593;-1:-1:-1;;;47593:6:0;:20;:::i;:::-;:43;;;;:::i;:::-;47569:20;;;;:11;:20;;;:67;;:20;;;:67;;;;;:::i;:::-;;;;-1:-1:-1;;47660:27:0;;;;;;47680:6;;47660:27;:::i;46674:387::-;46765:4;46786:35;46797:10;46809:3;46814:6;46786:10;:35::i;:::-;46914:49;;-1:-1:-1;;;46914:49:0;;46895:3;;-1:-1:-1;;;;;46914:22:0;;;;;:49;;46937:10;;46949:6;;46957:5;;46914:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47004:3;-1:-1:-1;;;;;46983:40:0;46992:10;-1:-1:-1;;;;;46983:40:0;-1:-1:-1;;;;;;;;;;;47009:6:0;47017:5;46983:40;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;47045:4:0;;46674:387;-1:-1:-1;;;;46674:387:0:o;42396:268::-;42478:20;;;;:13;:20;;;;;;;;42474:179;;42518:21;42533:5;42518:14;:21::i;:::-;42581:6;42558:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;42606:21:0;;;;:14;:21;;;;;:31;;42631:6;;42606:21;:31;;42631:6;;42606:31;:::i;45242:266::-;-1:-1:-1;;;;;45310:18:0;;;;;;:8;:18;;;;;:28;;45332:6;;45310:18;:28;;45332:6;;45310:28;:::i;:::-;;;;;;;;45369:6;45353:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;45394:22:0;;-1:-1:-1;45405:10:0;45394;:22::i;:::-;45390:64;;45418:36;38719:1;45437:8;45447:6;45418:9;:36::i;:::-;45479:8;-1:-1:-1;;;;;45474:22:0;;45489:6;45474:22;;;;;;:::i;:::-;;;;;;;;45242:266;;:::o;39703:204::-;39786:21;39793:4;39799:7;39786:6;:21::i;:::-;39822:17;;;;:11;:17;;;;;:27;;39843:6;;39822:17;:27;;39843:6;;39822:27;:::i;:::-;;;;-1:-1:-1;;39864:12:0;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;39864:21:0;;;;;;;;;:31;;39889:6;;39864:12;:31;;39889:6;;39864:31;:::i;42925:230::-;42984:13;43000:26;43020:5;43000:19;:26::i;:::-;43066:19;;43041:22;;;;:15;:22;;;;;;;;:44;;;;43100:16;:23;;;;;:35;;42984:42;;-1:-1:-1;42984:42:0;;43100:23;;43041:22;43100:35;;42984:42;;43100:35;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:409:1;;-1:-1:-1;;;;;106:6:1;103:30;100:2;;;136:18;;:::i;:::-;174:58;220:2;197:17;;-1:-1:-1;;193:31:1;226:4;189:42;174:58;:::i;:::-;165:67;;255:6;248:5;241:21;295:3;286:6;281:3;277:16;274:25;271:2;;;312:1;309;302:12;271:2;361:6;356:3;349:4;342:5;338:16;325:43;415:1;408:4;399:6;392:5;388:18;384:29;377:40;90:333;;;;;:::o;428:704::-;;541:3;534:4;526:6;522:17;518:27;508:2;;563:5;556;549:20;508:2;603:6;590:20;629:4;653:64;668:48;713:2;668:48;:::i;:::-;653:64;:::i;:::-;751:15;;;782:12;;;;814:15;;;860:11;;;848:24;;844:33;;841:42;-1:-1:-1;838:2:1;;;900:5;893;886:20;838:2;926:5;940:163;954:2;951:1;948:9;940:163;;;1011:17;;999:30;;1049:12;;;;1081;;;;972:1;965:9;940:163;;;-1:-1:-1;1121:5:1;;498:634;-1:-1:-1;;;;;;;498:634:1:o;1137:259::-;;1249:2;1237:9;1228:7;1224:23;1220:32;1217:2;;;1270:6;1262;1255:22;1217:2;1314:9;1301:23;1333:33;1360:5;1333:33;:::i;1401:263::-;;1524:2;1512:9;1503:7;1499:23;1495:32;1492:2;;;1545:6;1537;1530:22;1492:2;1582:9;1576:16;1601:33;1628:5;1601:33;:::i;1669:402::-;;;1798:2;1786:9;1777:7;1773:23;1769:32;1766:2;;;1819:6;1811;1804:22;1766:2;1863:9;1850:23;1882:33;1909:5;1882:33;:::i;:::-;1934:5;-1:-1:-1;1991:2:1;1976:18;;1963:32;2004:35;1963:32;2004:35;:::i;:::-;2058:7;2048:17;;;1756:315;;;;;:::o;2076:470::-;;;;2222:2;2210:9;2201:7;2197:23;2193:32;2190:2;;;2243:6;2235;2228:22;2190:2;2287:9;2274:23;2306:33;2333:5;2306:33;:::i;:::-;2358:5;-1:-1:-1;2415:2:1;2400:18;;2387:32;2428:35;2387:32;2428:35;:::i;:::-;2180:366;;2482:7;;-1:-1:-1;;;2536:2:1;2521:18;;;;2508:32;;2180:366::o;2551:511::-;;;2705:2;2693:9;2684:7;2680:23;2676:32;2673:2;;;2726:6;2718;2711:22;2673:2;2770:9;2757:23;2789:33;2816:5;2789:33;:::i;:::-;2841:5;-1:-1:-1;2897:2:1;2882:18;;2869:32;-1:-1:-1;;;;;2913:30:1;;2910:2;;;2961:6;2953;2946:22;2910:2;2989:67;3048:7;3039:6;3028:9;3024:22;2989:67;:::i;:::-;2979:77;;;2663:399;;;;;:::o;3067:327::-;;;3196:2;3184:9;3175:7;3171:23;3167:32;3164:2;;;3217:6;3209;3202:22;3164:2;3261:9;3248:23;3280:33;3307:5;3280:33;:::i;:::-;3332:5;3384:2;3369:18;;;;3356:32;;-1:-1:-1;;;3154:240:1:o;3399:846::-;;;;;3564:2;3552:9;3543:7;3539:23;3535:32;3532:2;;;3585:6;3577;3570:22;3532:2;3629:9;3616:23;3648:33;3675:5;3648:33;:::i;:::-;3700:5;-1:-1:-1;3752:2:1;3737:18;;3724:32;;-1:-1:-1;3807:2:1;3792:18;;3779:32;-1:-1:-1;;;;;3860:14:1;;;3857:2;;;3892:6;3884;3877:22;3857:2;3935:6;3924:9;3920:22;3910:32;;3980:7;3973:4;3969:2;3965:13;3961:27;3951:2;;4007:6;3999;3992:22;3951:2;4052;4039:16;4078:2;4070:6;4067:14;4064:2;;;4099:6;4091;4084:22;4064:2;4149:7;4144:2;4135:6;4131:2;4127:15;4123:24;4120:37;4117:2;;;4175:6;4167;4160:22;4117:2;3522:723;;;;-1:-1:-1;;4211:2:1;4203:11;;-1:-1:-1;;;3522:723:1:o;4250:686::-;;;;4405:2;4393:9;4384:7;4380:23;4376:32;4373:2;;;4426:6;4418;4411:22;4373:2;4470:9;4457:23;4489:33;4516:5;4489:33;:::i;:::-;4541:5;-1:-1:-1;4593:2:1;4578:18;;4565:32;;-1:-1:-1;4648:2:1;4633:18;;4620:32;-1:-1:-1;;;;;4664:30:1;;4661:2;;;4712:6;4704;4697:22;4661:2;4740:22;;4793:4;4785:13;;4781:27;-1:-1:-1;4771:2:1;;4827:6;4819;4812:22;4771:2;4855:75;4922:7;4917:2;4904:16;4899:2;4895;4891:11;4855:75;:::i;:::-;4845:85;;;4363:573;;;;;:::o;4941:257::-;;5061:2;5049:9;5040:7;5036:23;5032:32;5029:2;;;5082:6;5074;5067:22;5029:2;5119:9;5113:16;5138:30;5162:5;5138:30;:::i;5203:190::-;;5315:2;5303:9;5294:7;5290:23;5286:32;5283:2;;;5336:6;5328;5321:22;5283:2;-1:-1:-1;5364:23:1;;5273:120;-1:-1:-1;5273:120:1:o;5398:194::-;;5521:2;5509:9;5500:7;5496:23;5492:32;5489:2;;;5542:6;5534;5527:22;5489:2;-1:-1:-1;5570:16:1;;5479:113;-1:-1:-1;5479:113:1:o;5597:327::-;;;5726:2;5714:9;5705:7;5701:23;5697:32;5694:2;;;5747:6;5739;5732:22;5694:2;5788:9;5775:23;5765:33;;5848:2;5837:9;5833:18;5820:32;5861:33;5888:5;5861:33;:::i;5929:321::-;;;6055:2;6043:9;6034:7;6030:23;6026:32;6023:2;;;6076:6;6068;6061:22;6023:2;6117:9;6104:23;6094:33;;6177:2;6166:9;6162:18;6149:32;6190:30;6214:5;6190:30;:::i;6255:1483::-;;;;;;6481:3;6469:9;6460:7;6456:23;6452:33;6449:2;;;6503:6;6495;6488:22;6449:2;6544:9;6531:23;6521:33;;6573:2;6625;6614:9;6610:18;6597:32;6638:30;6662:5;6638:30;:::i;:::-;6687:5;-1:-1:-1;6739:2:1;6724:18;;6711:32;;-1:-1:-1;6794:2:1;6779:18;;6766:32;-1:-1:-1;;;;;6847:14:1;;;6844:2;;;6879:6;6871;6864:22;6844:2;6907:67;6966:7;6957:6;6946:9;6942:22;6907:67;:::i;:::-;6897:77;;7027:3;7016:9;7012:19;6999:33;6983:49;;7057:2;7047:8;7044:16;7041:2;;;7078:6;7070;7063:22;7041:2;-1:-1:-1;7106:24:1;;7161:4;7153:13;;7149:27;-1:-1:-1;7139:2:1;;7195:6;7187;7180:22;7139:2;7236;7223:16;7259:64;7274:48;7319:2;7274:48;:::i;7259:64::-;7357:15;;;7388:12;;;;7420:11;;;7458;;;7450:20;;7446:29;;7443:42;-1:-1:-1;7440:2:1;;;7503:6;7495;7488:22;7440:2;7530:6;7521:15;;7545:163;7559:2;7556:1;7553:9;7545:163;;;7616:17;;7604:30;;7577:1;7570:9;;;;;7654:12;;;;7686;;7545:163;;;7549:3;7727:5;7717:15;;;;;;;6439:1299;;;;;;;;:::o;7743:687::-;;;;7899:2;7887:9;7878:7;7874:23;7870:32;7867:2;;;7920:6;7912;7905:22;7867:2;7961:9;7948:23;7938:33;;8022:2;8011:9;8007:18;7994:32;-1:-1:-1;;;;;8041:6:1;8038:30;8035:2;;;8086:6;8078;8071:22;8035:2;8114:22;;8167:4;8159:13;;8155:27;-1:-1:-1;8145:2:1;;8201:6;8193;8186:22;8145:2;8229:75;8296:7;8291:2;8278:16;8273:2;8269;8265:11;8229:75;:::i;:::-;8219:85;;;8354:2;8343:9;8339:18;8326:32;8367:33;8394:5;8367:33;:::i;:::-;8419:5;8409:15;;;7857:573;;;;;:::o;8435:456::-;;8529:5;8523:12;8556:6;8551:3;8544:19;8582:4;8611:2;8606:3;8602:12;8595:19;;8648:2;8641:5;8637:14;8669:3;8681:185;8695:6;8692:1;8689:13;8681:185;;;8770:13;;8763:21;8756:29;8744:42;;8806:12;;;;8841:15;;;;8717:1;8710:9;8681:185;;;-1:-1:-1;8882:3:1;;8499:392;-1:-1:-1;;;;;8499:392:1:o;8896:443::-;;8993:5;8987:12;9020:6;9015:3;9008:19;9046:4;9075:2;9070:3;9066:12;9059:19;;9112:2;9105:5;9101:14;9133:3;9145:169;9159:6;9156:1;9153:13;9145:169;;;9220:13;;9208:26;;9254:12;;;;9289:15;;;;9181:1;9174:9;9145:169;;9344:477;;9425:5;9419:12;9452:6;9447:3;9440:19;9477:3;9489:162;9503:6;9500:1;9497:13;9489:162;;;9565:4;9621:13;;;9617:22;;9611:29;9593:11;;;9589:20;;9582:59;9518:12;9489:162;;;9669:6;9666:1;9663:13;9660:2;;;9735:3;9728:4;9719:6;9714:3;9710:16;9706:27;9699:40;9660:2;-1:-1:-1;9803:2:1;9782:15;-1:-1:-1;;9778:29:1;9769:39;;;;9810:4;9765:50;;9395:426;-1:-1:-1;;9395:426:1:o;9826:205::-;10026:3;10017:14::o;10036:203::-;-1:-1:-1;;;;;10200:32:1;;;;10182:51;;10170:2;10155:18;;10137:102::o;10244:383::-;-1:-1:-1;;;;;10510:15:1;;;10492:34;;10562:15;;;;10557:2;10542:18;;10535:43;10609:2;10594:18;;10587:34;;;;10442:2;10427:18;;10409:218::o;10632:282::-;-1:-1:-1;;;;;10832:32:1;;;;10814:51;;10896:2;10881:18;;10874:34;10802:2;10787:18;;10769:145::o;10919:304::-;-1:-1:-1;;;;;11149:15:1;;;11131:34;;11201:15;;11196:2;11181:18;;11174:43;11081:2;11066:18;;11048:175::o;11887:355::-;-1:-1:-1;;;;;12101:32:1;;;;12083:51;;12165:2;12150:18;;12143:34;;;;12220:14;12213:22;12208:2;12193:18;;12186:50;12071:2;12056:18;;12038:204::o;12247:387::-;;12479:1;12475;12470:3;12466:11;12462:19;12454:6;12450:32;12439:9;12432:51;12519:6;12514:2;12503:9;12499:18;12492:34;12562:2;12557;12546:9;12542:18;12535:30;12582:46;12624:2;12613:9;12609:18;12601:6;12582:46;:::i;12639:345::-;-1:-1:-1;;;;;12859:32:1;;;;12841:51;;12923:2;12908:18;;12901:34;;;;12966:2;12951:18;;12944:34;12829:2;12814:18;;12796:188::o;12989:636::-;-1:-1:-1;;;;;13316:15:1;;;13298:34;;13363:2;13348:18;;13341:34;;;13406:2;13391:18;;13384:34;;;13454:15;;13449:2;13434:18;;13427:43;13507:3;13501;13486:19;;13479:32;;;12989:636;;13528:47;;13555:19;;13547:6;13528:47;:::i;:::-;13520:55;;13612:6;13606:3;13595:9;13591:19;13584:35;13250:375;;;;;;;;;:::o;13630:1625::-;-1:-1:-1;;;;;13954:15:1;;;13936:34;;13989:2;14007:18;;;14000:34;;;14065:2;14050:18;;14043:34;;;14113:15;;;14108:2;14093:18;;14086:43;14166:3;14160;14145:19;;14138:32;14220:13;;13630:1625;;;;14294:1;14279:17;;13925:1;14351:18;;;;14378:2;;14432:4;14424:6;14420:17;14410:27;;14378:2;14485;14477:6;14474:14;14454:18;14451:38;14448:2;;;-1:-1:-1;;;14512:34:1;;14569:4;14566:1;14559:15;14600:4;14519;14587:18;14448:2;14635:78;14706:6;14700:3;14689:9;14685:19;14635:78;:::i;:::-;14729:18;14756:100;;;;14870:1;14865:320;;;;14722:463;;14756:100;-1:-1:-1;;14789:24:1;;14777:37;;14834:12;;;;-1:-1:-1;14756:100:1;;14865:320;14901:39;14933:6;14901:39;:::i;:::-;14962:4;14979:165;14993:6;14990:1;14987:13;14979:165;;;15071:14;;15058:11;;;15051:35;15114:16;;;;15008:10;;14979:165;;;15164:11;;;-1:-1:-1;;14722:463:1;-1:-1:-1;;;;;15236:3:1;15221:19;;;;15214:35;;;;15202:3;13888:1367;-1:-1:-1;;;;;;;;13888:1367:1:o;15260:1929::-;;16025:3;16055:2;16044:9;16037:21;16081:62;16139:2;16128:9;16124:18;16116:6;16081:62;:::i;:::-;16067:76;;16191:9;16183:6;16179:22;16174:2;16163:9;16159:18;16152:50;16225:47;16265:6;16257;16225:47;:::i;:::-;16211:61;;16320:9;16312:6;16308:22;16303:2;16292:9;16288:18;16281:50;16354;16397:6;16389;16354:50;:::i;:::-;16340:64;;16452:9;16444:6;16440:22;16435:2;16424:9;16420:18;16413:50;16486:47;16526:6;16518;16486:47;:::i;:::-;16472:61;;16582:9;16574:6;16570:22;16564:3;16553:9;16549:19;16542:51;16616:47;16656:6;16648;16616:47;:::i;:::-;16602:61;;16712:9;16704:6;16700:22;16694:3;16683:9;16679:19;16672:51;16746:47;16786:6;16778;16746:47;:::i;:::-;16732:61;;16842:9;16834:6;16830:22;16824:3;16813:9;16809:19;16802:51;16876:50;16919:6;16911;16876:50;:::i;:::-;16862:64;;16975:9;16967:6;16963:22;16957:3;16946:9;16942:19;16935:51;17009:50;17052:6;17044;17009:50;:::i;:::-;16995:64;;17108:9;17100:6;17096:22;17090:3;17079:9;17075:19;17068:51;17136:47;17176:6;17168;17136:47;:::i;:::-;17128:55;16005:1184;-1:-1:-1;;;;;;;;;;;;16005:1184:1:o;17194:187::-;17359:14;;17352:22;17334:41;;17322:2;17307:18;;17289:92::o;17386:202::-;-1:-1:-1;;;;;;17548:33:1;;;;17530:52;;17518:2;17503:18;;17485:103::o;18038:275::-;18242:4;18230:17;;;;18212:36;;18291:14;18284:22;18279:2;18264:18;;18257:50;18200:2;18185:18;;18167:146::o;18318:221::-;;18467:2;18456:9;18449:21;18487:46;18529:2;18518:9;18514:18;18506:6;18487:46;:::i;18544:330::-;18746:2;18728:21;;;18785:1;18765:18;;;18758:29;-1:-1:-1;;;18818:2:1;18803:18;;18796:37;18865:2;18850:18;;18718:156::o;18879:340::-;19081:2;19063:21;;;19120:2;19100:18;;;19093:30;-1:-1:-1;;;19154:2:1;19139:18;;19132:46;19210:2;19195:18;;19053:166::o;19224:177::-;19370:25;;;19358:2;19343:18;;19325:76::o;19406:290::-;;19581:6;19570:9;19563:25;19624:2;19619;19608:9;19604:18;19597:30;19644:46;19686:2;19675:9;19671:18;19663:6;19644:46;:::i;19701:248::-;19875:25;;;19931:2;19916:18;;19909:34;19863:2;19848:18;;19830:119::o;19954:319::-;20156:25;;;20212:2;20197:18;;20190:34;;;;20255:2;20240:18;;20233:34;20144:2;20129:18;;20111:162::o;20278:391::-;20509:25;;;20565:2;20550:18;;20543:34;;;;20608:2;20593:18;;20586:34;20651:2;20636:18;;20629:34;20496:3;20481:19;;20463:206::o;20674:555::-;20949:25;;;21005:2;20990:18;;20983:34;;;;21048:2;21033:18;;21026:34;;;;21091:2;21076:18;;21069:34;21147:14;21140:22;21134:3;21119:19;;21112:51;21207:14;21200:22;21194:3;21179:19;;21172:51;20936:3;20921:19;;20903:326::o;21234:607::-;21549:25;;;21605:2;21590:18;;21583:34;;;;21648:2;21633:18;;21626:34;;;;21691:2;21676:18;;21669:34;;;;21734:3;21719:19;;21712:35;21778:3;21763:19;;21756:35;21822:3;21807:19;;21800:35;21536:3;21521:19;;21503:338::o;21846:184::-;22018:4;22006:17;;;;21988:36;;21976:2;21961:18;;21943:87::o;22035:251::-;22105:2;22099:9;22135:17;;;-1:-1:-1;;;;;22167:34:1;;22203:22;;;22164:62;22161:2;;;22229:18;;:::i;:::-;22265:2;22258:22;22079:207;;-1:-1:-1;22079:207:1:o;22291:191::-;;-1:-1:-1;;;;;22381:6:1;22378:30;22375:2;;;22411:18;;:::i;:::-;-1:-1:-1;22471:4:1;22452:17;;;22448:28;;22365:117::o;22487:129::-;;22555:17;;;22605:4;22589:21;;;22545:71::o;22790:128::-;;22861:1;22857:6;22854:1;22851:13;22848:2;;;22867:18;;:::i;:::-;-1:-1:-1;22903:9:1;;22838:80::o;22923:217::-;;22989:1;22979:2;;-1:-1:-1;;;23014:31:1;;23068:4;23065:1;23058:15;23096:4;23021:1;23086:15;22979:2;-1:-1:-1;23125:9:1;;22969:171::o;23145:168::-;;23251:1;23247;23243:6;23239:14;23236:1;23233:21;23228:1;23221:9;23214:17;23210:45;23207:2;;;23258:18;;:::i;:::-;-1:-1:-1;23298:9:1;;23197:116::o;23318:125::-;;23386:1;23383;23380:8;23377:2;;;23391:18;;:::i;:::-;-1:-1:-1;23428:9:1;;23367:76::o;23448:380::-;23533:1;23523:12;;23580:1;23570:12;;;23591:2;;23645:4;23637:6;23633:17;23623:27;;23591:2;23698;23690:6;23687:14;23667:18;23664:38;23661:2;;;23744:10;23739:3;23735:20;23732:1;23725:31;23779:4;23776:1;23769:15;23807:4;23804:1;23797:15;23833:127;23894:10;23889:3;23885:20;23882:1;23875:31;23925:4;23922:1;23915:15;23949:4;23946:1;23939:15;23965:127;24026:10;24021:3;24017:20;24014:1;24007:31;24057:4;24054:1;24047:15;24081:4;24078:1;24071:15;24097:133;-1:-1:-1;;;;;24174:31:1;;24164:42;;24154:2;;24220:1;24217;24210:12;24235:120;24323:5;24316:13;24309:21;24302:5;24299:32;24289:2;;24345:1;24342;24335:12
Swarm Source
ipfs://024a48b0116d3623d3c4e658180554ae0cb7b39ebc109de8c78519e16fb1e6e5
Loading...
Loading
Loading...
Loading
Net Worth in USD
$263.15
Net Worth in ETH
0.136301
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,930.69 | 0.1363 | $263.15 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.