Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 34 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Withdraw | 12872687 | 1687 days ago | IN | 0 ETH | 0.0008396 | ||||
| Rollout Deposite... | 12872649 | 1687 days ago | IN | 0 ETH | 0.00058397 | ||||
| Withdraw | 12785006 | 1701 days ago | IN | 0 ETH | 0.00184712 | ||||
| Withdraw | 12784978 | 1701 days ago | IN | 0 ETH | 0.0016792 | ||||
| Rollout Deposite... | 12784959 | 1701 days ago | IN | 0 ETH | 0.0010781 | ||||
| Transfer | 12756874 | 1705 days ago | IN | 0 ETH | 0.00059943 | ||||
| Transfer | 12756800 | 1705 days ago | IN | 0 ETH | 0.00082159 | ||||
| Withdraw | 12756771 | 1705 days ago | IN | 0 ETH | 0.00069967 | ||||
| Withdraw | 12756747 | 1705 days ago | IN | 0 ETH | 0.00087067 | ||||
| Rollout Deposite... | 12756287 | 1705 days ago | IN | 0 ETH | 0.00051659 | ||||
| Rollout Deposite... | 12691959 | 1715 days ago | IN | 0 ETH | 0.0017986 | ||||
| Sell_MVT | 12666299 | 1719 days ago | IN | 0 ETH | 0.0012329 | ||||
| Unstake NFT | 12608530 | 1728 days ago | IN | 0 ETH | 0.00133887 | ||||
| Acre To Totem | 12608523 | 1728 days ago | IN | 0 ETH | 0.00389818 | ||||
| Acre To Totem | 12608508 | 1728 days ago | IN | 0 ETH | 0.00425238 | ||||
| Sell_MVT | 12603170 | 1729 days ago | IN | 0 ETH | 0.00086286 | ||||
| Unstake NFT | 12602450 | 1729 days ago | IN | 0 ETH | 0.00182574 | ||||
| Acre To Totem | 12601309 | 1729 days ago | IN | 0 ETH | 0.01247375 | ||||
| Purchase Acre | 12601302 | 1729 days ago | IN | 0.05 ETH | 0.00326218 | ||||
| Set Oracle | 12600737 | 1729 days ago | IN | 0 ETH | 0.00133528 | ||||
| Sell_MVT | 12599365 | 1730 days ago | IN | 0 ETH | 0.00087028 | ||||
| Unstake NFT | 12598819 | 1730 days ago | IN | 0 ETH | 0.00123804 | ||||
| Acre To Totem | 12598758 | 1730 days ago | IN | 0 ETH | 0.00579888 | ||||
| Purchase Acre | 12598704 | 1730 days ago | IN | 0.1 ETH | 0.00182648 | ||||
| Acre To Totem | 12593457 | 1731 days ago | IN | 0 ETH | 0.0029315 |
Latest 8 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| - | 12666299 | 1719 days ago | 0.04155 ETH | ||||
| - | 12603170 | 1729 days ago | 0.1 ETH | ||||
| - | 12599365 | 1730 days ago | 0.05 ETH | ||||
| - | 12592355 | 1731 days ago | 0.11 ETH | ||||
| - | 12592193 | 1731 days ago | 0.44 ETH | ||||
| - | 12592151 | 1731 days ago | 0.3875 ETH | ||||
| - | 12590019 | 1731 days ago | 0.0025 ETH | ||||
| - | 12580702 | 1733 days ago | Contract Creation | 0 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-06-06 */ // Sources flattened with hardhat v2.2.0 https://hardhat.org // File openzeppelin-solidity/contracts/utils/introspection/[email protected] // 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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping (uint256 => address) private _owners; // Mapping owner address to token count mapping (address => uint256) private _balances; // Mapping from token ID to approved address mapping (uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. 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 * 90; 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); 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 = $/20000; bool firstBump = true; event Sell_MVT(uint mvtSold, uint cashout); 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 * 5; }else{ floorPrice = floorPrice * 3; } nextFloorRaisingTime += 300 * 86400; } uint cost = floorPrice*amount/$; require( mvt5xHodlPool >= cost && cost > 0 ); mvt5xHodlPool -= cost; MVT_to_rollout += amount; emit Sell_MVT(amount, cost); (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); } 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 MVT_to_rollout; uint 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(_address)) 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 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); } if(!isContract(_to)) addShares(ETHpool, _to, _amount); 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) 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; 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]); uint weight = totemNFT.getWeight(tokenID); 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,bool[] memory pendingManifest,address[] memory holder ){ 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); holder = new address[](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]; owned[c] = ( staker[tID] == account || totemNFT.ownerOf(tID) == account ); holder[c] = totemNFT.ownerOf(tID); } } function onERC721Received(address from, uint256 tokenID, bytes memory _data) external returns(bytes4) { bytes4 empty; require( msg.sender == address(totemNFT) ); 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]; } function _baseURI() internal override pure returns (string memory) { return "TOTEM:"; } } 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"}],"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":"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":[],"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":"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":[],"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":"bool[]","name":"pendingManifest","type":"bool[]"},{"internalType":"address[]","name":"holder","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"pool","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
6080604052600080546001600160a01b03199081163017909155670de0b6b3a76400006001819055600480548316733d46454212c61ecb7b31248047fa033120b886681790556005805483167332a087d5fdf8c84ec32554c56727a7c81124544e17905560068054831673e324c8cf74899461ef7ad2c3eb952da7819aabc5179055600780549092169091556200009a90614e2090620002bd565b600f556010805460ff19166001179055604080518082019091526004808252634163726560e01b6020909201918252620000d791601d91620001a9565b50604080518082019091526004808252634143524560e01b60209092019182526200010591601e91620001a9565b503480156200011357600080fd5b5042600281905562000129906276a70062000298565b600e556040516200013a9062000238565b62000145906200025d565b604051809103906000f08015801562000162573d6000803e3d6000fd5b50600380546001600160a01b03929092166001600160a01b03199283161790556008805482163390811790915560098054831682179055600a80549092161790556200031b565b828054620001b790620002de565b90600052602060002090601f016020900481019282620001db576000855562000226565b82601f10620001f657805160ff191683800117855562000226565b8280016001018555821562000226579182015b828111156200022657825182559160200191906001019062000209565b506200023492915062000246565b5090565b6117388062004ad983390190565b5b8082111562000234576000815560010162000247565b6040808252600590820181905264546f74656d60d81b606083015260806020830181905282015264544f54454d60d81b60a082015260c00190565b60008219821115620002b857634e487b7160e01b81526011600452602481fd5b500190565b600082620002d957634e487b7160e01b81526012600452602481fd5b500490565b600281046001821680620002f357607f821691505b602082108114156200031557634e487b7160e01b600052602260045260246000fd5b50919050565b6147ae806200032b6000396000f3fe60806040526004361061036b5760003560e01c80637389af5a116101c6578063ccfcb030116100f7578063e890caab11610095578063f0b9e5ba1161006f578063f0b9e5ba146109d3578063f8d6c5e714610a00578063f9d4d60314610a13578063fa0cd58b14610a285761036b565b8063e890caab14610989578063ea38fab01461099e578063ec62b1c1146109be5761036b565b8063da8480ee116100d1578063da8480ee14610921578063dd62ed3e14610936578063e326e32a14610956578063e87076cc146109695761036b565b8063ccfcb030146108d7578063d0bb34f1146108ec578063d4b67149146109015761036b565b8063a9059cbb11610164578063c1dfa0bb1161013e578063c1dfa0bb14610850578063c1eb5ddd14610870578063c891091314610885578063c92df52b146108b75761036b565b8063a9059cbb146107f0578063be45fd6214610810578063c0ee0b8a146108305761036b565b806395d89b41116101a057806395d89b41146107865780639e3c0e051461079b578063a4e793b8146107b0578063a56294c2146107d05761036b565b80637389af5a146107115780637adbf9731461074657806382481d49146107665761036b565b806338013f02116102a057806355def9f91161023e57806364b4b57d1161021857806364b4b57d146106915780636c7e58f8146106b157806370a08231146106d1578063713feefc146106f15761036b565b806355def9f9146106345780635b6007e414610654578063613ce410146106695761036b565b80634ea94c611161027a5780634ea94c61146105a55780634fa03bb6146105d457806350c03954146105f4578063520dbe2d146106145761036b565b806338013f02146105505780633f0ec62c146105655780634db9e855146105855761036b565b806318160ddd1161030d57806327e235e3116102e757806327e235e3146104ce5780632d9295e4146104ee5780632e1a7d4d1461050e578063313ce5671461052e5761036b565b806318160ddd146104795780631cec8f041461048e57806323b872dd146104ae5761036b565b806313d1ee501161034957806313d1ee50146103f557806313f2dad01461040a5780631409024c1461043757806316279055146104595761036b565b806306fdde0314610370578063095ea7b31461039b5780630cb9d13f146103c8575b600080fd5b34801561037c57600080fd5b50610385610a30565b60405161039291906144e0565b60405180910390f35b3480156103a757600080fd5b506103bb6103b6366004613e0d565b610abe565b60405161039291906144ab565b3480156103d457600080fd5b506103e86103e3366004613f40565b610b2a565b60405161039291906141b9565b34801561040157600080fd5b506103e8610b45565b34801561041657600080fd5b5061042a610425366004613f40565b610b54565b604051610392919061453e565b34801561044357600080fd5b50610457610452366004613d10565b610b66565b005b34801561046557600080fd5b506103bb610474366004613d10565b610b9f565b34801561048557600080fd5b5061042a610bc4565b34801561049a57600080fd5b5061042a6104a9366004613e0d565b610bca565b3480156104ba57600080fd5b506103bb6104c9366004613d80565b610bfb565b3480156104da57600080fd5b5061042a6104e9366004613d10565b610ce3565b3480156104fa57600080fd5b5061042a610509366004613d10565b610cf5565b34801561051a57600080fd5b50610457610529366004613f40565b610dbb565b34801561053a57600080fd5b50610543610fce565b60405161039291906145e0565b34801561055c57600080fd5b506103e8610fd3565b34801561057157600080fd5b50610385610580366004613f40565b610fe2565b34801561059157600080fd5b506104576105a0366004613d10565b610ffb565b3480156105b157600080fd5b506105c56105c0366004613d10565b611034565b6040516103929392919061456e565b3480156105e057600080fd5b506103bb6105ef366004613e0d565b611190565b34801561060057600080fd5b5061045761060f366004613f40565b6111b0565b34801561062057600080fd5b5061042a61062f366004613f70565b6113d1565b34801561064057600080fd5b5061045761064f366004613f94565b6113ee565b34801561066057600080fd5b506103e8611731565b34801561067557600080fd5b5061067e611740565b60405161039297969594939291906145b0565b34801561069d57600080fd5b506104576106ac366004613d10565b611775565b3480156106bd57600080fd5b5061042a6106cc366004613f40565b6117ae565b3480156106dd57600080fd5b5061042a6106ec366004613d10565b6117ee565b3480156106fd57600080fd5b5061042a61070c366004613f94565b611809565b34801561071d57600080fd5b5061073161072c366004613dc0565b611a6c565b604051610392999897969594939291906143b8565b34801561075257600080fd5b50610457610761366004613d10565b6122c5565b34801561077257600080fd5b5061042a610781366004613f70565b6122fe565b34801561079257600080fd5b5061038561231b565b3480156107a757600080fd5b50610457612328565b3480156107bc57600080fd5b5061042a6107cb366004613f40565b6123de565b3480156107dc57600080fd5b506104576107eb366004613f40565b6123f0565b3480156107fc57600080fd5b506103bb61080b366004613e0d565b6124c7565b34801561081c57600080fd5b506103bb61082b366004613ebb565b6124de565b34801561083c57600080fd5b5061045761084b366004613e38565b61250b565b34801561085c57600080fd5b5061045761086b366004613f40565b612608565b34801561087c57600080fd5b506103e86127a5565b34801561089157600080fd5b506108a56108a0366004613d10565b6127b4565b60405161039296959493929190614584565b3480156108c357600080fd5b5061042a6108d2366004613f40565b612a0f565b3480156108e357600080fd5b506103e8612a21565b3480156108f857600080fd5b5061042a612a30565b34801561090d57600080fd5b5061042a61091c366004613f70565b612a36565b34801561092d57600080fd5b50610457612ab0565b34801561094257600080fd5b5061042a610951366004613d48565b612c45565b61042a610964366004614095565b612c70565b34801561097557600080fd5b50610457610984366004613fb8565b612e28565b34801561099557600080fd5b5061042a6130bd565b3480156109aa57600080fd5b506103e86109b9366004613f40565b6130c3565b3480156109ca57600080fd5b5061042a6130de565b3480156109df57600080fd5b506109f36109ee366004613ebb565b6130e4565b60405161039291906144b6565b610457610a0e366004613d10565b613195565b348015610a1f57600080fd5b506104576132ce565b61045761331d565b601d8054610a3d906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a69906146b4565b8015610ab65780601f10610a8b57610100808354040283529160200191610ab6565b820191906000526020600020905b815481529060010190602001808311610a9957829003601f168201915b505050505081565b3360008181526021602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b1890879061453e565b60405180910390a35060019392505050565b6029602052600090815260409020546001600160a01b031681565b600a546001600160a01b031681565b60126020526000908152604090205481565b6008546001600160a01b03163314610b7d57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000813b8015610bb3576001915050610bbf565b6000915050610bbf565b505b919050565b60205490565b60236020528160005260406000208181548110610be657600080fd5b90600052602060002001600091509150505481565b6001600160a01b0383166000908152602160209081526040808320338085529252822054831115610c2b57600080fd5b6001600160a01b0385166000908152601f6020526040902054831115610c5057600080fd5b6001600160a01b03808616600090815260216020908152604080832093851683529290529081208054859290610c8790849061469d565b90915550610c9890508585856133e2565b6060846001600160a01b0316826001600160a01b03166000805160206147598339815191528684604051610ccd929190614547565b60405180910390a36001925050505b9392505050565b601f6020526000908152604090205481565b6001600160a01b03811660009081527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a602090815260408220546002835260139091527f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed1923548291610d659161469d565b6001600160a01b03841660009081527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b76020526040902054909150600160401b90610db190839061467e565b610cdc919061465e565b336002821115610dca57600080fd5b6002821415610de357610dde600082613594565b610ded565b610ded8282613594565b60008281526015602090815260408083206001600160a01b03851684529091528120805491905580610e1e57600080fd5b82610eae576000826001600160a01b031682604051610e3c906141b6565b60006040518083038185875af1925050503d8060008114610e79576040519150601f19603f3d011682016040523d82523d6000602084013e610e7e565b606091505b5050905080610ea85760405162461bcd60e51b8152600401610e9f90614514565b60405180910390fd5b50610fc9565b6001831415610f3a576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610ee89186918691016141f1565b602060405180830381600087803b158015610f0257600080fd5b505af1158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190613f24565b6002831415610fc95760065460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610f7590859085906004016141f1565b602060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190613f24565b505b505050565b601281565b6007546001600160a01b031681565b602b6020526000908152604090208054610a3d906146b4565b600a546001600160a01b0316331461101257600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b8152600091829182916001600160a01b0316906370a08231906110699087906004016141b9565b60206040518083038186803b15801561108157600080fd5b505afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190613f58565b600480546040516370a0823160e01b81526001600160a01b03909116916370a08231916110e8918991016141b9565b60206040518083038186803b15801561110057600080fd5b505afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190613f58565b6001600160a01b03861660009081527f07d4ff730d9753101d832555708a37d38c2c45fce8cacaefc99f06074e93fe0b602052604090205461117987610cf5565b6111839190614646565b9250925092509193909250565b602460209081526000928352604080842090915290825290205460ff1681565b600480546000546040516323b872dd60e01b815233936001600160a01b03938416936323b872dd936111eb93879391909216918891016141cd565b602060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d9190613f24565b61124657600080fd5b600e54429081106112aa5760105460ff161561127c576010805460ff19169055600f5461127490600561467e565b600f5561128e565b600f5461128a90600361467e565b600f555b63018b8200600e60008282546112a49190614646565b90915550505b600060015484600f546112bd919061467e565b6112c7919061465e565b905080600d54101580156112db5750600081115b6112e457600080fd5b80600d60008282546112f6919061469d565b9250508190555083601b600082825461130f9190614646565b90915550506040517f1c15fd53d143a5b3a0eaa78bdeb0f7d13332ab422aa593975f00e67bb53d8541906113469086908490614560565b60405180910390a16000836001600160a01b031682604051611367906141b6565b60006040518083038185875af1925050503d80600081146113a4576040519150601f19603f3d011682016040523d82523d6000602084013e6113a9565b606091505b50509050806113ca5760405162461bcd60e51b8152600401610e9f90614514565b5050505050565b601560209081526000928352604080842090915290825290205481565b60008281526028602052604090205433906001600160a01b031681148015611425575060008381526027602052604090205460ff16155b801561144057506000838152602c602052604090205460ff16155b61144957600080fd5b60055460015460405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb9161147d918591906004016141f1565b602060405180830381600087803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190613f24565b6114d857600080fd5b60035460405163d851fdfd60e01b81526000916001600160a01b03169063d851fdfd9061150990879060040161453e565b60206040518083038186803b15801561152157600080fd5b505afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190613f58565b9050611567600183836136af565b600084815260286020526040812080546001600160a01b0319169055831561162957600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936115c09389939116918891016141cd565b602060405180830381600087803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190613f24565b61161b57600080fd5b6116248261370e565b611646565b602054602554611639908461467e565b611643919061465e565b90505b6000858152601a602052604090205461167190611662876117ae565b61166c9190614646565b61370e565b600054611691906001600160a01b03168461168c848661469d565b6133e2565b80602060008282546116a3919061469d565b9091555050600080546001600160a01b03168152601f6020526040812080548392906116d090849061469d565b9250508190555081602560008282546116e9919061469d565b90915550506040517fcc1e401c461caebcaa61b6c5cf16d39bdd80ef974ae2e004d1813f74c4958f3f9061172290859088908890614224565b60405180910390a15050505050565b6003546001600160a01b031681565b601b54600d54600e54600f54602080546000805260129091526000805160206147398339815191525460255490919293949596565b6009546001600160a01b0316331461178c57600080fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526019602052604081205460185482916117cb9161469d565b600084815260166020526040902054909150600160401b90610db190839061467e565b6001600160a01b03166000908152601f602052604090205490565b600554600080546001546040516323b872dd60e01b8152929333936001600160a01b03918216936323b872dd936118479387939216916004016141cd565b602060405180830381600087803b15801561186157600080fd5b505af1158015611875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118999190613f24565b6118a257600080fd5b6003546001600160a01b031663074c516a846118be57826118cb565b6000546001600160a01b03165b602254876040518463ffffffff1660e01b81526004016118ed9392919061426e565b600060405180830381600087803b15801561190757600080fd5b505af115801561191b573d6000803e3d6000fd5b505050508215611936576119318160225461377a565b611992565b611942602254856138c9565b6001600160a01b03811660008181526023602090815260408083206022805482546001818101855593875285872001559484526024835281842094548452939091529020805460ff191690911790555b6001602260008282546119a59190614646565b9250508190555083602560008282546119be9190614646565b90915550506000546119db9082906001600160a01b0316866133e2565b6000546040516060916001600160a01b03908116919084169060008051602061475983398151915290611a119089908690614547565b60405180910390a37f27b747c9002e1f67b0556184d9d8f86030c662a0ad48a57b1fd41dfbd54ec436828686604051611a4c93929190614224565b60405180910390a16001602254611a63919061469d565b95945050505050565b606080606080606080606080606060008a5160001415611aa557506001600160a01b038b16600090815260236020526040902054611aa9565b5089515b806001600160401b03811115611acf57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611af8578160200160208202803683370190505b509950806001600160401b03811115611b2157634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b4a578160200160208202803683370190505b509750806001600160401b03811115611b7357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b9c578160200160208202803683370190505b509850806001600160401b03811115611bc557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611bee578160200160208202803683370190505b509650806001600160401b03811115611c1757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c40578160200160208202803683370190505b509550806001600160401b03811115611c6957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c92578160200160208202803683370190505b509450806001600160401b03811115611cbb57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611ce4578160200160208202803683370190505b509250806001600160401b03811115611d0d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d36578160200160208202803683370190505b509350806001600160401b03811115611d5f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d88578160200160208202803683370190505b5091506000805b828110156122b5578c51611de7576001600160a01b038e166000908152602360205260409020805482908110611dd557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549150611e12565b8c8181518110611e0757634e487b7160e01b600052603260045260246000fd5b602002602001015191505b818c8281518110611e3357634e487b7160e01b600052603260045260246000fd5b602090810291909101015260035460405163d851fdfd60e01b81526001600160a01b039091169063d851fdfd90611e6e90859060040161453e565b60206040518083038186803b158015611e8657600080fd5b505afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190613f58565b8a8281518110611ede57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508d6001600160a01b03166028600084815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b0316148b8281518110611f4557634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101526000546003546040516331a9108f60e11b81526001600160a01b039283169290911690636352211e90611f8c90869060040161453e565b60206040518083038186803b158015611fa457600080fd5b505afa158015611fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdc9190613d2c565b6001600160a01b03161487828151811061200657634e487b7160e01b600052603260045260246000fd5b911515602092830291909101820152600083815260279091526040902054885160ff9091169089908390811061204c57634e487b7160e01b600052603260045260246000fd5b9115156020928302919091018201526000838152602c9091526040902054855160ff9091169086908390811061209257634e487b7160e01b600052603260045260246000fd5b9115156020928302919091018201526000838152601a90915260409020546120b9836117ae565b6120c39190614646565b8682815181106120e357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101919091526000838152602890915260409020546001600160a01b038f8116911614806121bb57508d6001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401612160919061453e565b60206040518083038186803b15801561217857600080fd5b505afa15801561218c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b09190613d2c565b6001600160a01b0316145b8982815181106121db57634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101526003546040516331a9108f60e11b81526001600160a01b0390911690636352211e9061221b90859060040161453e565b60206040518083038186803b15801561223357600080fd5b505afa158015612247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226b9190613d2c565b84828151811061228b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03909216602092830291909101909101526122ae600182614646565b9050611d8f565b5050509295985092959850929598565b600a546001600160a01b031633146122dc57600080fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b601160209081526000928352604080842090915290825290205481565b601e8054610a3d906146b4565b6008546001600160a01b03163314801561234457506000600b54115b61234d57600080fd5b600b80546000918290556008546040519192916001600160a01b03909116908390612377906141b6565b60006040518083038185875af1925050503d80600081146123b4576040519150601f19603f3d011682016040523d82523d6000602084013e6123b9565b606091505b50509050806123da5760405162461bcd60e51b8152600401610e9f90614514565b5050565b601a6020526000908152604090205481565b600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936124279333939116918791016141cd565b602060405180830381600087803b15801561244157600080fd5b505af1158015612455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124799190613f24565b61248257600080fd5b61248b8161370e565b7fb4be3166b21846f2f110d6b948d56c561a16def710167c9756c9c811593b241b33826040516124bc9291906141f1565b60405180910390a150565b600060606124d6848483613926565b949350505050565b60006124e984610b9f565b15612500576124f9848484613966565b9050610cdc565b6124f9848484613926565b6006546001600160a01b03163314156125f0576000805260126020526000805160206147398339815191525461254057600080fd5b60008052601260205260008051602061473983398151915254612567600160401b8561467e565b612571919061465e565b6002600090815260136020527f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed192380549091906125ae908490614646565b90915550506040517f0b6f805f55e534da95e83df42a3be5d987011a774c125d6cbc3cdf41620049b8906125e390859061453e565b60405180910390a1610fc7565b60405162461bcd60e51b8152600401610e9f906144f3565b60008181526028602052604090205433906001600160a01b03168114801561263f57506000828152602c602052604090205460ff16155b61264857600080fd5b60035460405163d851fdfd60e01b81526000916001600160a01b03169063d851fdfd9061267990869060040161453e565b60206040518083038186803b15801561269157600080fd5b505afa1580156126a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c99190613f58565b90506126d7600183836136af565b600083815260286020526040902080546001600160a01b03191690556126fd83826138c9565b6003546000546040516323b872dd60e01b81526001600160a01b03928316926323b872dd9261273592911690869088906004016141cd565b600060405180830381600087803b15801561274f57600080fd5b505af1158015612763573d6000803e3d6000fd5b505050507fd189f9264d7206fa03765606c54a04ae20609e3055dfcd0e76780c8662a6640582846040516127989291906141f1565b60405180910390a1505050565b6009546001600160a01b031681565b6000806000806000806127c6876117ee565b6001600160a01b03881660009081527f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b55260209081526040808320547fa31547ce6245cdb9ecea19cf8c7eb9f5974025bb4075011409251ae855b30aed9092528220549091612834908b612a36565b61283e9190614646565b6001600160a01b038a1660009081527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d602052604090205461288160018c612a36565b61288b9190614646565b60015461289b90620f424061467e565b600560009054906101000a90046001600160a01b03166001600160a01b031663dd62ed3e8d60008054906101000a90046001600160a01b03166040518363ffffffff1660e01b81526004016128f192919061420a565b60206040518083038186803b15801561290957600080fd5b505afa15801561291d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129419190613f58565b11600154620f4240612953919061467e565b600460009054906101000a90046001600160a01b03166001600160a01b031663dd62ed3e8e60008054906101000a90046001600160a01b03166040518363ffffffff1660e01b81526004016129a992919061420a565b60206040518083038186803b1580156129c157600080fd5b505afa1580156129d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f99190613f58565b1195509550955095509550955091939550919395565b60166020526000908152604090205481565b6008546001600160a01b031681565b600b5481565b60008281526014602090815260408083206001600160a01b038516845282528083205485845260139092528220548291612a6f9161469d565b60008581526011602090815260408083206001600160a01b0388168452909152902054909150600160401b90612aa690839061467e565b6124d6919061465e565b601c5442906201518090612ac4908361469d565b118015612afb5750600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35415155b8015612b0957506000601b54115b15612c4257601c819055602080546001600090815260129092527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354602554612b52919061469d565b601b54612b5f919061467e565b612b69919061465e565b905080601b6000828254612b7d919061469d565b9091555050600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354612bbc600160401b8361467e565b612bc6919061465e565b6001600090815260136020527f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8054909190612c03908490614646565b90915550506040517f7129ce2f79c23a07093acd7ea119354b337fa472d7819587dc212041cb35d65d90612c3890839061453e565b60405180910390a1505b50565b6001600160a01b03918216600090815260216020908152604080832093909416825291909152205490565b60008381526028602052604081205433906001600160a01b031681148015612ca7575060008581526027602052604090205460ff16155b8015612cc257506000858152602c602052604090205460ff16155b612ccb57600080fd5b600754604051631b5e4a7960e21b81526000916001600160a01b031690636d7929e4903490612d019060019081906004016144cb565b6020604051808303818588803b158015612d1a57600080fd5b505af1158015612d2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d539190613f58565b6000818152602a602090815260408083208a90558983526029825280832080546001600160a01b0319166001600160a01b038a16179055602b82529091208751929350612da4929091880190613bb4565b506000868152602c60209081526040808320805460ff19166001179055601a9091529020547f41b1f3d6785afe51d0f1e5111b8a7d1cf38be18f8bd5c3b91e06cd100ccdc9159083908890612df8826117ae565b612e029190614646565b878986604051612e179695949392919061428f565b60405180910390a195945050505050565b6000858152602a6020526040812054600754829182916001600160a01b03163314612e5257600080fd5b60005b87811015612ee757868181518110612e7d57634e487b7160e01b600052603260045260246000fd5b602002602001015194506000868281518110612ea957634e487b7160e01b600052603260045260246000fd5b60200260200101511315612ec857612ec18585614646565b9350612ed5565b612ed28584614646565b92505b612ee0600182614646565b9050612e55565b5087158015612ef557508183115b156130635760008181526027602052604090205460ff1661305e576000818152602760209081526040808320805460ff19166001179055601a9091529020548015612fbd576000828152602860205260409020546001600160a01b0316612f6457612f5f8161370e565b612fbd565b6000828152602860209081526040808320546001600160a01b031683527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d90915281208054839290612fb7908490614646565b90915550505b7f248c6780d2d35e738439fe85b29710742cf650c1765c45881537c4540906f03e6028600084815260200190815260200160002060009054906101000a90046001600160a01b031683836029600087815260200190815260200160002060009054906101000a90046001600160a01b0316602b60008881526020019081526020016000208f604051613054969594939291906142dc565b60405180910390a1505b61309d565b7f83174f77f9261d2e9831d002ea903948abc40d4eaf8dbcc5849ada2e03d66154818a604051613094929190614560565b60405180910390a15b6000908152602c60205260409020805460ff191690555050505050505050565b60175481565b6028602052600090815260409020546001600160a01b031681565b600c5481565b60035460009081906001600160a01b0316331461310057600080fd5b60035460405163d851fdfd60e01b815261318b9186916001600160a01b039091169063d851fdfd9061313690849060040161453e565b60206040518083038186803b15801561314e57600080fd5b505afa158015613162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131869190613f58565b613a1d565b6124d6858561377a565b6001600160a01b0381166131a65750335b600034116131b357600080fd5b60025434906000906301e13380906131cb904261469d565b116131eb576103e86131de83600661467e565b6131e8919061465e565b90505b80600c60008282546131fd9190614646565b909155506000905061320f828461469d565b905061321b8482613a71565b6000602054601754602554602054613233919061469d565b61323d9190614646565b613247908461467e565b613251919061465e565b905061325d818361469d565b600b600082825461326e9190614646565b9250508190555080600d60008282546132879190614646565b90915550506040517fc6e962e7b569fe0538aca0fa7b36049a3d7ac9009bc0cbabe0b5c3313d6fa173906132be90879085906141f1565b60405180910390a16113ca612ab0565b6009546001600160a01b0316331480156132ea57506000600c54115b6132f357600080fd5b600c80546000918290556009546040519192916001600160a01b03909116908390612377906141b6565b60008052601260205260008051602061473983398151915254349061334157600080fd5b60008052601260205260008051602061473983398151915254613368600160401b8361467e565b613372919061465e565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c80549091906133ad908490614646565b90915550506040517ff0689ae6841002cf16b73981a1f76fd8846a837b7a34afe0cdab7496289678ac906124bc90839061453e565b6001600160a01b0383166000908152601f602052604090205481111561340757600080fd5b6001600160a01b0383166000908152601f60205260408120805483929061342f90849061469d565b90915550506001600160a01b0382166000908152601f60205260408120805483929061345c908490614646565b9091555061346b905083610b9f565b61352b576000546001600160a01b0383811691161461351f57600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936134bb9389939116918791016141cd565b602060405180830381600087803b1580156134d557600080fd5b505af11580156134e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350d9190613f24565b61351657600080fd5b61351f8161370e565b61352b600084836136af565b61353482610b9f565b6135445761354460008383613b16565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613587919061453e565b60405180910390a3505050565b60006135a08383612a36565b600084815260136020908152604080832054601483528184206001600160a01b03881680865290845282852091909155878452601583528184209084529091528120805492935083929091906135f7908490614646565b909155505082610fc95761360a82610cf5565b7f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed1923546001600160a01b03841660009081527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a60209081526040808320939093557f07d4ff730d9753101d832555708a37d38c2c45fce8cacaefc99f06074e93fe0b9052908120805492935083929091906136a5908490614646565b9091555050505050565b6136b98383613594565b600083815260126020526040812080548392906136d790849061469d565b909155505060008381526011602090815260408083206001600160a01b0386168452909152812080548392906136a590849061469d565b6017546137325780602660008282546137279190614646565b90915550612c429050565b601754600160401b602654836137489190614646565b613752919061467e565b61375c919061465e565b6018600082825461376d9190614646565b9091555050600060265550565b600081815260286020908152604080832080546001600160a01b0319166001600160a01b03871690811790915583526024825280832084845290915290205460ff1661380c576001600160a01b038216600081815260236020908152604080832080546001818101835591855283852001869055938352602482528083208584529091529020805460ff191690911790555b60035460405163d851fdfd60e01b81526138989160019185916001600160a01b03169063d851fdfd9061384390879060040161453e565b60206040518083038186803b15801561385b57600080fd5b505afa15801561386f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138939190613f58565b613b16565b7f173ca1bf74155b9dca4f4031e88b399af1aa5c87b77ef963a87a419d486977d88282604051612c389291906141f1565b60008281526027602052604090205460ff166123da576138e882613b75565b80601760008282546138fa9190614646565b90915550506000828152601660205260408120805483929061391d908490614646565b90915550505050565b60006139333385856133e2565b836001600160a01b0316336001600160a01b03166000805160206147598339815191528585604051610b18929190614547565b60006139733385856133e2565b60405163607705c560e11b815284906001600160a01b0382169063c0ee0b8a906139a590339088908890600401614247565b600060405180830381600087803b1580156139bf57600080fd5b505af11580156139d3573d6000803e3d6000fd5b50505050846001600160a01b0316336001600160a01b03166000805160206147598339815191528686604051613a0a929190614547565b60405180910390a3506001949350505050565b60008281526027602052604090205460ff166123da57613a3c82613b75565b8060176000828254613a4e919061469d565b90915550506000828152601660205260408120805483929061391d90849061469d565b6001600160a01b0382166000908152601f602052604081208054839290613a99908490614646565b925050819055508060206000828254613ab29190614646565b90915550613ac1905082610b9f565b613ad157613ad160008383613b16565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051613b0a919061453e565b60405180910390a25050565b613b208383613594565b60008381526012602052604081208054839290613b3e908490614646565b909155505060008381526011602090815260408083206001600160a01b0386168452909152812080548392906136a5908490614646565b6000613b80826117ae565b601854600084815260196020908152604080832093909355601a90529081208054929350839290919061391d908490614646565b828054613bc0906146b4565b90600052602060002090601f016020900481019282613be25760008555613c28565b82601f10613bfb57805160ff1916838001178555613c28565b82800160010185558215613c28579182015b82811115613c28578251825591602001919060010190613c0d565b50613c34929150613c38565b5090565b5b80821115613c345760008155600101613c39565b60006001600160401b03831115613c6657613c666146ff565b613c79601f8401601f19166020016145ee565b9050828152838383011115613c8d57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613cb4578081fd5b81356020613cc9613cc483614617565b6145ee565b8281528181019085830183850287018401881015613ce5578586fd5b855b85811015613d0357813584529284019290840190600101613ce7565b5090979650505050505050565b600060208284031215613d21578081fd5b8135610cdc81614715565b600060208284031215613d3d578081fd5b8151610cdc81614715565b60008060408385031215613d5a578081fd5b8235613d6581614715565b91506020830135613d7581614715565b809150509250929050565b600080600060608486031215613d94578081fd5b8335613d9f81614715565b92506020840135613daf81614715565b929592945050506040919091013590565b60008060408385031215613dd2578182fd5b8235613ddd81614715565b915060208301356001600160401b03811115613df7578182fd5b613e0385828601613ca4565b9150509250929050565b60008060408385031215613e1f578182fd5b8235613e2a81614715565b946020939093013593505050565b60008060008060608587031215613e4d578081fd5b8435613e5881614715565b93506020850135925060408501356001600160401b0380821115613e7a578283fd5b818701915087601f830112613e8d578283fd5b813581811115613e9b578384fd5b886020828501011115613eac578384fd5b95989497505060200194505050565b600080600060608486031215613ecf578283fd5b8335613eda81614715565b92506020840135915060408401356001600160401b03811115613efb578182fd5b8401601f81018613613f0b578182fd5b613f1a86823560208401613c4d565b9150509250925092565b600060208284031215613f35578081fd5b8151610cdc8161472a565b600060208284031215613f51578081fd5b5035919050565b600060208284031215613f69578081fd5b5051919050565b60008060408385031215613f82578182fd5b823591506020830135613d7581614715565b60008060408385031215613fa6578182fd5b823591506020830135613d758161472a565b600080600080600060a08688031215613fcf578283fd5b85359450602080870135613fe28161472a565b94506040870135935060608701356001600160401b0380821115614004578384fd5b6140108a838b01613ca4565b94506080890135915080821115614025578384fd5b508701601f81018913614036578283fd5b8035614044613cc482614617565b81815283810190838501858402850186018d1015614060578687fd5b8694505b83851015614082578035835260019490940193918501918501614064565b5080955050505050509295509295909350565b6000806000606084860312156140a9578081fd5b8335925060208401356001600160401b038111156140c5578182fd5b8401601f810186136140d5578182fd5b6140e486823560208401613c4d565b92505060408401356140f581614715565b809150509250925092565b6000815180845260208085019450808401835b83811015614131578151151587529582019590820190600101614113565b509495945050505050565b6000815180845260208085019450808401835b838110156141315781518752958201959082019060010161414f565b60008151808452815b8181101561419057602081850181015186830182015201614174565b818111156141a15782602083870101525b50601f01601f19169290920160200192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b600060018060a01b038516825283602083015260606040830152611a63606083018461416b565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03878116825260208201879052604082018690528416606082015260c0608082018190526000906142c99083018561416b565b90508260a0830152979650505050505050565b6001600160a01b038781168252602080830188905260408301879052908516606083015260c06080830152835460009182916002810460018281168061432357607f831692505b84831081141561434157634e487b7160e01b87526022600452602487fd5b61434e8360c08a0161453e565b81801561436257600181146143735761439d565b60ff1986168252868201975061439d565b61437c8c61463a565b895b868110156143975781548482015290850190880161437e565b83019850505b505050505060a0949094019490945298975050505050505050565b60006101208083526143cc8184018d61413c565b90506020838203818501526143e1828d614100565b915083820360408501526143f5828c61413c565b91508382036060850152614409828b614100565b9150838203608085015261441d828a614100565b915083820360a08501526144318289614100565b915083820360c0850152614445828861413c565b915083820360e08501526144598287614100565b8481036101008601528551808252828701935090820190845b818110156144975784516001600160a01b031683529383019391830191600101614472565b50909e9d5050505050505050505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60ff9290921682521515602082015260400190565b600060208252610cdc602083018461416b565b6020808252600790820152661b9bc81dd85b9d60ca1b604082015260600190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b90815260200190565b6000838252604060208301526124d6604083018461416b565b918252602082015260400190565b9283526020830191909152604082015260600190565b95865260208601949094526040850192909252606084015215156080830152151560a082015260c00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60ff91909116815260200190565b6040518181016001600160401b038111828210171561460f5761460f6146ff565b604052919050565b60006001600160401b03821115614630576146306146ff565b5060209081020190565b60009081526020902090565b60008219821115614659576146596146e9565b500190565b60008261467957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614698576146986146e9565b500290565b6000828210156146af576146af6146e9565b500390565b6002810460018216806146c857607f821691505b60208210811415610bbd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612c4257600080fd5b8015158114612c4257600080fdfe7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7be19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16a2646970667358221220f3a5c008d6c80904d97ee459fc50736e8079ebf3f4b5a015caa2cde12fefa59e64736f6c6343000800003360806040523480156200001157600080fd5b5060405162001738380380620017388339810160408190526200003491620001d2565b8151829082906200004d90600090602085019062000081565b5080516200006390600190602084019062000081565b5050600680546001600160a01b03191633179055506200028c915050565b8280546200008f9062000239565b90600052602060002090601f016020900481019282620000b35760008555620000fe565b82601f10620000ce57805160ff1916838001178555620000fe565b82800160010185558215620000fe579182015b82811115620000fe578251825591602001919060010190620000e1565b506200010c92915062000110565b5090565b5b808211156200010c576000815560010162000111565b600082601f83011262000138578081fd5b81516001600160401b038082111562000155576200015562000276565b6040516020601f8401601f19168201810183811183821017156200017d576200017d62000276565b604052838252858401810187101562000194578485fd5b8492505b83831015620001b7578583018101518284018201529182019162000198565b83831115620001c857848185840101525b5095945050505050565b60008060408385031215620001e5578182fd5b82516001600160401b0380821115620001fc578384fd5b6200020a8683870162000127565b9350602085015191508082111562000220578283fd5b506200022f8582860162000127565b9150509250929050565b6002810460018216806200024e57607f821691505b602082108114156200027057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052604160045260246000fd5b61149c806200029c6000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80636352211e11610097578063b88d4fde11610066578063b88d4fde146101f4578063c87b56dd14610207578063d851fdfd1461021a578063e985e9c51461022d576100f5565b80636352211e146101a657806370a08231146101b957806395d89b41146101d9578063a22cb465146101e1576100f5565b8063081812fc116100d3578063081812fc1461014d578063095ea7b31461016d57806323b872dd1461018057806342842e0e14610193576100f5565b806301ffc9a7146100fa57806306fdde0314610123578063074c516a14610138575b600080fd5b61010d610108366004610e31565b610240565b60405161011a9190610f20565b60405180910390f35b61012b610288565b60405161011a9190610f2b565b61014b610146366004610dff565b61031a565b005b61016061015b366004610e69565b61034e565b60405161011a9190610edc565b61014b61017b366004610dd6565b61039a565b61014b61018e366004610c95565b610432565b61014b6101a1366004610c95565b61046a565b6101606101b4366004610e69565b610485565b6101cc6101c7366004610c49565b6104ba565b60405161011a9190611329565b61012b6104fe565b61014b6101ef366004610d9c565b61050d565b61014b610202366004610cd0565b6105db565b61012b610215366004610e69565b61061a565b6101cc610228366004610e69565b61069d565b61010d61023b366004610c63565b6106af565b60006001600160e01b031982166380ac58cd60e01b148061027157506001600160e01b03198216635b5e139f60e01b145b806102805750610280826106dd565b90505b919050565b606060008054610297906113a1565b80601f01602080910402602001604051908101604052809291908181526020018280546102c3906113a1565b80156103105780601f106102e557610100808354040283529160200191610310565b820191906000526020600020905b8154815290600101906020018083116102f357829003601f168201915b5050505050905090565b6006546001600160a01b0316331461033157600080fd5b61033b83836106f6565b6000918252600760205260409091205550565b6000610359826107d5565b61037e5760405162461bcd60e51b8152600401610375906111b3565b60405180910390fd5b506000908152600460205260409020546001600160a01b031690565b60006103a582610485565b9050806001600160a01b0316836001600160a01b031614156103d95760405162461bcd60e51b815260040161037590611297565b806001600160a01b03166103eb6107f2565b6001600160a01b0316148061040757506104078161023b6107f2565b6104235760405162461bcd60e51b81526004016103759061108e565b61042d83836107f6565b505050565b61044361043d6107f2565b82610864565b61045f5760405162461bcd60e51b8152600401610375906112d8565b61042d8383836108e9565b61042d838383604051806020016040528060008152506105db565b6000818152600260205260408120546001600160a01b0316806102805760405162461bcd60e51b815260040161037590611135565b60006001600160a01b0382166104e25760405162461bcd60e51b8152600401610375906110eb565b506001600160a01b031660009081526003602052604090205490565b606060018054610297906113a1565b6105156107f2565b6001600160a01b0316826001600160a01b031614156105465760405162461bcd60e51b81526004016103759061100b565b80600560006105536107f2565b6001600160a01b03908116825260208083019390935260409182016000908120918716808252919093529120805460ff1916921515929092179091556105976107f2565b6001600160a01b03167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516105cf9190610f20565b60405180910390a35050565b6105ec6105e66107f2565b83610864565b6106085760405162461bcd60e51b8152600401610375906112d8565b61061484848484610a16565b50505050565b6060610625826107d5565b6106415760405162461bcd60e51b815260040161037590611248565b600061064b610a49565b9050600081511161066b5760405180602001604052806000815250610696565b8061067584610a69565b604051602001610686929190610ead565b6040516020818303038152906040525b9392505050565b60009081526007602052604090205490565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205460ff1690565b6001600160e01b031981166301ffc9a760e01b14919050565b6001600160a01b03821661071c5760405162461bcd60e51b81526004016103759061117e565b610725816107d5565b156107425760405162461bcd60e51b815260040161037590610f90565b61074e6000838361042d565b6001600160a01b0382166000908152600360205260408120805460019290610777908490611332565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6000908152600260205260409020546001600160a01b0316151590565b3390565b600081815260046020526040902080546001600160a01b0319166001600160a01b038416908117909155819061082b82610485565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061086f826107d5565b61088b5760405162461bcd60e51b815260040161037590611042565b600061089683610485565b9050806001600160a01b0316846001600160a01b031614806108d15750836001600160a01b03166108c68461034e565b6001600160a01b0316145b806108e157506108e181856106af565b949350505050565b826001600160a01b03166108fc82610485565b6001600160a01b0316146109225760405162461bcd60e51b8152600401610375906111ff565b6001600160a01b0382166109485760405162461bcd60e51b815260040161037590610fc7565b61095383838361042d565b61095e6000826107f6565b6001600160a01b038316600090815260036020526040812080546001929061098790849061135e565b90915550506001600160a01b03821660009081526003602052604081208054600192906109b5908490611332565b909155505060008181526002602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b610a218484846108e9565b610a2d84848484610b84565b6106145760405162461bcd60e51b815260040161037590610f3e565b6040805180820190915260068152652a27aa22a69d60d11b602082015290565b606081610a8e57506040805180820190915260018152600360fc1b6020820152610283565b8160005b8115610ab85780610aa2816113dc565b9150610ab19050600a8361134a565b9150610a92565b60008167ffffffffffffffff811115610ae157634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610b0b576020820181803683370190505b5090505b84156108e157610b2060018361135e565b9150610b2d600a866113f7565b610b38906030611332565b60f81b818381518110610b5b57634e487b7160e01b600052603260045260246000fd5b60200101906001600160f81b031916908160001a905350610b7d600a8661134a565b9450610b0f565b6000610b98846001600160a01b0316610c2c565b15610c215760405163785cf2dd60e11b81526001600160a01b0385169063f0b9e5ba90610bcd90889087908790600401610ef0565b602060405180830381600087803b158015610be757600080fd5b505af1158015610bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1f9190610e4d565b505b506001949350505050565b3b151590565b80356001600160a01b038116811461028357600080fd5b600060208284031215610c5a578081fd5b61069682610c32565b60008060408385031215610c75578081fd5b610c7e83610c32565b9150610c8c60208401610c32565b90509250929050565b600080600060608486031215610ca9578081fd5b610cb284610c32565b9250610cc060208501610c32565b9150604084013590509250925092565b60008060008060808587031215610ce5578081fd5b610cee85610c32565b93506020610cfd818701610c32565b935060408601359250606086013567ffffffffffffffff80821115610d20578384fd5b818801915088601f830112610d33578384fd5b813581811115610d4557610d45611437565b604051601f8201601f1916810185018381118282101715610d6857610d68611437565b60405281815283820185018b1015610d7e578586fd5b81858501868301379081019093019390935250939692955090935050565b60008060408385031215610dae578182fd5b610db783610c32565b915060208301358015158114610dcb578182fd5b809150509250929050565b60008060408385031215610de8578182fd5b610df183610c32565b946020939093013593505050565b600080600060608486031215610e13578283fd5b610e1c84610c32565b95602085013595506040909401359392505050565b600060208284031215610e42578081fd5b81356106968161144d565b600060208284031215610e5e578081fd5b81516106968161144d565b600060208284031215610e7a578081fd5b5035919050565b60008151808452610e99816020860160208601611375565b601f01601f19169290920160200192915050565b60008351610ebf818460208801611375565b835190830190610ed3818360208801611375565b01949350505050565b6001600160a01b0391909116815260200190565b600060018060a01b038516825283602083015260606040830152610f176060830184610e81565b95945050505050565b901515815260200190565b6000602082526106966020830184610e81565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000604082015260600190565b60208082526024908201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526019908201527f4552433732313a20617070726f766520746f2063616c6c657200000000000000604082015260600190565b6020808252602c908201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526038908201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760408201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000606082015260800190565b6020808252602a908201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604082015269726f206164647265737360b01b606082015260800190565b60208082526029908201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460408201526832b73a103a37b5b2b760b91b606082015260800190565b6020808252818101527f4552433732313a206d696e7420746f20746865207a65726f2061646472657373604082015260600190565b6020808252602c908201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860408201526b34b9ba32b73a103a37b5b2b760a11b606082015260800190565b60208082526029908201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960408201526839903737ba1037bbb760b91b606082015260800190565b6020808252602f908201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60408201526e3732bc34b9ba32b73a103a37b5b2b760891b606082015260800190565b60208082526021908201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656040820152603960f91b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b90815260200190565b600082198211156113455761134561140b565b500190565b60008261135957611359611421565b500490565b6000828210156113705761137061140b565b500390565b60005b83811015611390578181015183820152602001611378565b838111156106145750506000910152565b6002810460018216806113b557607f821691505b602082108114156113d657634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156113f0576113f061140b565b5060010190565b60008261140657611406611421565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160e01b03198116811461146357600080fd5b5056fea26469706673582212207a77d8d153b3f82b2db67f76fb95494ead3741d334e8b56d53562a18aaaf072664736f6c63430008000033
Deployed Bytecode
0x60806040526004361061036b5760003560e01c80637389af5a116101c6578063ccfcb030116100f7578063e890caab11610095578063f0b9e5ba1161006f578063f0b9e5ba146109d3578063f8d6c5e714610a00578063f9d4d60314610a13578063fa0cd58b14610a285761036b565b8063e890caab14610989578063ea38fab01461099e578063ec62b1c1146109be5761036b565b8063da8480ee116100d1578063da8480ee14610921578063dd62ed3e14610936578063e326e32a14610956578063e87076cc146109695761036b565b8063ccfcb030146108d7578063d0bb34f1146108ec578063d4b67149146109015761036b565b8063a9059cbb11610164578063c1dfa0bb1161013e578063c1dfa0bb14610850578063c1eb5ddd14610870578063c891091314610885578063c92df52b146108b75761036b565b8063a9059cbb146107f0578063be45fd6214610810578063c0ee0b8a146108305761036b565b806395d89b41116101a057806395d89b41146107865780639e3c0e051461079b578063a4e793b8146107b0578063a56294c2146107d05761036b565b80637389af5a146107115780637adbf9731461074657806382481d49146107665761036b565b806338013f02116102a057806355def9f91161023e57806364b4b57d1161021857806364b4b57d146106915780636c7e58f8146106b157806370a08231146106d1578063713feefc146106f15761036b565b806355def9f9146106345780635b6007e414610654578063613ce410146106695761036b565b80634ea94c611161027a5780634ea94c61146105a55780634fa03bb6146105d457806350c03954146105f4578063520dbe2d146106145761036b565b806338013f02146105505780633f0ec62c146105655780634db9e855146105855761036b565b806318160ddd1161030d57806327e235e3116102e757806327e235e3146104ce5780632d9295e4146104ee5780632e1a7d4d1461050e578063313ce5671461052e5761036b565b806318160ddd146104795780631cec8f041461048e57806323b872dd146104ae5761036b565b806313d1ee501161034957806313d1ee50146103f557806313f2dad01461040a5780631409024c1461043757806316279055146104595761036b565b806306fdde0314610370578063095ea7b31461039b5780630cb9d13f146103c8575b600080fd5b34801561037c57600080fd5b50610385610a30565b60405161039291906144e0565b60405180910390f35b3480156103a757600080fd5b506103bb6103b6366004613e0d565b610abe565b60405161039291906144ab565b3480156103d457600080fd5b506103e86103e3366004613f40565b610b2a565b60405161039291906141b9565b34801561040157600080fd5b506103e8610b45565b34801561041657600080fd5b5061042a610425366004613f40565b610b54565b604051610392919061453e565b34801561044357600080fd5b50610457610452366004613d10565b610b66565b005b34801561046557600080fd5b506103bb610474366004613d10565b610b9f565b34801561048557600080fd5b5061042a610bc4565b34801561049a57600080fd5b5061042a6104a9366004613e0d565b610bca565b3480156104ba57600080fd5b506103bb6104c9366004613d80565b610bfb565b3480156104da57600080fd5b5061042a6104e9366004613d10565b610ce3565b3480156104fa57600080fd5b5061042a610509366004613d10565b610cf5565b34801561051a57600080fd5b50610457610529366004613f40565b610dbb565b34801561053a57600080fd5b50610543610fce565b60405161039291906145e0565b34801561055c57600080fd5b506103e8610fd3565b34801561057157600080fd5b50610385610580366004613f40565b610fe2565b34801561059157600080fd5b506104576105a0366004613d10565b610ffb565b3480156105b157600080fd5b506105c56105c0366004613d10565b611034565b6040516103929392919061456e565b3480156105e057600080fd5b506103bb6105ef366004613e0d565b611190565b34801561060057600080fd5b5061045761060f366004613f40565b6111b0565b34801561062057600080fd5b5061042a61062f366004613f70565b6113d1565b34801561064057600080fd5b5061045761064f366004613f94565b6113ee565b34801561066057600080fd5b506103e8611731565b34801561067557600080fd5b5061067e611740565b60405161039297969594939291906145b0565b34801561069d57600080fd5b506104576106ac366004613d10565b611775565b3480156106bd57600080fd5b5061042a6106cc366004613f40565b6117ae565b3480156106dd57600080fd5b5061042a6106ec366004613d10565b6117ee565b3480156106fd57600080fd5b5061042a61070c366004613f94565b611809565b34801561071d57600080fd5b5061073161072c366004613dc0565b611a6c565b604051610392999897969594939291906143b8565b34801561075257600080fd5b50610457610761366004613d10565b6122c5565b34801561077257600080fd5b5061042a610781366004613f70565b6122fe565b34801561079257600080fd5b5061038561231b565b3480156107a757600080fd5b50610457612328565b3480156107bc57600080fd5b5061042a6107cb366004613f40565b6123de565b3480156107dc57600080fd5b506104576107eb366004613f40565b6123f0565b3480156107fc57600080fd5b506103bb61080b366004613e0d565b6124c7565b34801561081c57600080fd5b506103bb61082b366004613ebb565b6124de565b34801561083c57600080fd5b5061045761084b366004613e38565b61250b565b34801561085c57600080fd5b5061045761086b366004613f40565b612608565b34801561087c57600080fd5b506103e86127a5565b34801561089157600080fd5b506108a56108a0366004613d10565b6127b4565b60405161039296959493929190614584565b3480156108c357600080fd5b5061042a6108d2366004613f40565b612a0f565b3480156108e357600080fd5b506103e8612a21565b3480156108f857600080fd5b5061042a612a30565b34801561090d57600080fd5b5061042a61091c366004613f70565b612a36565b34801561092d57600080fd5b50610457612ab0565b34801561094257600080fd5b5061042a610951366004613d48565b612c45565b61042a610964366004614095565b612c70565b34801561097557600080fd5b50610457610984366004613fb8565b612e28565b34801561099557600080fd5b5061042a6130bd565b3480156109aa57600080fd5b506103e86109b9366004613f40565b6130c3565b3480156109ca57600080fd5b5061042a6130de565b3480156109df57600080fd5b506109f36109ee366004613ebb565b6130e4565b60405161039291906144b6565b610457610a0e366004613d10565b613195565b348015610a1f57600080fd5b506104576132ce565b61045761331d565b601d8054610a3d906146b4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a69906146b4565b8015610ab65780601f10610a8b57610100808354040283529160200191610ab6565b820191906000526020600020905b815481529060010190602001808311610a9957829003601f168201915b505050505081565b3360008181526021602090815260408083206001600160a01b03871680855292528083208590555191929182907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b1890879061453e565b60405180910390a35060019392505050565b6029602052600090815260409020546001600160a01b031681565b600a546001600160a01b031681565b60126020526000908152604090205481565b6008546001600160a01b03163314610b7d57600080fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000813b8015610bb3576001915050610bbf565b6000915050610bbf565b505b919050565b60205490565b60236020528160005260406000208181548110610be657600080fd5b90600052602060002001600091509150505481565b6001600160a01b0383166000908152602160209081526040808320338085529252822054831115610c2b57600080fd5b6001600160a01b0385166000908152601f6020526040902054831115610c5057600080fd5b6001600160a01b03808616600090815260216020908152604080832093851683529290529081208054859290610c8790849061469d565b90915550610c9890508585856133e2565b6060846001600160a01b0316826001600160a01b03166000805160206147598339815191528684604051610ccd929190614547565b60405180910390a36001925050505b9392505050565b601f6020526000908152604090205481565b6001600160a01b03811660009081527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a602090815260408220546002835260139091527f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed1923548291610d659161469d565b6001600160a01b03841660009081527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b76020526040902054909150600160401b90610db190839061467e565b610cdc919061465e565b336002821115610dca57600080fd5b6002821415610de357610dde600082613594565b610ded565b610ded8282613594565b60008281526015602090815260408083206001600160a01b03851684529091528120805491905580610e1e57600080fd5b82610eae576000826001600160a01b031682604051610e3c906141b6565b60006040518083038185875af1925050503d8060008114610e79576040519150601f19603f3d011682016040523d82523d6000602084013e610e7e565b606091505b5050905080610ea85760405162461bcd60e51b8152600401610e9f90614514565b60405180910390fd5b50610fc9565b6001831415610f3a576004805460405163a9059cbb60e01b81526001600160a01b039091169163a9059cbb91610ee89186918691016141f1565b602060405180830381600087803b158015610f0257600080fd5b505af1158015610f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea89190613f24565b6002831415610fc95760065460405163a9059cbb60e01b81526001600160a01b039091169063a9059cbb90610f7590859085906004016141f1565b602060405180830381600087803b158015610f8f57600080fd5b505af1158015610fa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc79190613f24565b505b505050565b601281565b6007546001600160a01b031681565b602b6020526000908152604090208054610a3d906146b4565b600a546001600160a01b0316331461101257600080fd5b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546040516370a0823160e01b8152600091829182916001600160a01b0316906370a08231906110699087906004016141b9565b60206040518083038186803b15801561108157600080fd5b505afa158015611095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b99190613f58565b600480546040516370a0823160e01b81526001600160a01b03909116916370a08231916110e8918991016141b9565b60206040518083038186803b15801561110057600080fd5b505afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111389190613f58565b6001600160a01b03861660009081527f07d4ff730d9753101d832555708a37d38c2c45fce8cacaefc99f06074e93fe0b602052604090205461117987610cf5565b6111839190614646565b9250925092509193909250565b602460209081526000928352604080842090915290825290205460ff1681565b600480546000546040516323b872dd60e01b815233936001600160a01b03938416936323b872dd936111eb93879391909216918891016141cd565b602060405180830381600087803b15801561120557600080fd5b505af1158015611219573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123d9190613f24565b61124657600080fd5b600e54429081106112aa5760105460ff161561127c576010805460ff19169055600f5461127490600561467e565b600f5561128e565b600f5461128a90600361467e565b600f555b63018b8200600e60008282546112a49190614646565b90915550505b600060015484600f546112bd919061467e565b6112c7919061465e565b905080600d54101580156112db5750600081115b6112e457600080fd5b80600d60008282546112f6919061469d565b9250508190555083601b600082825461130f9190614646565b90915550506040517f1c15fd53d143a5b3a0eaa78bdeb0f7d13332ab422aa593975f00e67bb53d8541906113469086908490614560565b60405180910390a16000836001600160a01b031682604051611367906141b6565b60006040518083038185875af1925050503d80600081146113a4576040519150601f19603f3d011682016040523d82523d6000602084013e6113a9565b606091505b50509050806113ca5760405162461bcd60e51b8152600401610e9f90614514565b5050505050565b601560209081526000928352604080842090915290825290205481565b60008281526028602052604090205433906001600160a01b031681148015611425575060008381526027602052604090205460ff16155b801561144057506000838152602c602052604090205460ff16155b61144957600080fd5b60055460015460405163a9059cbb60e01b81526001600160a01b039092169163a9059cbb9161147d918591906004016141f1565b602060405180830381600087803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cf9190613f24565b6114d857600080fd5b60035460405163d851fdfd60e01b81526000916001600160a01b03169063d851fdfd9061150990879060040161453e565b60206040518083038186803b15801561152157600080fd5b505afa158015611535573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115599190613f58565b9050611567600183836136af565b600084815260286020526040812080546001600160a01b0319169055831561162957600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936115c09389939116918891016141cd565b602060405180830381600087803b1580156115da57600080fd5b505af11580156115ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116129190613f24565b61161b57600080fd5b6116248261370e565b611646565b602054602554611639908461467e565b611643919061465e565b90505b6000858152601a602052604090205461167190611662876117ae565b61166c9190614646565b61370e565b600054611691906001600160a01b03168461168c848661469d565b6133e2565b80602060008282546116a3919061469d565b9091555050600080546001600160a01b03168152601f6020526040812080548392906116d090849061469d565b9250508190555081602560008282546116e9919061469d565b90915550506040517fcc1e401c461caebcaa61b6c5cf16d39bdd80ef974ae2e004d1813f74c4958f3f9061172290859088908890614224565b60405180910390a15050505050565b6003546001600160a01b031681565b601b54600d54600e54600f54602080546000805260129091526000805160206147398339815191525460255490919293949596565b6009546001600160a01b0316331461178c57600080fd5b600980546001600160a01b0319166001600160a01b0392909216919091179055565b60008181526019602052604081205460185482916117cb9161469d565b600084815260166020526040902054909150600160401b90610db190839061467e565b6001600160a01b03166000908152601f602052604090205490565b600554600080546001546040516323b872dd60e01b8152929333936001600160a01b03918216936323b872dd936118479387939216916004016141cd565b602060405180830381600087803b15801561186157600080fd5b505af1158015611875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118999190613f24565b6118a257600080fd5b6003546001600160a01b031663074c516a846118be57826118cb565b6000546001600160a01b03165b602254876040518463ffffffff1660e01b81526004016118ed9392919061426e565b600060405180830381600087803b15801561190757600080fd5b505af115801561191b573d6000803e3d6000fd5b505050508215611936576119318160225461377a565b611992565b611942602254856138c9565b6001600160a01b03811660008181526023602090815260408083206022805482546001818101855593875285872001559484526024835281842094548452939091529020805460ff191690911790555b6001602260008282546119a59190614646565b9250508190555083602560008282546119be9190614646565b90915550506000546119db9082906001600160a01b0316866133e2565b6000546040516060916001600160a01b03908116919084169060008051602061475983398151915290611a119089908690614547565b60405180910390a37f27b747c9002e1f67b0556184d9d8f86030c662a0ad48a57b1fd41dfbd54ec436828686604051611a4c93929190614224565b60405180910390a16001602254611a63919061469d565b95945050505050565b606080606080606080606080606060008a5160001415611aa557506001600160a01b038b16600090815260236020526040902054611aa9565b5089515b806001600160401b03811115611acf57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611af8578160200160208202803683370190505b509950806001600160401b03811115611b2157634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b4a578160200160208202803683370190505b509750806001600160401b03811115611b7357634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611b9c578160200160208202803683370190505b509850806001600160401b03811115611bc557634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611bee578160200160208202803683370190505b509650806001600160401b03811115611c1757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c40578160200160208202803683370190505b509550806001600160401b03811115611c6957634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611c92578160200160208202803683370190505b509450806001600160401b03811115611cbb57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611ce4578160200160208202803683370190505b509250806001600160401b03811115611d0d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d36578160200160208202803683370190505b509350806001600160401b03811115611d5f57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611d88578160200160208202803683370190505b5091506000805b828110156122b5578c51611de7576001600160a01b038e166000908152602360205260409020805482908110611dd557634e487b7160e01b600052603260045260246000fd5b90600052602060002001549150611e12565b8c8181518110611e0757634e487b7160e01b600052603260045260246000fd5b602002602001015191505b818c8281518110611e3357634e487b7160e01b600052603260045260246000fd5b602090810291909101015260035460405163d851fdfd60e01b81526001600160a01b039091169063d851fdfd90611e6e90859060040161453e565b60206040518083038186803b158015611e8657600080fd5b505afa158015611e9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ebe9190613f58565b8a8281518110611ede57634e487b7160e01b600052603260045260246000fd5b6020026020010181815250508d6001600160a01b03166028600084815260200190815260200160002060009054906101000a90046001600160a01b03166001600160a01b0316148b8281518110611f4557634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101526000546003546040516331a9108f60e11b81526001600160a01b039283169290911690636352211e90611f8c90869060040161453e565b60206040518083038186803b158015611fa457600080fd5b505afa158015611fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fdc9190613d2c565b6001600160a01b03161487828151811061200657634e487b7160e01b600052603260045260246000fd5b911515602092830291909101820152600083815260279091526040902054885160ff9091169089908390811061204c57634e487b7160e01b600052603260045260246000fd5b9115156020928302919091018201526000838152602c9091526040902054855160ff9091169086908390811061209257634e487b7160e01b600052603260045260246000fd5b9115156020928302919091018201526000838152601a90915260409020546120b9836117ae565b6120c39190614646565b8682815181106120e357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101919091526000838152602890915260409020546001600160a01b038f8116911614806121bb57508d6001600160a01b0316600360009054906101000a90046001600160a01b03166001600160a01b0316636352211e846040518263ffffffff1660e01b8152600401612160919061453e565b60206040518083038186803b15801561217857600080fd5b505afa15801561218c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121b09190613d2c565b6001600160a01b0316145b8982815181106121db57634e487b7160e01b600052603260045260246000fd5b911515602092830291909101909101526003546040516331a9108f60e11b81526001600160a01b0390911690636352211e9061221b90859060040161453e565b60206040518083038186803b15801561223357600080fd5b505afa158015612247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061226b9190613d2c565b84828151811061228b57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03909216602092830291909101909101526122ae600182614646565b9050611d8f565b5050509295985092959850929598565b600a546001600160a01b031633146122dc57600080fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b601160209081526000928352604080842090915290825290205481565b601e8054610a3d906146b4565b6008546001600160a01b03163314801561234457506000600b54115b61234d57600080fd5b600b80546000918290556008546040519192916001600160a01b03909116908390612377906141b6565b60006040518083038185875af1925050503d80600081146123b4576040519150601f19603f3d011682016040523d82523d6000602084013e6123b9565b606091505b50509050806123da5760405162461bcd60e51b8152600401610e9f90614514565b5050565b601a6020526000908152604090205481565b600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936124279333939116918791016141cd565b602060405180830381600087803b15801561244157600080fd5b505af1158015612455573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124799190613f24565b61248257600080fd5b61248b8161370e565b7fb4be3166b21846f2f110d6b948d56c561a16def710167c9756c9c811593b241b33826040516124bc9291906141f1565b60405180910390a150565b600060606124d6848483613926565b949350505050565b60006124e984610b9f565b15612500576124f9848484613966565b9050610cdc565b6124f9848484613926565b6006546001600160a01b03163314156125f0576000805260126020526000805160206147398339815191525461254057600080fd5b60008052601260205260008051602061473983398151915254612567600160401b8561467e565b612571919061465e565b6002600090815260136020527f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed192380549091906125ae908490614646565b90915550506040517f0b6f805f55e534da95e83df42a3be5d987011a774c125d6cbc3cdf41620049b8906125e390859061453e565b60405180910390a1610fc7565b60405162461bcd60e51b8152600401610e9f906144f3565b60008181526028602052604090205433906001600160a01b03168114801561263f57506000828152602c602052604090205460ff16155b61264857600080fd5b60035460405163d851fdfd60e01b81526000916001600160a01b03169063d851fdfd9061267990869060040161453e565b60206040518083038186803b15801561269157600080fd5b505afa1580156126a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c99190613f58565b90506126d7600183836136af565b600083815260286020526040902080546001600160a01b03191690556126fd83826138c9565b6003546000546040516323b872dd60e01b81526001600160a01b03928316926323b872dd9261273592911690869088906004016141cd565b600060405180830381600087803b15801561274f57600080fd5b505af1158015612763573d6000803e3d6000fd5b505050507fd189f9264d7206fa03765606c54a04ae20609e3055dfcd0e76780c8662a6640582846040516127989291906141f1565b60405180910390a1505050565b6009546001600160a01b031681565b6000806000806000806127c6876117ee565b6001600160a01b03881660009081527f17bc176d2408558f6e4111feebc3cab4e16b63e967be91cde721f4c8a488b55260209081526040808320547fa31547ce6245cdb9ecea19cf8c7eb9f5974025bb4075011409251ae855b30aed9092528220549091612834908b612a36565b61283e9190614646565b6001600160a01b038a1660009081527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d602052604090205461288160018c612a36565b61288b9190614646565b60015461289b90620f424061467e565b600560009054906101000a90046001600160a01b03166001600160a01b031663dd62ed3e8d60008054906101000a90046001600160a01b03166040518363ffffffff1660e01b81526004016128f192919061420a565b60206040518083038186803b15801561290957600080fd5b505afa15801561291d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129419190613f58565b11600154620f4240612953919061467e565b600460009054906101000a90046001600160a01b03166001600160a01b031663dd62ed3e8e60008054906101000a90046001600160a01b03166040518363ffffffff1660e01b81526004016129a992919061420a565b60206040518083038186803b1580156129c157600080fd5b505afa1580156129d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129f99190613f58565b1195509550955095509550955091939550919395565b60166020526000908152604090205481565b6008546001600160a01b031681565b600b5481565b60008281526014602090815260408083206001600160a01b038516845282528083205485845260139092528220548291612a6f9161469d565b60008581526011602090815260408083206001600160a01b0388168452909152902054909150600160401b90612aa690839061467e565b6124d6919061465e565b601c5442906201518090612ac4908361469d565b118015612afb5750600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35415155b8015612b0957506000601b54115b15612c4257601c819055602080546001600090815260129092527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354602554612b52919061469d565b601b54612b5f919061467e565b612b69919061465e565b905080601b6000828254612b7d919061469d565b9091555050600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a354612bbc600160401b8361467e565b612bc6919061465e565b6001600090815260136020527f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8054909190612c03908490614646565b90915550506040517f7129ce2f79c23a07093acd7ea119354b337fa472d7819587dc212041cb35d65d90612c3890839061453e565b60405180910390a1505b50565b6001600160a01b03918216600090815260216020908152604080832093909416825291909152205490565b60008381526028602052604081205433906001600160a01b031681148015612ca7575060008581526027602052604090205460ff16155b8015612cc257506000858152602c602052604090205460ff16155b612ccb57600080fd5b600754604051631b5e4a7960e21b81526000916001600160a01b031690636d7929e4903490612d019060019081906004016144cb565b6020604051808303818588803b158015612d1a57600080fd5b505af1158015612d2e573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612d539190613f58565b6000818152602a602090815260408083208a90558983526029825280832080546001600160a01b0319166001600160a01b038a16179055602b82529091208751929350612da4929091880190613bb4565b506000868152602c60209081526040808320805460ff19166001179055601a9091529020547f41b1f3d6785afe51d0f1e5111b8a7d1cf38be18f8bd5c3b91e06cd100ccdc9159083908890612df8826117ae565b612e029190614646565b878986604051612e179695949392919061428f565b60405180910390a195945050505050565b6000858152602a6020526040812054600754829182916001600160a01b03163314612e5257600080fd5b60005b87811015612ee757868181518110612e7d57634e487b7160e01b600052603260045260246000fd5b602002602001015194506000868281518110612ea957634e487b7160e01b600052603260045260246000fd5b60200260200101511315612ec857612ec18585614646565b9350612ed5565b612ed28584614646565b92505b612ee0600182614646565b9050612e55565b5087158015612ef557508183115b156130635760008181526027602052604090205460ff1661305e576000818152602760209081526040808320805460ff19166001179055601a9091529020548015612fbd576000828152602860205260409020546001600160a01b0316612f6457612f5f8161370e565b612fbd565b6000828152602860209081526040808320546001600160a01b031683527f27739e4bb5e6f8b5e4b57a047dca8767cc9b982a011081e086cbb0dfa9de818d90915281208054839290612fb7908490614646565b90915550505b7f248c6780d2d35e738439fe85b29710742cf650c1765c45881537c4540906f03e6028600084815260200190815260200160002060009054906101000a90046001600160a01b031683836029600087815260200190815260200160002060009054906101000a90046001600160a01b0316602b60008881526020019081526020016000208f604051613054969594939291906142dc565b60405180910390a1505b61309d565b7f83174f77f9261d2e9831d002ea903948abc40d4eaf8dbcc5849ada2e03d66154818a604051613094929190614560565b60405180910390a15b6000908152602c60205260409020805460ff191690555050505050505050565b60175481565b6028602052600090815260409020546001600160a01b031681565b600c5481565b60035460009081906001600160a01b0316331461310057600080fd5b60035460405163d851fdfd60e01b815261318b9186916001600160a01b039091169063d851fdfd9061313690849060040161453e565b60206040518083038186803b15801561314e57600080fd5b505afa158015613162573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131869190613f58565b613a1d565b6124d6858561377a565b6001600160a01b0381166131a65750335b600034116131b357600080fd5b60025434906000906301e13380906131cb904261469d565b116131eb576103e86131de83600661467e565b6131e8919061465e565b90505b80600c60008282546131fd9190614646565b909155506000905061320f828461469d565b905061321b8482613a71565b6000602054601754602554602054613233919061469d565b61323d9190614646565b613247908461467e565b613251919061465e565b905061325d818361469d565b600b600082825461326e9190614646565b9250508190555080600d60008282546132879190614646565b90915550506040517fc6e962e7b569fe0538aca0fa7b36049a3d7ac9009bc0cbabe0b5c3313d6fa173906132be90879085906141f1565b60405180910390a16113ca612ab0565b6009546001600160a01b0316331480156132ea57506000600c54115b6132f357600080fd5b600c80546000918290556009546040519192916001600160a01b03909116908390612377906141b6565b60008052601260205260008051602061473983398151915254349061334157600080fd5b60008052601260205260008051602061473983398151915254613368600160401b8361467e565b613372919061465e565b600080805260136020527f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c80549091906133ad908490614646565b90915550506040517ff0689ae6841002cf16b73981a1f76fd8846a837b7a34afe0cdab7496289678ac906124bc90839061453e565b6001600160a01b0383166000908152601f602052604090205481111561340757600080fd5b6001600160a01b0383166000908152601f60205260408120805483929061342f90849061469d565b90915550506001600160a01b0382166000908152601f60205260408120805483929061345c908490614646565b9091555061346b905083610b9f565b61352b576000546001600160a01b0383811691161461351f57600480546000546040516323b872dd60e01b81526001600160a01b03928316936323b872dd936134bb9389939116918791016141cd565b602060405180830381600087803b1580156134d557600080fd5b505af11580156134e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350d9190613f24565b61351657600080fd5b61351f8161370e565b61352b600084836136af565b61353482610b9f565b6135445761354460008383613b16565b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613587919061453e565b60405180910390a3505050565b60006135a08383612a36565b600084815260136020908152604080832054601483528184206001600160a01b03881680865290845282852091909155878452601583528184209084529091528120805492935083929091906135f7908490614646565b909155505082610fc95761360a82610cf5565b7f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed1923546001600160a01b03841660009081527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a60209081526040808320939093557f07d4ff730d9753101d832555708a37d38c2c45fce8cacaefc99f06074e93fe0b9052908120805492935083929091906136a5908490614646565b9091555050505050565b6136b98383613594565b600083815260126020526040812080548392906136d790849061469d565b909155505060008381526011602090815260408083206001600160a01b0386168452909152812080548392906136a590849061469d565b6017546137325780602660008282546137279190614646565b90915550612c429050565b601754600160401b602654836137489190614646565b613752919061467e565b61375c919061465e565b6018600082825461376d9190614646565b9091555050600060265550565b600081815260286020908152604080832080546001600160a01b0319166001600160a01b03871690811790915583526024825280832084845290915290205460ff1661380c576001600160a01b038216600081815260236020908152604080832080546001818101835591855283852001869055938352602482528083208584529091529020805460ff191690911790555b60035460405163d851fdfd60e01b81526138989160019185916001600160a01b03169063d851fdfd9061384390879060040161453e565b60206040518083038186803b15801561385b57600080fd5b505afa15801561386f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138939190613f58565b613b16565b7f173ca1bf74155b9dca4f4031e88b399af1aa5c87b77ef963a87a419d486977d88282604051612c389291906141f1565b60008281526027602052604090205460ff166123da576138e882613b75565b80601760008282546138fa9190614646565b90915550506000828152601660205260408120805483929061391d908490614646565b90915550505050565b60006139333385856133e2565b836001600160a01b0316336001600160a01b03166000805160206147598339815191528585604051610b18929190614547565b60006139733385856133e2565b60405163607705c560e11b815284906001600160a01b0382169063c0ee0b8a906139a590339088908890600401614247565b600060405180830381600087803b1580156139bf57600080fd5b505af11580156139d3573d6000803e3d6000fd5b50505050846001600160a01b0316336001600160a01b03166000805160206147598339815191528686604051613a0a929190614547565b60405180910390a3506001949350505050565b60008281526027602052604090205460ff166123da57613a3c82613b75565b8060176000828254613a4e919061469d565b90915550506000828152601660205260408120805483929061391d90849061469d565b6001600160a01b0382166000908152601f602052604081208054839290613a99908490614646565b925050819055508060206000828254613ab29190614646565b90915550613ac1905082610b9f565b613ad157613ad160008383613b16565b816001600160a01b03167f0f6798a560793a54c3bcfe86a93cde1e73087d944c0ea20544137d412139688582604051613b0a919061453e565b60405180910390a25050565b613b208383613594565b60008381526012602052604081208054839290613b3e908490614646565b909155505060008381526011602090815260408083206001600160a01b0386168452909152812080548392906136a5908490614646565b6000613b80826117ae565b601854600084815260196020908152604080832093909355601a90529081208054929350839290919061391d908490614646565b828054613bc0906146b4565b90600052602060002090601f016020900481019282613be25760008555613c28565b82601f10613bfb57805160ff1916838001178555613c28565b82800160010185558215613c28579182015b82811115613c28578251825591602001919060010190613c0d565b50613c34929150613c38565b5090565b5b80821115613c345760008155600101613c39565b60006001600160401b03831115613c6657613c666146ff565b613c79601f8401601f19166020016145ee565b9050828152838383011115613c8d57600080fd5b828260208301376000602084830101529392505050565b600082601f830112613cb4578081fd5b81356020613cc9613cc483614617565b6145ee565b8281528181019085830183850287018401881015613ce5578586fd5b855b85811015613d0357813584529284019290840190600101613ce7565b5090979650505050505050565b600060208284031215613d21578081fd5b8135610cdc81614715565b600060208284031215613d3d578081fd5b8151610cdc81614715565b60008060408385031215613d5a578081fd5b8235613d6581614715565b91506020830135613d7581614715565b809150509250929050565b600080600060608486031215613d94578081fd5b8335613d9f81614715565b92506020840135613daf81614715565b929592945050506040919091013590565b60008060408385031215613dd2578182fd5b8235613ddd81614715565b915060208301356001600160401b03811115613df7578182fd5b613e0385828601613ca4565b9150509250929050565b60008060408385031215613e1f578182fd5b8235613e2a81614715565b946020939093013593505050565b60008060008060608587031215613e4d578081fd5b8435613e5881614715565b93506020850135925060408501356001600160401b0380821115613e7a578283fd5b818701915087601f830112613e8d578283fd5b813581811115613e9b578384fd5b886020828501011115613eac578384fd5b95989497505060200194505050565b600080600060608486031215613ecf578283fd5b8335613eda81614715565b92506020840135915060408401356001600160401b03811115613efb578182fd5b8401601f81018613613f0b578182fd5b613f1a86823560208401613c4d565b9150509250925092565b600060208284031215613f35578081fd5b8151610cdc8161472a565b600060208284031215613f51578081fd5b5035919050565b600060208284031215613f69578081fd5b5051919050565b60008060408385031215613f82578182fd5b823591506020830135613d7581614715565b60008060408385031215613fa6578182fd5b823591506020830135613d758161472a565b600080600080600060a08688031215613fcf578283fd5b85359450602080870135613fe28161472a565b94506040870135935060608701356001600160401b0380821115614004578384fd5b6140108a838b01613ca4565b94506080890135915080821115614025578384fd5b508701601f81018913614036578283fd5b8035614044613cc482614617565b81815283810190838501858402850186018d1015614060578687fd5b8694505b83851015614082578035835260019490940193918501918501614064565b5080955050505050509295509295909350565b6000806000606084860312156140a9578081fd5b8335925060208401356001600160401b038111156140c5578182fd5b8401601f810186136140d5578182fd5b6140e486823560208401613c4d565b92505060408401356140f581614715565b809150509250925092565b6000815180845260208085019450808401835b83811015614131578151151587529582019590820190600101614113565b509495945050505050565b6000815180845260208085019450808401835b838110156141315781518752958201959082019060010161414f565b60008151808452815b8181101561419057602081850181015186830182015201614174565b818111156141a15782602083870101525b50601f01601f19169290920160200192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393909316835260208301919091521515604082015260600190565b600060018060a01b038516825283602083015260606040830152611a63606083018461416b565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b03878116825260208201879052604082018690528416606082015260c0608082018190526000906142c99083018561416b565b90508260a0830152979650505050505050565b6001600160a01b038781168252602080830188905260408301879052908516606083015260c06080830152835460009182916002810460018281168061432357607f831692505b84831081141561434157634e487b7160e01b87526022600452602487fd5b61434e8360c08a0161453e565b81801561436257600181146143735761439d565b60ff1986168252868201975061439d565b61437c8c61463a565b895b868110156143975781548482015290850190880161437e565b83019850505b505050505060a0949094019490945298975050505050505050565b60006101208083526143cc8184018d61413c565b90506020838203818501526143e1828d614100565b915083820360408501526143f5828c61413c565b91508382036060850152614409828b614100565b9150838203608085015261441d828a614100565b915083820360a08501526144318289614100565b915083820360c0850152614445828861413c565b915083820360e08501526144598287614100565b8481036101008601528551808252828701935090820190845b818110156144975784516001600160a01b031683529383019391830191600101614472565b50909e9d5050505050505050505050505050565b901515815260200190565b6001600160e01b031991909116815260200190565b60ff9290921682521515602082015260400190565b600060208252610cdc602083018461416b565b6020808252600790820152661b9bc81dd85b9d60ca1b604082015260600190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b90815260200190565b6000838252604060208301526124d6604083018461416b565b918252602082015260400190565b9283526020830191909152604082015260600190565b95865260208601949094526040850192909252606084015215156080830152151560a082015260c00190565b968752602087019590955260408601939093526060850191909152608084015260a083015260c082015260e00190565b60ff91909116815260200190565b6040518181016001600160401b038111828210171561460f5761460f6146ff565b604052919050565b60006001600160401b03821115614630576146306146ff565b5060209081020190565b60009081526020902090565b60008219821115614659576146596146e9565b500190565b60008261467957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614698576146986146e9565b500290565b6000828210156146af576146af6146e9565b500390565b6002810460018216806146c857607f821691505b60208210811415610bbd57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612c4257600080fd5b8015158114612c4257600080fdfe7e7fa33969761a458e04f477e039a608702b4f924981d6653935a8319a08ad7be19260aff97b920c7df27010903aeb9c8d2be5d310a2c67824cf3f15396e4c16a2646970667358221220f3a5c008d6c80904d97ee459fc50736e8079ebf3f4b5a015caa2cde12fefa59e64736f6c63430008000033
Deployed Bytecode Sourcemap
33075:23974:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44265:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48125:244;;;;;;;;;;-1:-1:-1;48125:244:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;54351:37::-;;;;;;;;;;-1:-1:-1;54351:37:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33583:27::-;;;;;;;;;;;;;:::i;38223:40::-;;;;;;;;;;-1:-1:-1;38223:40:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;33983:142::-;;;;;;;;;;-1:-1:-1;33983:142:0;;;;;:::i;:::-;;:::i;:::-;;48381:410;;;;;;;;;;-1:-1:-1;48381:410:0;;;;;:::i;:::-;;:::i;45215:99::-;;;;;;;;;;;;;:::i;48837:43::-;;;;;;;;;;-1:-1:-1;48837:43:0;;;;;:::i;:::-;;:::i;47590:443::-;;;;;;;;;;-1:-1:-1;47590:443:0;;;;;:::i;:::-;;:::i;44389:43::-;;;;;;;;;;-1:-1:-1;44389:43:0;;;;;:::i;:::-;;:::i;40094:242::-;;;;;;;;;;-1:-1:-1;40094:242:0;;;;;:::i;:::-;;:::i;38621:781::-;;;;;;;;;;-1:-1:-1;38621:781:0;;;;;:::i;:::-;;:::i;44343:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;33453:41::-;;;;;;;;;;;;;:::i;54450:32::-;;;;;;;;;;-1:-1:-1;54450:32:0;;;;;:::i;:::-;;:::i;34848:143::-;;;;;;;;;;-1:-1:-1;34848:143:0;;;;;:::i;:::-;;:::i;35984:254::-;;;;;;;;;;-1:-1:-1;35984:254:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;48891:70::-;;;;;;;;;;-1:-1:-1;48891:70:0;;;;;:::i;:::-;;:::i;37249:895::-;;;;;;;;;;-1:-1:-1;37249:895:0;;;;;:::i;:::-;;:::i;38379:58::-;;;;;;;;;;-1:-1:-1;38379:58:0;;;;;:::i;:::-;;:::i;50106:1093::-;;;;;;;;;;-1:-1:-1;50106:1093:0;;;;;:::i;:::-;;:::i;33203:21::-;;;;;;;;;;;;;:::i;35152:353::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;34720:116::-;;;;;;;;;;-1:-1:-1;34720:116:0;;;;;:::i;:::-;;:::i;42387:229::-;;;;;;;;;;-1:-1:-1;42387:229:0;;;;;:::i;:::-;;:::i;45326:123::-;;;;;;;;;;-1:-1:-1;45326:123:0;;;;;:::i;:::-;;:::i;49080:856::-;;;;;;;;;;-1:-1:-1;49080:856:0;;;;;:::i;:::-;;:::i;52274:1716::-;;;;;;;;;;-1:-1:-1;52274:1716:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;;;:::i;35003:137::-;;;;;;;;;;-1:-1:-1;35003:137:0;;;;;:::i;:::-;;:::i;38156:56::-;;;;;;;;;;-1:-1:-1;38156:56:0;;;;;:::i;:::-;;:::i;44303:29::-;;;;;;;;;;;;;:::i;34137:294::-;;;;;;;;;;;;;:::i;41773:46::-;;;;;;;;;;-1:-1:-1;41773:46:0;;;;;:::i;:::-;;:::i;43001:233::-;;;;;;;;;;-1:-1:-1;43001:233:0;;;;;:::i;:::-;;:::i;45461:178::-;;;;;;;;;;-1:-1:-1;45461:178:0;;;;;:::i;:::-;;:::i;45651:304::-;;;;;;;;;;-1:-1:-1;45651:304:0;;;;;:::i;:::-;;:::i;41193:386::-;;;;;;;;;;-1:-1:-1;41193:386:0;;;;;:::i;:::-;;:::i;51782:480::-;;;;;;;;;;-1:-1:-1;51782:480:0;;;;;:::i;:::-;;:::i;33554:18::-;;;;;;;;;;;;;:::i;35525:447::-;;;;;;;;;;-1:-1:-1;35525:447:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;:::i;41593:44::-;;;;;;;;;;-1:-1:-1;41593:44:0;;;;;:::i;:::-;;:::i;33515:28::-;;;;;;;;;;;;;:::i;33621:21::-;;;;;;;;;;;;;:::i;39849:235::-;;;;;;;;;;-1:-1:-1;39849:235:0;;;;;:::i;:::-;;:::i;43668:585::-;;;;;;;;;;;;;:::i;47445:125::-;;;;;;;;;;-1:-1:-1;47445:125:0;;;;;:::i;:::-;;:::i;54668:685::-;;;;;;:::i;:::-;;:::i;55552:1490::-;;;;;;;;;;-1:-1:-1;55552:1490:0;;;;;:::i;:::-;;:::i;41648:31::-;;;;;;;;;;;;;:::i;51211:38::-;;;;;;;;;;-1:-1:-1;51211:38:0;;;;;:::i;:::-;;:::i;33653:18::-;;;;;;;;;;;;;:::i;54002:337::-;;;;;;;;;;-1:-1:-1;54002:337:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;36344:736::-;;;;;;:::i;:::-;;:::i;34443:265::-;;;;;;;;;;;;;:::i;40880:261::-;;;:::i;44265:27::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;48125:244::-;48222:10;48184:4;48247:17;;;:9;:17;;;;;;;;-1:-1:-1;;;;;48247:22:0;;;;;;;;;;:31;;;48300;48184:4;;48222:10;;;48300:31;;;;48272:6;;48300:31;:::i;:::-;;;;;;;;-1:-1:-1;48353:4:0;;48125:244;-1:-1:-1;;;48125:244:0:o;54351:37::-;;;;;;;;;;;;-1:-1:-1;;;;;54351:37:0;;:::o;33583:27::-;;;-1:-1:-1;;;;;33583:27:0;;:::o;38223:40::-;;;;;;;;;;;;;:::o;33983:142::-;34064:13;;-1:-1:-1;;;;;34064:13:0;34050:10;:27;34042:36;;;;;;34093:13;:20;;-1:-1:-1;;;;;;34093:20:0;-1:-1:-1;;;;;34093:20:0;;;;;;;;;;33983:142::o;48381:410::-;48437:16;48622:18;;48672:8;;48669:111;;48708:4;48701:11;;;;;48669:111;48759:5;48752:12;;;;;48669:111;48381:410;;;;;:::o;45215:99::-;45290:12;;45215:99;:::o;48837:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;47590:443::-;-1:-1:-1;;;;;47737:14:0;;47667:4;47737:14;;;:9;:14;;;;;;;;47704:10;47737:22;;;;;;;;:33;-1:-1:-1;47737:33:0;47729:42;;;;;;-1:-1:-1;;;;;47794:13:0;;;;;;:8;:13;;;;;;:23;-1:-1:-1;47794:23:0;47786:32;;;;;;-1:-1:-1;;;;;47833:14:0;;;;;;;:9;:14;;;;;;;;:22;;;;;;;;;;;:32;;47859:6;;47833:14;:32;;47859:6;;47833:32;:::i;:::-;;;;-1:-1:-1;47880:26:0;;-1:-1:-1;47891:3:0;47895;47899:6;47880:10;:26::i;:::-;47921:18;47976:3;-1:-1:-1;;;;;47959:36:0;47968:6;-1:-1:-1;;;;;47959:36:0;-1:-1:-1;;;;;;;;;;;47981:6:0;47989:5;47959:36;;;;;;;:::i;:::-;;;;;;;;48017:4;48010:11;;;;47590:443;;;;;;:::o;44389:43::-;;;;;;;;;;;;;:::o;40094:242::-;-1:-1:-1;;;;;40222:27:0;;40157:4;40222:27;;;:18;;:27;;;:18;:27;;;38607:1;40197:22;;:11;:22;;;;;40157:4;;40197:52;;;:::i;:::-;-1:-1:-1;;;;;40271:24:0;;:15;:24;;;:15;;:24;:15;:24;;;40177:72;;-1:-1:-1;;;;38479:19:0;40271:39;;40177:72;;40271:39;:::i;:::-;:53;;;;:::i;38621:781::-;38704:10;38755:1;38749:4;:7;;38730:27;;;;;;38607:1;38777:4;:17;38774:138;;;38814:23;38533:1;38830:6;38814;:23::i;:::-;38774:138;;;38876:20;38883:4;38889:6;38876;:20::i;:::-;38928:11;38942:14;;;:8;:14;;;;;;;;-1:-1:-1;;;;;38942:22:0;;;;;;;;;;;38979:26;;;38942:22;39020:19;;;;;;39059:15;39056:335;;39095:12;39113:6;-1:-1:-1;;;;;39113:11:0;39131:6;39113:29;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39094:48;;;39169:7;39161:36;;;;-1:-1:-1;;;39161:36:0;;;;;;;:::i;:::-;;;;;;;;;39056:335;;;;38569:1;39221:4;:15;39218:173;;;39256:3;;;:28;;-1:-1:-1;;;39256:28:0;;-1:-1:-1;;;;;39256:3:0;;;;:12;;:28;;39269:6;;39277;;39256:28;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39218:173::-;38607:1;39308:4;:17;39305:86;;;39345:5;;:30;;-1:-1:-1;;;39345:30:0;;-1:-1:-1;;;;;39345:5:0;;;;:14;;:30;;39360:6;;39368;;39345:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;39305:86;38621:781;;;:::o;44343:35::-;44376:2;44343:35;:::o;33453:41::-;;;-1:-1:-1;;;;;33453:41:0;;:::o;54450:32::-;;;;;;;;;;;;;;;;:::i;34848:143::-;34932:12;;-1:-1:-1;;;;;34932:12:0;34918:10;:26;34910:35;;;;;;34960:12;:19;;-1:-1:-1;;;;;;34960:19:0;-1:-1:-1;;;;;34960:19:0;;;;;;;;;;34848:143::o;35984:254::-;36120:3;;:22;;-1:-1:-1;;;36120:22:0;;36040:16;;;;;;-1:-1:-1;;;;;36120:3:0;;:13;;:22;;36134:7;;36120:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36144:3;;;:22;;-1:-1:-1;;;36144:22:0;;-1:-1:-1;;;;;36144:3:0;;;;:13;;:22;;36158:7;;36144:22;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;36196:28:0;;:19;:28;;;:19;;:28;:19;:28;;;36168:25;36216:7;36168:16;:25::i;:::-;:56;;;;:::i;:::-;36111:115;;;;;;35984:254;;;;;:::o;48891:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;37249:895::-;37369:3;;;37301:22;37394:4;37369:38;;-1:-1:-1;;;37369:38:0;;37334:10;;-1:-1:-1;;;;;37369:3:0;;;;:16;;:38;;37334:10;;37394:4;;;;;37400:6;;37369:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37360:49;;;;;;37489:20;;37435:15;;37482:27;;37479:316;;37532:9;;;;37529:197;;;37565:9;:17;;-1:-1:-1;;37565:17:0;;;37618:10;;:14;;37631:1;37618:14;:::i;:::-;37605:10;:27;37529:197;;;37692:10;;:14;;37705:1;37692:14;:::i;:::-;37679:10;:27;37529:197;37768:11;37744:20;;:35;;;;;;;:::i;:::-;;;;-1:-1:-1;;37479:316:0;37811:9;37841:1;;37834:6;37823:10;;:17;;;;:::i;:::-;:19;;;;:::i;:::-;37811:31;;37883:4;37866:13;;:21;;:33;;;;;37898:1;37891:4;:8;37866:33;37857:44;;;;;;37933:4;37916:13;;:21;;;;;;;:::i;:::-;;;;;;;;37972:6;37954:14;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;37998:22:0;;;;;;38007:6;;38015:4;;37998:22;:::i;:::-;;;;;;;;38036:12;38054:6;-1:-1:-1;;;;;38054:11:0;38072:4;38054:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38035:46;;;38104:7;38096:36;;;;-1:-1:-1;;;38096:36:0;;;;;;;:::i;:::-;37249:895;;;;;:::o;38379:58::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;50106:1093::-;50179:14;50240:15;;;:6;:15;;;;;;50196:10;;-1:-1:-1;;;;;50240:15:0;50230:25;;:52;;;;-1:-1:-1;50260:22:0;;;;:13;:22;;;;;;;;50259:23;50230:52;:79;;;;-1:-1:-1;50287:22:0;;;;:13;:22;;;;;;;;50286:23;50230:79;50221:89;;;;;;50334:3;;;50355:1;50334:23;;-1:-1:-1;;;50334:23:0;;-1:-1:-1;;;;;50334:3:0;;;;:12;;:23;;50347:6;;50355:1;50334:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50325:34;;;;;;50393:8;;:27;;-1:-1:-1;;;50393:27:0;;50374:16;;-1:-1:-1;;;;;50393:8:0;;:18;;:27;;50412:7;;50393:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50374:46;;50435:44;38569:1;50458:6;50466:11;50435:12;:44::i;:::-;50520:1;50494:15;;;:6;:15;;;;;:28;;-1:-1:-1;;;;;;50494:28:0;;;50566:252;;;;50609:3;;;;50633:4;50609:42;;-1:-1:-1;;;50609:42:0;;-1:-1:-1;;;;;50609:3:0;;;;:16;;:42;;50626:6;;50633:4;;;50639:11;;50609:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50600:53;;;;;;50672:36;50696:11;50672:23;:36::i;:::-;50566:252;;;50790:12;;50771:16;;50757:30;;:11;:30;:::i;:::-;:45;;;;:::i;:::-;50747:55;;50566:252;50885:25;;;;:16;:25;;;;;;50832:79;;50856:28;50902:7;50856:19;:28::i;:::-;:54;;;;:::i;:::-;50832:23;:79::i;:::-;50951:4;;50940:47;;-1:-1:-1;;;;;50951:4:0;50957:6;50965:21;50979:7;50965:11;:21;:::i;:::-;50940:10;:47::i;:::-;51018:7;51002:12;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;51040:14:0;51049:4;;-1:-1:-1;;;;;51049:4:0;51040:14;;:8;:14;;;;;:25;;51058:7;;51040:14;:25;;51058:7;;51040:25;:::i;:::-;;;;;;;;51102:11;51082:16;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;51147:40:0;;;;;;51158:6;;51166:7;;51175:11;;51147:40;:::i;:::-;;;;;;;;50106:1093;;;;;:::o;33203:21::-;;;-1:-1:-1;;;;;33203:21:0;;:::o;35152:353::-;35375:14;;35391:13;;35406:20;;35428:10;;35440:12;;;35194:20;35454;;:11;:20;;;-1:-1:-1;;;;;;;;;;;35454:20:0;35476:16;;35152:353;;;;;;;:::o;34720:116::-;34795:3;;-1:-1:-1;;;;;34795:3:0;34781:10;:17;34773:26;;;;;;34814:3;:10;;-1:-1:-1;;;;;;34814:10:0;-1:-1:-1;;;;;34814:10:0;;;;;;;;;;34720:116::o;42387:229::-;42448:4;42510:22;;;:15;:22;;;;;;42488:19;;42448:4;;42488:44;;;:::i;:::-;42554:21;;;;:14;:21;;;;;;42468:64;;-1:-1:-1;;;;38479:19:0;42554:36;;42468:64;;42554:36;:::i;45326:123::-;-1:-1:-1;;;;;45421:16:0;45382:15;45421:16;;;:8;:16;;;;;;;45326:123::o;49080:856::-;49225:3;;49145:13;49250:4;;49225:3;49256:1;49225:33;;-1:-1:-1;;;49225:33:0;;49145:13;;49191:10;;-1:-1:-1;;;;;49225:3:0;;;;:16;;:33;;49191:10;;49250:4;;;49225:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49216:44;;;;;;49277:8;;-1:-1:-1;;;;;49277:8:0;:26;49304:9;:21;;49319:6;49304:21;;;49314:4;;-1:-1:-1;;;;;49314:4:0;49304:21;49327:8;;49337:6;49277:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49364:9;49361:264;;;49393:26;49402:6;49410:8;;49393;:26::i;:::-;49361:264;;;49458:35;49476:8;;49486:6;49458:17;:35::i;:::-;-1:-1:-1;;;;;49512:17:0;;;;;;:9;:17;;;;;;;;49535:8;;;49512:32;;;;;;;;;;;;;;;;49563:29;;;:21;:29;;;;;49593:8;;49563:39;;;;;;;;:46;;-1:-1:-1;;49563:46:0;;;;;;49361:264;49653:1;49641:8;;:13;;;;;;;:::i;:::-;;;;;;;;49689:6;49669:16;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;49729:4:0;;49710:32;;49721:6;;-1:-1:-1;;;;;49729:4:0;49735:6;49710:10;:32::i;:::-;49812:4;;49795:37;;49757:18;;-1:-1:-1;;;;;49812:4:0;;;;49795:37;;;;-1:-1:-1;;;;;;;;;;;49795:37:0;;;49818:6;;49757:18;;49795:37;:::i;:::-;;;;;;;;49852:38;49864:6;49872;49880:9;49852:38;;;;;;;;:::i;:::-;;;;;;;;49923:1;49912:8;;:12;;;;:::i;:::-;49905:19;49080:856;-1:-1:-1;;;;;49080:856:0:o;52274:1716::-;52353:22;52377:39;52418:24;52444:19;52465:24;52491:20;52513:30;52544:29;52574:23;52614:6;52638;:13;52653:1;52638:16;52635:140;;;-1:-1:-1;;;;;;52678:18:0;;;;;;:9;:18;;;;;:25;52635:140;;;-1:-1:-1;52746:13:0;;52635:140;52813:1;-1:-1:-1;;;;;52802:13:0;;;;;-1:-1:-1;;;52802:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52802:13:0;;52791:24;;52854:1;-1:-1:-1;;;;;52843:13:0;;;;;-1:-1:-1;;;52843:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52843:13:0;;52830:26;;52910:1;-1:-1:-1;;;;;52899:13:0;;;;;-1:-1:-1;;;52899:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52899:13:0;;52871:41;;52946:1;-1:-1:-1;;;;;52935:13:0;;;;;-1:-1:-1;;;52935:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52935:13:0;;52927:21;;52987:1;-1:-1:-1;;;;;52976:13:0;;;;;-1:-1:-1;;;52976:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;52976:13:0;;52963:26;;53024:1;-1:-1:-1;;;;;53013:13:0;;;;;-1:-1:-1;;;53013:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53013:13:0;;53004:22;;53070:1;-1:-1:-1;;;;;53059:13:0;;;;;-1:-1:-1;;;53059:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53059:13:0;;53041:31;;53117:1;-1:-1:-1;;;;;53106:13:0;;;;;-1:-1:-1;;;53106:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53106:13:0;;53087:32;;53157:1;-1:-1:-1;;;;;53143:16:0;;;;;-1:-1:-1;;;53143:16:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;53143:16:0;-1:-1:-1;53134:25:0;-1:-1:-1;53176:8:0;;53199:780;53217:1;53215;:3;53199:780;;;53247:13;;53244:152;;-1:-1:-1;;;;;53293:18:0;;;;;;:9;:18;;;;;:21;;53312:1;;53293:21;;;;-1:-1:-1;;;53293:21:0;;;;;;;;;;;;;;;;;53287:27;;53244:152;;;53367:6;53374:1;53367:9;;;;;;-1:-1:-1;;;53367:9:0;;;;;;;;;;;;;;;53361:15;;53244:152;53428:3;53414:8;53423:1;53414:11;;;;;;-1:-1:-1;;;53414:11:0;;;;;;;;;;;;;;;;;;:17;53466:8;;:23;;-1:-1:-1;;;53466:23:0;;-1:-1:-1;;;;;53466:8:0;;;;:18;;:23;;53485:3;;53466:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53450:10;53461:1;53450:13;;;;;;-1:-1:-1;;;53450:13:0;;;;;;;;;;;;;;:39;;;;;53554:7;-1:-1:-1;;;;;53539:22:0;:6;:11;53546:3;53539:11;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;53539:11:0;-1:-1:-1;;;;;53539:22:0;;53508:25;53534:1;53508:28;;;;;;-1:-1:-1;;;53508:28:0;;;;;;;;;:53;;;:28;;;;;;;;;;;:53;53617:4;;53592:8;;:21;;-1:-1:-1;;;53592:21:0;;-1:-1:-1;;;;;53617:4:0;;;;53592:8;;;;:16;;:21;;53609:3;;53592:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53592:29:0;;53580:6;53587:1;53580:9;;;;;;-1:-1:-1;;;53580:9:0;;;;;;;;;:41;;;:9;;;;;;;;;;:41;53656:18;;;;:13;:18;;;;;;;53640:13;;53656:18;;;;;53640:10;;53651:1;;53640:13;;;;-1:-1:-1;;;53640:13:0;;;;;;;;;:34;;;:13;;;;;;;;;;:34;53714:18;;;;:13;:18;;;;;;;53693;;53714;;;;;53693:15;;53709:1;;53693:18;;;;-1:-1:-1;;;53693:18:0;;;;;;;;;:39;;;:18;;;;;;;;;;:39;53798:21;;;;:16;:21;;;;;;;53773:24;53815:3;53773:19;:24::i;:::-;:46;;;;:::i;:::-;53751:16;53768:1;53751:19;;;;;;-1:-1:-1;;;53751:19:0;;;;;;;;;;;;;;;;;;;:68;;;;53851:11;;;;:6;:11;;;;;;;-1:-1:-1;;;;;53851:22:0;;;:11;;:22;;:58;;;53902:7;-1:-1:-1;;;;;53877:32:0;:8;;;;;;;;;-1:-1:-1;;;;;53877:8:0;-1:-1:-1;;;;;53877:16:0;;53894:3;53877:21;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;53877:32:0;;53851:58;53838:5;53844:1;53838:8;;;;;;-1:-1:-1;;;53838:8:0;;;;;;;;;:73;;;:8;;;;;;;;;;;:73;53942:8;;:21;;-1:-1:-1;;;53942:21:0;;-1:-1:-1;;;;;53942:8:0;;;;:16;;:21;;53959:3;;53942:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53930:6;53937:1;53930:9;;;;;;-1:-1:-1;;;53930:9:0;;;;;;;;;-1:-1:-1;;;;;53930:33:0;;;:9;;;;;;;;;;;:33;53220:4;53223:1;53220:4;;:::i;:::-;;;53199:780;;;;52274:1716;;;;;;;;;;;;;:::o;35003:137::-;35079:12;;-1:-1:-1;;;;;35079:12:0;35065:10;:26;35057:35;;;;;;35107:6;:21;;-1:-1:-1;;;;;;35107:21:0;-1:-1:-1;;;;;35107:21:0;;;;;;;;;;35003:137::o;38156:56::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;44303:29::-;;;;;;;:::i;34137:294::-;34205:13;;-1:-1:-1;;;;;34205:13:0;34191:10;:27;:44;;;;;34234:1;34222:9;;:13;34191:44;34183:53;;;;;;34263:9;;;34251;34287:13;;;;34334;;:34;;34263:9;;34251;-1:-1:-1;;;;;34334:13:0;;;;34263:9;;34334:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34315:53;;;34391:7;34383:36;;;;-1:-1:-1;;;34383:36:0;;;;;;;:::i;:::-;34137:294;;:::o;41773:46::-;;;;;;;;;;;;;:::o;43001:233::-;43073:3;;;;43102:4;43073:42;;-1:-1:-1;;;43073:42:0;;-1:-1:-1;;;;;43073:3:0;;;;:16;;:42;;43090:10;;43102:4;;;43108:6;;43073:42;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43065:51;;;;;;43131:31;43155:6;43131:23;:31::i;:::-;43182:40;43203:10;43215:6;43182:40;;;;;;;:::i;:::-;;;;;;;;43001:233;:::o;45461:178::-;45529:4;45550:18;45590:37;45608:3;45613:6;45621:5;45590:17;:37::i;:::-;45583:44;45461:178;-1:-1:-1;;;;45461:178:0:o;45651:304::-;45739:4;45764:15;45775:3;45764:10;:15::i;:::-;45760:184;;;45807:38;45826:3;45831:6;45839:5;45807:18;:38::i;:::-;45800:45;;;;45760:184;45891:37;45909:3;45914:6;45922:5;45891:17;:37::i;41193:386::-;41312:5;;-1:-1:-1;;;;;41312:5:0;41290:10;:28;41287:281;;;41368:1;41347:20;;:11;:20;;-1:-1:-1;;;;;;;;;;;41347:20:0;41339:31;;;;;;41437:20;;;:11;:20;;-1:-1:-1;;;;;;;;;;;41437:20:0;41415:19;-1:-1:-1;;;41415:5:0;:19;:::i;:::-;:42;;;;:::i;:::-;38607:1;41389:22;;;;:11;:22;;;:68;;:22;;;:68;;;;;:::i;:::-;;;;-1:-1:-1;;41481:15:0;;;;;;41490:5;;41481:15;:::i;:::-;;;;;;;;41287:281;;;41535:17;;-1:-1:-1;;;41535:17:0;;;;;;;:::i;51782:480::-;51837:14;51887:15;;;:6;:15;;;;;;51854:10;;-1:-1:-1;;;;;51887:15:0;:25;;:52;;;;-1:-1:-1;51917:22:0;;;;:13;:22;;;;;;;;51916:23;51887:52;51879:61;;;;;;51969:8;;:27;;-1:-1:-1;;;51969:27:0;;51955:11;;-1:-1:-1;;;;;51969:8:0;;:18;;:27;;51988:7;;51969:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51955:41;;52011:39;38569:1;52034:6;52042;52011:12;:39::i;:::-;52091:1;52065:15;;;:6;:15;;;;;:28;;-1:-1:-1;;;;;;52065:28:0;;;52108:34;52072:7;52135:6;52108:17;:34::i;:::-;52159:8;;;52181:4;52159:44;;-1:-1:-1;;;52159:44:0;;-1:-1:-1;;;;;52159:8:0;;;;:21;;:44;;52181:4;;;52187:6;;52195:7;;52159:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52223:27;52234:6;52242:7;52223:27;;;;;;;:::i;:::-;;;;;;;;51782:480;;;:::o;33554:18::-;;;-1:-1:-1;;;;;33554:18:0;;:::o;35525:447::-;35580:16;35598;35616:18;35636:19;35657:17;35676;35717:18;35727:7;35717:9;:18::i;:::-;-1:-1:-1;;;;;35737:24:0;;:15;:24;;;:15;;:24;;;:15;:24;;;;35795:17;:26;;;;;;35737:24;;35763:29;;35737:24;35763:11;:29::i;:::-;:58;;;;:::i;:::-;-1:-1:-1;;;;;35855:26:0;;:17;:26;;;:17;;:26;:17;:26;;;35823:29;38569:1;35873:7;35823:11;:29::i;:::-;:58;;;;:::i;:::-;35911:1;;:9;;35913:7;35911:9;:::i;:::-;35883:3;;;;;;;;;-1:-1:-1;;;;;35883:3:0;-1:-1:-1;;;;;35883:13:0;;35897:7;35905:4;;;;;;;;-1:-1:-1;;;;;35905:4:0;35883:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;35950:1;;35952:7;35950:9;;;;:::i;:::-;35922:3;;;;;;;;;-1:-1:-1;;;;;35922:3:0;-1:-1:-1;;;;;35922:13:0;;35936:7;35944:4;;;;;;;;-1:-1:-1;;;;;35944:4:0;35922:27;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:37;35709:251;;;;;;;;;;;;35525:447;;;;;;;:::o;41593:44::-;;;;;;;;;;;;;:::o;33515:28::-;;;-1:-1:-1;;;;;33515:28:0;;:::o;33621:21::-;;;;:::o;39849:235::-;39918:4;39978:13;;;:7;:13;;;;;;;;-1:-1:-1;;;;;39978:22:0;;;;;;;;;;39958:17;;;:11;:17;;;;;;39918:4;;39958:42;;;:::i;:::-;40022:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;40022:21:0;;;;;;;;;;39938:62;;-1:-1:-1;;;;38479:19:0;40022:36;;39938:62;;40022:36;:::i;:::-;:50;;;;:::i;43668:585::-;43779:11;;43738:15;;43794:5;;43773:17;;43738:15;43773:17;:::i;:::-;43772:27;:55;;;;-1:-1:-1;38569:1:0;43826;43803:20;:11;:20;;;;:24;;43772:55;:78;;;;;43849:1;43832:14;;:18;43772:78;43768:474;;;43870:11;:17;;;43991:12;;;38569:1;43906:23;43967:20;;;:11;:20;;;;;43950:16;;:37;;43967:20;43950:37;:::i;:::-;43932:14;;:56;;;;:::i;:::-;:71;;;;:::i;:::-;43906:97;;44040:18;44022:14;;:36;;;;;;;:::i;:::-;;;;-1:-1:-1;;38569:1:0;44136:20;;:11;:20;;;;44101:32;-1:-1:-1;;;44101:18:0;:32;:::i;:::-;:55;;;;:::i;:::-;38569:1;44077:20;;;;:11;:20;;;:79;;:20;;;:79;;;;;:::i;:::-;;;;-1:-1:-1;;44180:46:0;;;;;;44207:18;;44180:46;:::i;:::-;;;;;;;;43768:474;;43668:585;:::o;47445:125::-;-1:-1:-1;;;;;47539:14:0;;;47511:4;47539:14;;;:9;:14;;;;;;;;:19;;;;;;;;;;;;;47445:125::o;54668:685::-;54775:13;54855:15;;;:6;:15;;;;;;54821:10;;-1:-1:-1;;;;;54855:15:0;:25;;:52;;;;-1:-1:-1;54885:22:0;;;;:13;:22;;;;;;;;54884:23;54855:52;:79;;;;-1:-1:-1;54912:22:0;;;;:13;:22;;;;;;;;54911:23;54855:79;54846:90;;;;;;54961:6;;:51;;-1:-1:-1;;;54961:51:0;;54951:7;;-1:-1:-1;;;;;54961:6:0;;:24;;54993:9;;54961:51;;:6;;;;:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;55027:16;;;;:12;:16;;;;;;;;:26;;;55068:16;;;:7;:16;;;;;:36;;-1:-1:-1;;;;;;55068:36:0;-1:-1:-1;;;;;55068:36:0;;;;;55119:3;:12;;;;;:19;;55027:16;;-1:-1:-1;55119:19:0;;:12;;:19;;;;:::i;:::-;-1:-1:-1;55153:22:0;;;;:13;:22;;;;;;;;:29;;-1:-1:-1;;55153:29:0;55178:4;55153:29;;;55262:16;:25;;;;;;55202:115;;55216:6;;55167:7;;55233:28;55167:7;55233:19;:28::i;:::-;:54;;;;:::i;:::-;55289:17;55308:4;55314:2;55202:115;;;;;;;;;;;:::i;:::-;;;;;;;;55339:2;54668:685;-1:-1:-1;;;;;54668:685:0:o;55552:1490::-;55713:14;55813:22;;;:12;:22;;;;;;55881:6;;55713:14;;;;-1:-1:-1;;;;;55881:6:0;55859:10;:29;55850:40;;;;;;55911:6;55907:270;55923:15;55919:1;:19;55907:270;;;55976:13;55990:1;55976:16;;;;;;-1:-1:-1;;;55976:16:0;;;;;;;;;;;;;;;55964:28;;56028:1;56014:10;56025:1;56014:13;;;;;;-1:-1:-1;;;56014:13:0;;;;;;;;;;;;;;;:15;56011:151;;;56053:21;56065:9;56053:21;;:::i;:::-;;;56011:151;;;56121:21;56133:9;56121:21;;:::i;:::-;;;56011:151;55940:4;55943:1;55940:4;;:::i;:::-;;;55907:270;;;;56197:15;56196:16;:37;;;;;56225:8;56216;:17;56196:37;56193:793;;;56303:22;;;;:13;:22;;;;;;;;56299:595;;56349:22;;;;:13;:22;;;;;;;;:29;;-1:-1:-1;;56349:29:0;56374:4;56349:29;;;56415:16;:25;;;;;;56466:8;;56463:292;;56531:1;56506:15;;;:6;:15;;;;;;-1:-1:-1;;;;;56506:15:0;56502:230;;56566:31;56590:6;56566:23;:31::i;:::-;56502:230;;;56660:17;56678:15;;;:6;56660:17;56678:15;;;56660:17;56678:15;;;;-1:-1:-1;;;;;56678:15:0;56660:34;;:17;:34;;;;;:44;;56698:6;;56660:17;:44;;56698:6;;56660:44;:::i;:::-;;;;-1:-1:-1;;56502:230:0;56782:92;56798:6;:15;56805:7;56798:15;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56798:15:0;56815:7;56824:6;56832:7;:16;56840:7;56832:16;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56832:16:0;56850:3;:12;56854:7;56850:12;;;;;;;;;;;56864:8;56782:92;;;;;;;;;;;:::i;:::-;;;;;;;;56299:595;;56193:793;;;56937:33;56953:7;56961:8;56937:33;;;;;;;:::i;:::-;;;;;;;;56193:793;57025:5;57000:22;;;:13;:22;;;;;:30;;-1:-1:-1;;57000:30:0;;;-1:-1:-1;;;;;;;;55552:1490:0:o;41648:31::-;;;;:::o;51211:38::-;;;;;;;;;;;;-1:-1:-1;;;;;51211:38:0;;:::o;33653:18::-;;;;:::o;54002:337::-;54177:8;;54096:6;;;;-1:-1:-1;;;;;54177:8:0;54155:10;:31;54146:42;;;;;;54233:8;;:27;;-1:-1:-1;;;54233:27:0;;54203:59;;54224:7;;-1:-1:-1;;;;;54233:8:0;;;;:18;;:27;;54224:7;;54233:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54203:20;:59::i;:::-;54277:23;54286:4;54292:7;54277:8;:23::i;36344:736::-;-1:-1:-1;;;;;36415:20:0;;36411:80;;-1:-1:-1;36465:10:0;36411:80;36527:1;36515:9;:13;36507:22;;;;;;36628:7;;36557:9;;36544:10;;36639:9;;36610:25;;:15;:25;:::i;:::-;:38;36607:68;;36669:4;36659:9;:5;36667:1;36659:9;:::i;:::-;:14;;;;:::i;:::-;36650:23;;36607:68;36699:6;36689;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;36722:8:0;;-1:-1:-1;36733:14:0;36741:6;36733:5;:14;:::i;:::-;36722:25;;36762:17;36767:6;36775:3;36762:4;:17::i;:::-;36794;36878:12;;36855:19;;36836:16;;36821:12;;:31;;;;:::i;:::-;:53;;;;:::i;:::-;36814:61;;:3;:61;:::i;:::-;:76;;;;:::i;:::-;36794:96;-1:-1:-1;36918:18:0;36794:96;36918:3;:18;:::i;:::-;36905:9;;:31;;;;;;;:::i;:::-;;;;;;;;36968:12;36951:13;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;37000:25:0;;;;;;37013:6;;37021:3;;37000:25;:::i;:::-;;;;;;;;37040:28;:26;:28::i;34443:265::-;34511:3;;-1:-1:-1;;;;;34511:3:0;34497:10;:17;:31;;;;;34527:1;34518:6;;:10;34497:31;34489:40;;;;;;34556:6;;;34544:9;34577:10;;;;34621:3;;:24;;34556:6;;34544:9;-1:-1:-1;;;;;34621:3:0;;;;34556:6;;34621:24;;;:::i;40880:261::-;40940:8;40983:20;;:11;:20;;-1:-1:-1;;;;;;;;;;;40983:20:0;40951:9;;40975:31;;;;;;41065:20;;;:11;:20;;-1:-1:-1;;;;;;;;;;;41065:20:0;41045:17;-1:-1:-1;;;41045:3:0;:17;:::i;:::-;:40;;;;:::i;:::-;41021:20;;;;:11;:20;;;:64;;:20;;;:64;;;;;:::i;:::-;;;;-1:-1:-1;;41105:24:0;;;;;;41125:3;;41105:24;:::i;46768:665::-;-1:-1:-1;;;;;46881:15:0;;;;;;:8;:15;;;;;;46870:26;;;46861:37;;;;;;-1:-1:-1;;;;;46944:15:0;;;;;;:8;:15;;;;;:26;;46963:7;;46944:15;:26;;46963:7;;46944:26;:::i;:::-;;;;-1:-1:-1;;;;;;;46985:13:0;;;;;;:8;:13;;;;;:24;;47002:7;;46985:13;:24;;47002:7;;46985:24;:::i;:::-;;;;-1:-1:-1;47031:17:0;;-1:-1:-1;47042:5:0;47031:10;:17::i;:::-;47026:277;;47079:4;;-1:-1:-1;;;;;47072:11:0;;;47079:4;;47072:11;47069:163;;47117:3;;;;47141:4;47117:38;;-1:-1:-1;;;47117:38:0;;-1:-1:-1;;;;;47117:3:0;;;;:16;;:38;;47134:5;;47141:4;;;47147:7;;47117:38;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47108:49;;;;;;47180:32;47204:7;47180:23;:32::i;:::-;47250:37;38533:1;47272:5;47279:7;47250:12;:37::i;:::-;47323:15;47334:3;47323:10;:15::i;:::-;47319:53;;47340:32;38533:1;47359:3;47364:7;47340:9;:32::i;:::-;47408:3;-1:-1:-1;;;;;47392:29:0;47401:5;-1:-1:-1;;;;;47392:29:0;;47413:7;47392:29;;;;;;:::i;:::-;;;;;;;;46768:665;;;:::o;40356:463::-;40424:13;40440:26;40452:4;40458:7;40440:11;:26::i;:::-;40506:17;;;;:11;:17;;;;;;;;;40481:7;:13;;;;;-1:-1:-1;;;;;40481:22:0;;;;;;;;;;;:42;;;;40538:14;;;:8;:14;;;;;:23;;;;;;;;:35;;40424:42;;-1:-1:-1;40424:42:0;;40538:23;;40506:17;40538:35;;40424:42;;40538:35;:::i;:::-;;;;-1:-1:-1;;40591:15:0;40588:220;;40637:25;40654:7;40637:16;:25::i;:::-;40711:22;;-1:-1:-1;;;;;40681:27:0;;40711:22;40681:27;;;:18;40711:22;40681:27;;;40711:22;40681:27;;;:52;;;;40752:19;:28;;;;;:40;;40626:36;;-1:-1:-1;40626:36:0;;40752:28;;40711:22;40752:40;;40626:36;;40752:40;:::i;:::-;;;;-1:-1:-1;;40356:463:0;;;:::o;39630:207::-;39716:21;39723:4;39729:7;39716:6;:21::i;:::-;39752:17;;;;:11;:17;;;;;:27;;39773:6;;39752:17;:27;;39773:6;;39752:27;:::i;:::-;;;;-1:-1:-1;;39794:12:0;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;39794:21:0;;;;;;;;;:31;;39819:6;;39794:12;:31;;39819:6;;39794:31;:::i;43246:342::-;43318:19;;43314:263;;43385:6;43363:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;43314:263:0;;-1:-1:-1;43314:263:0;;43501:19;;-1:-1:-1;;;43464:18:0;;43455:6;:27;;;;:::i;:::-;43453:45;;;;:::i;:::-;:67;;;;:::i;:::-;43430:19;;:90;;;;;;;:::i;:::-;;;;-1:-1:-1;;43560:1:0;43539:18;:22;43246:342;:::o;51312:399::-;51383:15;;;;:6;:15;;;;;;;;:21;;-1:-1:-1;;;;;;51383:21:0;-1:-1:-1;;;;;51383:21:0;;;;;;;;51426:26;;:21;:26;;;;;:35;;;;;;;;;;;51421:166;;-1:-1:-1;;;;;51482:14:0;;;;;;:9;:14;;;;;;;;:28;;;;;;;;;;;;;;;;;;51529:26;;;:21;:26;;;;;:35;;;;;;;;:42;;-1:-1:-1;;51529:42:0;;;;;;51421:166;51628:8;;:27;;-1:-1:-1;;;51628:27:0;;51603:54;;38569:1;;51623:3;;-1:-1:-1;;;;;51628:8:0;;:18;;:27;;51647:7;;51628:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51603:9;:54::i;:::-;51677:22;51686:3;51691:7;51677:22;;;;;;;:::i;41830:265::-;41909:20;;;;:13;:20;;;;;;;;41905:179;;41949:21;41964:5;41949:14;:21::i;:::-;42012:6;41989:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;42037:21:0;;;;:14;:21;;;;;:31;;42062:6;;42037:21;:31;;42062:6;;42037:31;:::i;:::-;;;;-1:-1:-1;;41830:265:0;;:::o;46040:244::-;46130:4;46151:35;46162:10;46174:3;46179:6;46151:10;:35::i;:::-;46227:3;-1:-1:-1;;;;;46206:40:0;46215:10;-1:-1:-1;;;;;46206:40:0;-1:-1:-1;;;;;;;;;;;46232:6:0;46240:5;46206:40;;;;;;;:::i;46369:387::-;46460:4;46481:35;46492:10;46504:3;46509:6;46481:10;:35::i;:::-;46609:49;;-1:-1:-1;;;46609:49:0;;46590:3;;-1:-1:-1;;;;;46609:22:0;;;;;:49;;46632:10;;46644:6;;46652:5;;46609:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46699:3;-1:-1:-1;;;;;46678:40:0;46687:10;-1:-1:-1;;;;;46678:40:0;-1:-1:-1;;;;;;;;;;;46704:6:0;46712:5;46678:40;;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;46740:4:0;;46369:387;-1:-1:-1;;;;46369:387:0:o;42107:268::-;42189:20;;;;:13;:20;;;;;;;;42185:179;;42229:21;42244:5;42229:14;:21::i;:::-;42292:6;42269:19;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;42317:21:0;;;;:14;:21;;;;;:31;;42342:6;;42317:21;:31;;42342:6;;42317:31;:::i;44939:264::-;-1:-1:-1;;;;;45007:18:0;;;;;;:8;:18;;;;;:28;;45029:6;;45007:18;:28;;45029:6;;45007:28;:::i;:::-;;;;;;;;45066:6;45050:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;45091:20:0;;-1:-1:-1;45102:8:0;45091:10;:20::i;:::-;45087:62;;45113:36;38533:1;45132:8;45142:6;45113:9;:36::i;:::-;45174:8;-1:-1:-1;;;;;45169:22:0;;45184:6;45169:22;;;;;;:::i;:::-;;;;;;;;44939:264;;:::o;39414:204::-;39497:21;39504:4;39510:7;39497:6;:21::i;:::-;39533:17;;;;:11;:17;;;;;:27;;39554:6;;39533:17;:27;;39554:6;;39533:27;:::i;:::-;;;;-1:-1:-1;;39575:12:0;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;39575:21:0;;;;;;;;;:31;;39600:6;;39575:12;:31;;39600:6;;39575:31;:::i;42636:230::-;42695:13;42711:26;42731:5;42711:19;:26::i;:::-;42777:19;;42752:22;;;;:15;:22;;;;;;;;:44;;;;42811:16;:23;;;;;:35;;42695:42;;-1:-1:-1;42695:42:0;;42811:23;;42752:22;42811:35;;42695:42;;42811: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:1628::-;-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:1628;;;;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:81;14709:6;14703:3;14692:9;14688:19;14635:81;:::i;:::-;14732:18;14759:100;;;;14873:1;14868:320;;;;14725:463;;14759:100;-1:-1:-1;;14792:24:1;;14780:37;;14837:12;;;;-1:-1:-1;14759:100:1;;14868:320;14904:39;14936:6;14904:39;:::i;:::-;14965:4;14982:165;14996:6;14993:1;14990:13;14982:165;;;15074:14;;15061:11;;;15054:35;15117:16;;;;15011:10;;14982:165;;;15167:11;;;-1:-1:-1;;14725:463:1;-1:-1:-1;;;;;15239:3:1;15224:19;;;;15217:35;;;;15205:3;13888:1370;-1:-1:-1;;;;;;;;13888:1370:1:o;15263:2291::-;;16028:3;16058:2;16047:9;16040:21;16084:62;16142:2;16131:9;16127:18;16119:6;16084:62;:::i;:::-;16070:76;;16165:2;16215:9;16207:6;16203:22;16198:2;16187:9;16183:18;16176:50;16249:47;16289:6;16281;16249:47;:::i;:::-;16235:61;;16344:9;16336:6;16332:22;16327:2;16316:9;16312:18;16305:50;16378;16421:6;16413;16378:50;:::i;:::-;16364:64;;16476:9;16468:6;16464:22;16459:2;16448:9;16444:18;16437:50;16510:47;16550:6;16542;16510:47;:::i;:::-;16496:61;;16606:9;16598:6;16594:22;16588:3;16577:9;16573:19;16566:51;16640:47;16680:6;16672;16640:47;:::i;:::-;16626:61;;16736:9;16728:6;16724:22;16718:3;16707:9;16703:19;16696:51;16770:47;16810:6;16802;16770:47;:::i;:::-;16756:61;;16866:9;16858:6;16854:22;16848:3;16837:9;16833:19;16826:51;16900:50;16943:6;16935;16900:50;:::i;:::-;16886:64;;16999:9;16991:6;16987:22;16981:3;16970:9;16966:19;16959:51;17033:47;17073:6;17065;17033:47;:::i;:::-;17117:22;;;17111:3;17096:19;;17089:51;17189:13;;17211:22;;;17287:15;;;;-1:-1:-1;17249:15:1;;;;17320:4;17333:195;17347:6;17344:1;17341:13;17333:195;;;17412:13;;-1:-1:-1;;;;;17408:39:1;17396:52;;17503:15;;;;17468:12;;;;17444:1;17362:9;17333:195;;;-1:-1:-1;17545:3:1;;16008:1546;-1:-1:-1;;;;;;;;;;;;;;16008:1546:1:o;17559:187::-;17724:14;;17717:22;17699:41;;17687:2;17672:18;;17654:92::o;17751:202::-;-1:-1:-1;;;;;;17913:33:1;;;;17895:52;;17883:2;17868:18;;17850:103::o;18403:275::-;18607:4;18595:17;;;;18577:36;;18656:14;18649:22;18644:2;18629:18;;18622:50;18565:2;18550:18;;18532:146::o;18683:221::-;;18832:2;18821:9;18814:21;18852:46;18894:2;18883:9;18879:18;18871:6;18852:46;:::i;18909:330::-;19111:2;19093:21;;;19150:1;19130:18;;;19123:29;-1:-1:-1;;;19183:2:1;19168:18;;19161:37;19230:2;19215:18;;19083:156::o;19244:340::-;19446:2;19428:21;;;19485:2;19465:18;;;19458:30;-1:-1:-1;;;19519:2:1;19504:18;;19497:46;19575:2;19560:18;;19418:166::o;19589:177::-;19735:25;;;19723:2;19708:18;;19690:76::o;19771:290::-;;19946:6;19935:9;19928:25;19989:2;19984;19973:9;19969:18;19962:30;20009:46;20051:2;20040:9;20036:18;20028:6;20009:46;:::i;20066:248::-;20240:25;;;20296:2;20281:18;;20274:34;20228:2;20213:18;;20195:119::o;20319:319::-;20521:25;;;20577:2;20562:18;;20555:34;;;;20620:2;20605:18;;20598:34;20509:2;20494:18;;20476:162::o;20643:555::-;20918:25;;;20974:2;20959:18;;20952:34;;;;21017:2;21002:18;;20995:34;;;;21060:2;21045:18;;21038:34;21116:14;21109:22;21103:3;21088:19;;21081:51;21176:14;21169:22;21163:3;21148:19;;21141:51;20905:3;20890:19;;20872:326::o;21203:607::-;21518:25;;;21574:2;21559:18;;21552:34;;;;21617:2;21602:18;;21595:34;;;;21660:2;21645:18;;21638:34;;;;21703:3;21688:19;;21681:35;21747:3;21732:19;;21725:35;21791:3;21776:19;;21769:35;21505:3;21490:19;;21472:338::o;21815:184::-;21987:4;21975:17;;;;21957:36;;21945:2;21930:18;;21912:87::o;22004:251::-;22074:2;22068:9;22104:17;;;-1:-1:-1;;;;;22136:34:1;;22172:22;;;22133:62;22130:2;;;22198:18;;:::i;:::-;22234:2;22227:22;22048:207;;-1:-1:-1;22048:207:1:o;22260:191::-;;-1:-1:-1;;;;;22350:6:1;22347:30;22344:2;;;22380:18;;:::i;:::-;-1:-1:-1;22440:4:1;22421:17;;;22417:28;;22334:117::o;22456:129::-;;22524:17;;;22574:4;22558:21;;;22514:71::o;22762:128::-;;22833:1;22829:6;22826:1;22823:13;22820:2;;;22839:18;;:::i;:::-;-1:-1:-1;22875:9:1;;22810:80::o;22895:217::-;;22961:1;22951:2;;-1:-1:-1;;;22986:31:1;;23040:4;23037:1;23030:15;23068:4;22993:1;23058:15;22951:2;-1:-1:-1;23097:9:1;;22941:171::o;23117:168::-;;23223:1;23219;23215:6;23211:14;23208:1;23205:21;23200:1;23193:9;23186:17;23182:45;23179:2;;;23230:18;;:::i;:::-;-1:-1:-1;23270:9:1;;23169:116::o;23290:125::-;;23358:1;23355;23352:8;23349:2;;;23363:18;;:::i;:::-;-1:-1:-1;23400:9:1;;23339:76::o;23420:380::-;23505:1;23495:12;;23552:1;23542:12;;;23563:2;;23617:4;23609:6;23605:17;23595:27;;23563:2;23670;23662:6;23659:14;23639:18;23636:38;23633:2;;;23716:10;23711:3;23707:20;23704:1;23697:31;23751:4;23748:1;23741:15;23779:4;23776:1;23769:15;23805:127;23866:10;23861:3;23857:20;23854:1;23847:31;23897:4;23894:1;23887:15;23921:4;23918:1;23911:15;23937:127;23998:10;23993:3;23989:20;23986:1;23979:31;24029:4;24026:1;24019:15;24053:4;24050:1;24043:15;24069:133;-1:-1:-1;;;;;24146:31:1;;24136:42;;24126:2;;24192:1;24189;24182:12;24207:120;24295:5;24288:13;24281:21;24274:5;24271:32;24261:2;;24317:1;24314;24307:12
Swarm Source
ipfs://7a77d8d153b3f82b2db67f76fb95494ead3741d334e8b56d53562a18aaaf0726
Loading...
Loading
Loading...
Loading
Net Worth in USD
$24.47
Net Worth in ETH
0.01145
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,137.47 | 0.0115 | $24.47 |
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.