Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 167 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Transfer From | 15271746 | 1318 days ago | IN | 0 ETH | 0.00128609 | ||||
| Adminmint | 15265019 | 1319 days ago | IN | 0 ETH | 0.00179936 | ||||
| Set Approval For... | 15256949 | 1320 days ago | IN | 0 ETH | 0.00111405 | ||||
| Transfer From | 15252822 | 1321 days ago | IN | 0 ETH | 0.00035968 | ||||
| Adminmint | 15247121 | 1322 days ago | IN | 0 ETH | 0.00058995 | ||||
| Transfer From | 15246513 | 1322 days ago | IN | 0 ETH | 0.000433 | ||||
| Adminmint | 15246137 | 1322 days ago | IN | 0 ETH | 0.00161214 | ||||
| Set Whitelist Sa... | 15246106 | 1322 days ago | IN | 0 ETH | 0.00019258 | ||||
| Set Price | 15246106 | 1322 days ago | IN | 0 ETH | 0.00020628 | ||||
| Transfer | 15246060 | 1322 days ago | IN | 0.02 ETH | 0.00174775 | ||||
| Transfer | 15246003 | 1322 days ago | IN | 0.04 ETH | 0.00315922 | ||||
| Transfer | 15245831 | 1322 days ago | IN | 0.02 ETH | 0.00390332 | ||||
| Transfer | 15245476 | 1322 days ago | IN | 0.03 ETH | 0.00215191 | ||||
| Set Approval For... | 15244147 | 1322 days ago | IN | 0 ETH | 0.00054557 | ||||
| Whitelist Addres... | 15241738 | 1323 days ago | IN | 0 ETH | 0.00020751 | ||||
| Whitelist Addres... | 15241578 | 1323 days ago | IN | 0 ETH | 0.0003837 | ||||
| Adminmint | 15240510 | 1323 days ago | IN | 0 ETH | 0.00230444 | ||||
| Transfer | 15240215 | 1323 days ago | IN | 0.00996532 ETH | 0.00024155 | ||||
| Transfer | 15240213 | 1323 days ago | IN | 0.01020688 ETH | 0.00022425 | ||||
| Transfer | 15240107 | 1323 days ago | IN | 0.03 ETH | 0.00292739 | ||||
| Adminmint | 15239820 | 1323 days ago | IN | 0 ETH | 0.0043554 | ||||
| Transfer | 15239817 | 1323 days ago | IN | 0.01 ETH | 0.0015629 | ||||
| Transfer | 15239800 | 1323 days ago | IN | 0.01 ETH | 0.00194054 | ||||
| Transfer | 15239766 | 1323 days ago | IN | 0.01 ETH | 0.0017593 | ||||
| Adminmint | 15239747 | 1323 days ago | IN | 0 ETH | 0.00182267 |
Latest 24 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 15246060 | 1322 days ago | 0.018 ETH | ||||
| Transfer | 15246060 | 1322 days ago | 0.002 ETH | ||||
| Transfer | 15246003 | 1322 days ago | 0.036 ETH | ||||
| Transfer | 15246003 | 1322 days ago | 0.004 ETH | ||||
| Transfer | 15245831 | 1322 days ago | 0.018 ETH | ||||
| Transfer | 15245831 | 1322 days ago | 0.002 ETH | ||||
| Transfer | 15245476 | 1322 days ago | 0.027 ETH | ||||
| Transfer | 15245476 | 1322 days ago | 0.003 ETH | ||||
| Transfer | 15240107 | 1323 days ago | 0.027 ETH | ||||
| Transfer | 15240107 | 1323 days ago | 0.003 ETH | ||||
| Transfer | 15239817 | 1323 days ago | 0.009 ETH | ||||
| Transfer | 15239817 | 1323 days ago | 0.001 ETH | ||||
| Transfer | 15239800 | 1323 days ago | 0.009 ETH | ||||
| Transfer | 15239800 | 1323 days ago | 0.001 ETH | ||||
| Transfer | 15239766 | 1323 days ago | 0.009 ETH | ||||
| Transfer | 15239766 | 1323 days ago | 0.001 ETH | ||||
| Transfer | 15239326 | 1323 days ago | 0.009 ETH | ||||
| Transfer | 15239326 | 1323 days ago | 0.001 ETH | ||||
| Transfer | 15239319 | 1323 days ago | 0.009 ETH | ||||
| Transfer | 15239319 | 1323 days ago | 0.001 ETH | ||||
| Transfer | 15239195 | 1323 days ago | 0.001 ETH | ||||
| Transfer | 15239103 | 1323 days ago | 0.001 ETH | ||||
| Transfer | 15233525 | 1324 days ago | 0.009 ETH | ||||
| Transfer | 15233525 | 1324 days ago | 0.001 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BuckBuddies
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-07-26
*/
// File: @openzeppelin/contracts/utils/Counters.sol
// OpenZeppelin Contracts v4.4.1 (utils/Counters.sol)
pragma solidity ^0.8.0;
/**
* @title Counters
* @author Matt Condon (@shrugs)
* @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number
* of elements in a mapping, issuing ERC721 ids, or counting request ids.
*
* Include with `using Counters for Counters.Counter;`
*/
library Counters {
struct Counter {
// This variable should never be directly accessed by users of the library: interactions must be restricted to
// the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
// this feature: see https://github.com/ethereum/solidity/issues/4637
uint256 _value; // default: 0
}
function current(Counter storage counter) internal view returns (uint256) {
return counter._value;
}
function increment(Counter storage counter) internal {
unchecked {
counter._value += 1;
}
}
function decrement(Counter storage counter) internal {
uint256 value = counter._value;
require(value > 0, "Counter: decrement overflow");
unchecked {
counter._value = value - 1;
}
}
function reset(Counter storage counter) internal {
counter._value = 0;
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// File: @openzeppelin/contracts/utils/Strings.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
/**
* @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.
*/
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
}
// File: @openzeppelin/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/security/Pausable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which allows children to implement an emergency stop
* mechanism that can be triggered by an authorized account.
*
* This module is used through inheritance. It will make available the
* modifiers `whenNotPaused` and `whenPaused`, which can be applied to
* the functions of your contract. Note that they will not be pausable by
* simply including this module, only once the modifiers are put in place.
*/
abstract contract Pausable is Context {
/**
* @dev Emitted when the pause is triggered by `account`.
*/
event Paused(address account);
/**
* @dev Emitted when the pause is lifted by `account`.
*/
event Unpaused(address account);
bool private _paused;
/**
* @dev Initializes the contract in unpaused state.
*/
constructor() {
_paused = false;
}
/**
* @dev Modifier to make a function callable only when the contract is not paused.
*
* Requirements:
*
* - The contract must not be paused.
*/
modifier whenNotPaused() {
_requireNotPaused();
_;
}
/**
* @dev Modifier to make a function callable only when the contract is paused.
*
* Requirements:
*
* - The contract must be paused.
*/
modifier whenPaused() {
_requirePaused();
_;
}
/**
* @dev Returns true if the contract is paused, and false otherwise.
*/
function paused() public view virtual returns (bool) {
return _paused;
}
/**
* @dev Throws if the contract is paused.
*/
function _requireNotPaused() internal view virtual {
require(!paused(), "Pausable: paused");
}
/**
* @dev Throws if the contract is not paused.
*/
function _requirePaused() internal view virtual {
require(paused(), "Pausable: not paused");
}
/**
* @dev Triggers stopped state.
*
* Requirements:
*
* - The contract must not be paused.
*/
function _pause() internal virtual whenNotPaused {
_paused = true;
emit Paused(_msgSender());
}
/**
* @dev Returns to normal state.
*
* Requirements:
*
* - The contract must be paused.
*/
function _unpause() internal virtual whenPaused {
_paused = false;
emit Unpaused(_msgSender());
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @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
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
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 `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
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/contracts/utils/introspection/ERC165.sol
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)
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/contracts/token/ERC721/IERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/IERC721.sol)
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`.
*
* 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;
/**
* @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 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 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 the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @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);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)
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);
/**
* @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/contracts/token/ERC721/extensions/IERC721Metadata.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)
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/contracts/token/ERC721/ERC721.sol
// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC721/ERC721.sol)
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: address zero is not a valid owner");
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: invalid token ID");
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) {
_requireMinted(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not token owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual override returns (address) {
_requireMinted(tokenId);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual override {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token 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: caller is not token 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) {
address owner = ERC721.ownerOf(tokenId);
return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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);
_afterTokenTransfer(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);
_afterTokenTransfer(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 from incorrect owner");
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);
_afterTokenTransfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits an {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(
address owner,
address operator,
bool approved
) internal virtual {
require(owner != operator, "ERC721: approve to caller");
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` has not been minted yet.
*/
function _requireMinted(uint256 tokenId) internal view virtual {
require(_exists(tokenId), "ERC721: invalid token ID");
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* The call is not executed if the target address is not a contract.
*
* @param from address representing the previous owner of the given token ID
* @param to target address that will receive the tokens
* @param tokenId uint256 ID of the token to be transferred
* @param data bytes optional data to send along with the call
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory data
) private returns (bool) {
if (to.isContract()) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert("ERC721: transfer to non ERC721Receiver implementer");
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol)
pragma solidity ^0.8.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
return _allTokens[index];
}
/**
* @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 override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: contracts/Buck Buddies 1.sol
pragma solidity ^0.8.0;
contract BuckBuddies is ERC721Enumerable, Ownable, Pausable {
bool public whitelistSaleIsActive = false;
uint256 public price = 0.02 ether;
string private _baseURIextended;
string public baseURI = "ipfs://QmXsJQia51mvAGjbCQSVFW2M5WBKE2MFRdfLkt3c3h62Yk/Erc721_Data_";
string baseExtension = ".json";
address marketWallet = 0x6EBf803488cA4e43D0048a715Ac6F51F6B119c1A;
address charityWallet = 0xe0b77deA144782618763A534414637a9bbC85bEF;
uint256 public maxSupply = 1000;
uint256 public maxMintAmount = 5 ;
mapping(address=>bool) allowedUsers;
constructor() ERC721("BuckBuddies", "BUBU") {
}
function setWhitelistSale(bool _state) public onlyOwner {
whitelistSaleIsActive = _state;
}
function isWhitelisted(address user) public view returns (bool){
return allowedUsers[user];
}
modifier onlyusers() {
require(allowedUsers[msg.sender]);
_;
}
function _baseURI() internal view virtual override returns (string memory) {
return baseURI;
}
function whitelistAddress (address user) public onlyOwner {
allowedUsers[user]=true;
}
function blacklistAddress (address user) public onlyOwner {
allowedUsers[user]=false;
}
function setmaxMintAmount(uint256 _newmaxMintAmount) external onlyOwner {
maxMintAmount = _newmaxMintAmount;
}
function setmaxSupply(uint256 _newmaxSupply) external onlyOwner {
maxSupply = _newmaxSupply;
}
function setBaseURI(string memory _newBaseURI) external onlyOwner {
baseURI = _newBaseURI;
}
function setBaseExtension(string memory _newBaseExtension) external onlyOwner {
baseExtension = _newBaseExtension;
}
function setPrice (uint256 _price) external onlyOwner {
price = _price;
}
function setWallet(address _wallet) external onlyOwner{
marketWallet = _wallet;
}
function setCharityWallet(address _wallet) external onlyOwner{
charityWallet = _wallet;
}
function mint(address recpt, uint256 value) internal whenNotPaused {
require (value == price || value == price * 2 || value == price * 3 || value == price * 4 || value == price * 5 , "Wrong value");
if (whitelistSaleIsActive) {
require(isWhitelisted(recpt));
uint256 supply = totalSupply();
uint256 _mintAmount = value / price;
require(_mintAmount > 0, "need to mint at least 1 NFT");
require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded");
require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");
payable(charityWallet).transfer(value / 10);
payable(marketWallet).transfer(value - (value/10));
for (uint256 i = 1; i <= _mintAmount; i++) {
bool ispaused = paused();
require (!ispaused, "Paused");
_safeMint(recpt, supply + i);
}
} else {
uint256 supply = totalSupply();
uint256 _mintAmount = value / price;
require(_mintAmount > 0, "need to mint at least 1 NFT");
require(_mintAmount <= maxMintAmount, "max mint amount per session exceeded");
require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");
payable(charityWallet).transfer(value / 10);
payable(marketWallet).transfer(value - (value/10));
for (uint256 i = 1; i <= _mintAmount; i++) {
bool ispaused = paused();
require (!ispaused, "Paused");
_safeMint(recpt, supply + i);
}
}
}
function adminmint(address recpt, uint256 amount) external whenNotPaused onlyusers{
uint256 supply = totalSupply();
uint256 _mintAmount = amount;
require(_mintAmount > 0, "need to mint at least 1 NFT");
require(supply + _mintAmount <= maxSupply, "max NFT limit exceeded");
for (uint256 i = 1; i <= _mintAmount; i++) {
bool ispaused = paused();
require (!ispaused, "Paused");
_safeMint(recpt, supply + i);
}
}
function walletOfOwner(address _owner)
public
view
returns (uint256[] memory)
{
uint256 ownerTokenCount = balanceOf(_owner);
uint256[] memory tokenIds = new uint256[](ownerTokenCount);
for (uint256 i; i < ownerTokenCount; i++) {
tokenIds[i] = tokenOfOwnerByIndex(_owner, i);
}
return tokenIds;
}
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
string memory currentBaseURI = _baseURI();
return bytes(currentBaseURI).length > 0
? string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension))
: "";
}
function withdraw(address tokenToWithdraw) external onlyOwner {
uint256 balance = IERC20(tokenToWithdraw).balanceOf(address(this));
IERC20(tokenToWithdraw).transfer(msg.sender, balance);
if (address(this).balance > 0) {
payable(msg.sender).transfer(address(this).balance);
}
}
function pause() public onlyusers {
_pause();
}
function unpause() public onlyusers {
_unpause();
}
receive() external payable {
if(whitelistSaleIsActive) {
require(isWhitelisted(msg.sender));
mint(msg.sender, msg.value);
} else {
mint(msg.sender, msg.value);
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"recpt","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"adminmint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setWhitelistSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"whitelistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenToWithdraw","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60806040526000600a60156101000a81548160ff02191690831515021790555066470de4df820000600b556040518060800160405280604281526020016200517760429139600d90805190602001906200005b9291906200031c565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000a99291906200031c565b50736ebf803488ca4e43d0048a715ac6f51f6b119c1a600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e0b77dea144782618763a534414637a9bbc85bef601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506103e860115560056012553480156200016c57600080fd5b506040518060400160405280600b81526020017f4275636b427564646965730000000000000000000000000000000000000000008152506040518060400160405280600481526020017f42554255000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001f19291906200031c565b5080600190805190602001906200020a9291906200031c565b5050506200022d620002216200024e60201b60201c565b6200025660201b60201c565b6000600a60146101000a81548160ff02191690831515021790555062000431565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200032a90620003cc565b90600052602060002090601f0160209004810192826200034e57600085556200039a565b82601f106200036957805160ff19168380011785556200039a565b828001600101855582156200039a579182015b82811115620003995782518255916020019190600101906200037c565b5b509050620003a99190620003ad565b5090565b5b80821115620003c8576000816000905550600101620003ae565b5090565b60006002820490506001821680620003e557607f821691505b60208210811415620003fc57620003fb62000402565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614d3680620004416000396000f3fe60806040526004361061024a5760003560e01c80635c975abb11610139578063a035b1fe116100b6578063d5abeb011161007a578063d5abeb01146108c2578063da3ef23f146108ed578063deaa59df14610916578063e985e9c51461093f578063f2fde38b1461097c578063f3290d75146109a557610292565b8063a035b1fe146107df578063a22cb4651461080a578063b88d4fde14610833578063c87b56dd1461085c578063ca7ce3ec1461089957610292565b80637f00c7a6116100fd5780637f00c7a6146107205780638456cb59146107495780638da5cb5b1461076057806391b7f5ed1461078b57806395d89b41146107b457610292565b80635c975abb146106395780636352211e146106645780636c0360eb146106a157806370a08231146106cc578063715018a61461070957610292565b80632f745c59116101c757806342842e0e1161018b57806342842e0e14610544578063438b63001461056d5780634f6ccce7146105aa57806351cff8d9146105e757806355f804b31461061057610292565b80632f745c591461046157806330563bd71461049e5780633af32abf146104c75780633f4ba83a14610504578063415665851461051b57610292565b806318160ddd1161020e57806318160ddd14610390578063228025e8146103bb578063239c70ae146103e457806323b0f1e91461040f57806323b872dd1461043857610292565b806301ffc9a71461029757806306fdde03146102d4578063081812fc146102ff578063095ea7b31461033c57806310b5454d1461036557610292565b3661029257600a60159054906101000a900460ff16156102855761026d336109ce565b61027657600080fd5b6102803334610a24565b610290565b61028f3334610a24565b5b005b600080fd5b3480156102a357600080fd5b506102be60048036038101906102b9919061381d565b610fe5565b6040516102cb9190613ef6565b60405180910390f35b3480156102e057600080fd5b506102e961105f565b6040516102f69190613f11565b60405180910390f35b34801561030b57600080fd5b50610326600480360381019061032191906138c0565b6110f1565b6040516103339190613e44565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190613783565b611137565b005b34801561037157600080fd5b5061037a61124f565b6040516103879190613ef6565b60405180910390f35b34801561039c57600080fd5b506103a5611262565b6040516103b29190614213565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906138c0565b61126f565b005b3480156103f057600080fd5b506103f9611281565b6040516104069190614213565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613783565b611287565b005b34801561044457600080fd5b5061045f600480360381019061045a919061366d565b611414565b005b34801561046d57600080fd5b5061048860048036038101906104839190613783565b611474565b6040516104959190614213565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613600565b611519565b005b3480156104d357600080fd5b506104ee60048036038101906104e99190613600565b6109ce565b6040516104fb9190613ef6565b60405180910390f35b34801561051057600080fd5b50610519611565565b005b34801561052757600080fd5b50610542600480360381019061053d9190613600565b6115c5565b005b34801561055057600080fd5b5061056b6004803603810190610566919061366d565b611628565b005b34801561057957600080fd5b50610594600480360381019061058f9190613600565b611648565b6040516105a19190613ed4565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906138c0565b6116f6565b6040516105de9190614213565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190613600565b611767565b005b34801561061c57600080fd5b5061063760048036038101906106329190613877565b6118df565b005b34801561064557600080fd5b5061064e611901565b60405161065b9190613ef6565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906138c0565b611918565b6040516106989190613e44565b60405180910390f35b3480156106ad57600080fd5b506106b66119ca565b6040516106c39190613f11565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613600565b611a58565b6040516107009190614213565b60405180910390f35b34801561071557600080fd5b5061071e611b10565b005b34801561072c57600080fd5b50610747600480360381019061074291906138c0565b611b24565b005b34801561075557600080fd5b5061075e611b36565b005b34801561076c57600080fd5b50610775611b96565b6040516107829190613e44565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad91906138c0565b611bc0565b005b3480156107c057600080fd5b506107c9611bd2565b6040516107d69190613f11565b60405180910390f35b3480156107eb57600080fd5b506107f4611c64565b6040516108019190614213565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613743565b611c6a565b005b34801561083f57600080fd5b5061085a600480360381019061085591906136c0565b611c80565b005b34801561086857600080fd5b50610883600480360381019061087e91906138c0565b611ce2565b6040516108909190613f11565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906137c3565b611d8c565b005b3480156108ce57600080fd5b506108d7611db1565b6040516108e49190614213565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f9190613877565b611db7565b005b34801561092257600080fd5b5061093d60048036038101906109389190613600565b611dd9565b005b34801561094b57600080fd5b506109666004803603810190610961919061362d565b611e25565b6040516109739190613ef6565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e9190613600565b611eb9565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613600565b611f3d565b005b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610a2c611fa0565b600b54811480610a4957506002600b54610a4691906143cd565b81145b80610a6157506003600b54610a5e91906143cd565b81145b80610a7957506004600b54610a7691906143cd565b81145b80610a9157506005600b54610a8e91906143cd565b81145b610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac790614053565b60405180910390fd5b600a60159054906101000a900460ff1615610d6e57610aee826109ce565b610af757600080fd5b6000610b01611262565b90506000600b5483610b13919061439c565b905060008111610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f906141f3565b60405180910390fd5b601254811115610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b94906140d3565b60405180910390fd5b6011548183610bac9190614346565b1115610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be4906140b3565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a85610c36919061439c565b9081150290604051600060405180830381858888f19350505050158015610c61573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a85610cab919061439c565b85610cb69190614427565b9081150290604051600060405180830381858888f19350505050158015610ce1573d6000803e3d6000fd5b506000600190505b818111610d66576000610cfa611901565b90508015610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490613f53565b60405180910390fd5b610d52868386610d4d9190614346565b611fea565b508080610d5e90614574565b915050610ce9565b505050610fe1565b6000610d78611262565b90506000600b5483610d8a919061439c565b905060008111610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906141f3565b60405180910390fd5b601254811115610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906140d3565b60405180910390fd5b6011548183610e239190614346565b1115610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b906140b3565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a85610ead919061439c565b9081150290604051600060405180830381858888f19350505050158015610ed8573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a85610f22919061439c565b85610f2d9190614427565b9081150290604051600060405180830381858888f19350505050158015610f58573d6000803e3d6000fd5b506000600190505b818111610fdd576000610f71611901565b90508015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613f53565b60405180910390fd5b610fc9868386610fc49190614346565b611fea565b508080610fd590614574565b915050610f60565b5050505b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611058575061105782612008565b5b9050919050565b60606000805461106e90614511565b80601f016020809104026020016040519081016040528092919081815260200182805461109a90614511565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b5050505050905090565b60006110fc826120ea565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061114282611918565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90614193565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111d2612135565b73ffffffffffffffffffffffffffffffffffffffff1614806112015750611200816111fb612135565b611e25565b5b611240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611237906140f3565b60405180910390fd5b61124a838361213d565b505050565b600a60159054906101000a900460ff1681565b6000600880549050905090565b6112776121f6565b8060118190555050565b60125481565b61128f611fa0565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112e557600080fd5b60006112ef611262565b9050600082905060008111611339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611330906141f3565b60405180910390fd5b60115481836113489190614346565b1115611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906140b3565b60405180910390fd5b6000600190505b81811161140d5760006113a1611901565b905080156113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90613f53565b60405180910390fd5b6113f98683866113f49190614346565b611fea565b50808061140590614574565b915050611390565b5050505050565b61142561141f612135565b82612274565b611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b906141d3565b60405180910390fd5b61146f838383612309565b505050565b600061147f83611a58565b82106114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790613f73565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6115216121f6565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115bb57600080fd5b6115c3612570565b565b6115cd6121f6565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61164383838360405180602001604052806000815250611c80565b505050565b6060600061165583611a58565b905060008167ffffffffffffffff811115611673576116726146d9565b5b6040519080825280602002602001820160405280156116a15781602001602082028036833780820191505090505b50905060005b828110156116eb576116b98582611474565b8282815181106116cc576116cb6146aa565b5b60200260200101818152505080806116e390614574565b9150506116a7565b508092505050919050565b6000611700611262565b8210611741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611738906141b3565b60405180910390fd5b60088281548110611755576117546146aa565b5b90600052602060002001549050919050565b61176f6121f6565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117aa9190613e44565b60206040518083038186803b1580156117c257600080fd5b505afa1580156117d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fa91906138ed565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611837929190613eab565b602060405180830381600087803b15801561185157600080fd5b505af1158015611865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188991906137f0565b5060004711156118db573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156118d9573d6000803e3d6000fd5b505b5050565b6118e76121f6565b80600d90805190602001906118fd9291906133ea565b5050565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890614173565b60405180910390fd5b80915050919050565b600d80546119d790614511565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0390614511565b8015611a505780601f10611a2557610100808354040283529160200191611a50565b820191906000526020600020905b815481529060010190602001808311611a3357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090614093565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b186121f6565b611b2260006125d3565b565b611b2c6121f6565b8060128190555050565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b8c57600080fd5b611b94612699565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bc86121f6565b80600b8190555050565b606060018054611be190614511565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0d90614511565b8015611c5a5780601f10611c2f57610100808354040283529160200191611c5a565b820191906000526020600020905b815481529060010190602001808311611c3d57829003601f168201915b5050505050905090565b600b5481565b611c7c611c75612135565b83836126fc565b5050565b611c91611c8b612135565b83612274565b611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906141d3565b60405180910390fd5b611cdc84848484612869565b50505050565b6060611ced826128c5565b611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390614153565b60405180910390fd5b6000611d36612931565b90506000815111611d565760405180602001604052806000815250611d84565b80611d60846129c3565b600e604051602001611d7493929190613e13565b6040516020818303038152906040525b915050919050565b611d946121f6565b80600a60156101000a81548160ff02191690831515021790555050565b60115481565b611dbf6121f6565b80600e9080519060200190611dd59291906133ea565b5050565b611de16121f6565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ec16121f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890613fb3565b60405180910390fd5b611f3a816125d3565b50565b611f456121f6565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611fa8611901565b15611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90614073565b60405180910390fd5b565b612004828260405180602001604052806000815250612b24565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120d357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120e357506120e282612b7f565b5b9050919050565b6120f3816128c5565b612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990614173565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121b083611918565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6121fe612135565b73ffffffffffffffffffffffffffffffffffffffff1661221c611b96565b73ffffffffffffffffffffffffffffffffffffffff1614612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990614133565b60405180910390fd5b565b60008061228083611918565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122c257506122c18185611e25565b5b8061230057508373ffffffffffffffffffffffffffffffffffffffff166122e8846110f1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661232982611918565b73ffffffffffffffffffffffffffffffffffffffff161461237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237690613fd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614013565b60405180910390fd5b6123fa838383612be9565b61240560008261213d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124559190614427565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ac9190614346565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461256b838383612cfd565b505050565b612578612d02565b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6125bc612135565b6040516125c99190613e44565b60405180910390a1565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126a1611fa0565b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126e5612135565b6040516126f29190613e44565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561276b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276290614033565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161285c9190613ef6565b60405180910390a3505050565b612874848484612309565b61288084848484612d4b565b6128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690613f93565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600d805461294090614511565b80601f016020809104026020016040519081016040528092919081815260200182805461296c90614511565b80156129b95780601f1061298e576101008083540402835291602001916129b9565b820191906000526020600020905b81548152906001019060200180831161299c57829003601f168201915b5050505050905090565b60606000821415612a0b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b1f565b600082905060005b60008214612a3d578080612a2690614574565b915050600a82612a36919061439c565b9150612a13565b60008167ffffffffffffffff811115612a5957612a586146d9565b5b6040519080825280601f01601f191660200182016040528015612a8b5781602001600182028036833780820191505090505b5090505b60008514612b1857600182612aa49190614427565b9150600a85612ab391906145bd565b6030612abf9190614346565b60f81b818381518110612ad557612ad46146aa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b11919061439c565b9450612a8f565b8093505050505b919050565b612b2e8383612ee2565b612b3b6000848484612d4b565b612b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7190613f93565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bf48383836130bc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3757612c32816130c1565b612c76565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c7557612c74838261310a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb957612cb481613277565b612cf8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cf757612cf68282613348565b5b5b505050565b505050565b612d0a611901565b612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4090613f33565b60405180910390fd5b565b6000612d6c8473ffffffffffffffffffffffffffffffffffffffff166133c7565b15612ed5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d95612135565b8786866040518563ffffffff1660e01b8152600401612db79493929190613e5f565b602060405180830381600087803b158015612dd157600080fd5b505af1925050508015612e0257506040513d601f19601f82011682018060405250810190612dff919061384a565b60015b612e85573d8060008114612e32576040519150601f19603f3d011682016040523d82523d6000602084013e612e37565b606091505b50600081511415612e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7490613f93565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612eda565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4990614113565b60405180910390fd5b612f5b816128c5565b15612f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9290613ff3565b60405180910390fd5b612fa760008383612be9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ff79190614346565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130b860008383612cfd565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161311784611a58565b6131219190614427565b9050600060076000848152602001908152602001600020549050818114613206576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061328b9190614427565b90506000600960008481526020019081526020016000205490506000600883815481106132bb576132ba6146aa565b5b9060005260206000200154905080600883815481106132dd576132dc6146aa565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061332c5761332b61467b565b5b6001900381819060005260206000200160009055905550505050565b600061335383611a58565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546133f690614511565b90600052602060002090601f016020900481019282613418576000855561345f565b82601f1061343157805160ff191683800117855561345f565b8280016001018555821561345f579182015b8281111561345e578251825591602001919060010190613443565b5b50905061346c9190613470565b5090565b5b80821115613489576000816000905550600101613471565b5090565b60006134a061349b84614253565b61422e565b9050828152602081018484840111156134bc576134bb61470d565b5b6134c78482856144cf565b509392505050565b60006134e26134dd84614284565b61422e565b9050828152602081018484840111156134fe576134fd61470d565b5b6135098482856144cf565b509392505050565b60008135905061352081614ca4565b92915050565b60008135905061353581614cbb565b92915050565b60008151905061354a81614cbb565b92915050565b60008135905061355f81614cd2565b92915050565b60008151905061357481614cd2565b92915050565b600082601f83011261358f5761358e614708565b5b813561359f84826020860161348d565b91505092915050565b600082601f8301126135bd576135bc614708565b5b81356135cd8482602086016134cf565b91505092915050565b6000813590506135e581614ce9565b92915050565b6000815190506135fa81614ce9565b92915050565b60006020828403121561361657613615614717565b5b600061362484828501613511565b91505092915050565b6000806040838503121561364457613643614717565b5b600061365285828601613511565b925050602061366385828601613511565b9150509250929050565b60008060006060848603121561368657613685614717565b5b600061369486828701613511565b93505060206136a586828701613511565b92505060406136b6868287016135d6565b9150509250925092565b600080600080608085870312156136da576136d9614717565b5b60006136e887828801613511565b94505060206136f987828801613511565b935050604061370a878288016135d6565b925050606085013567ffffffffffffffff81111561372b5761372a614712565b5b6137378782880161357a565b91505092959194509250565b6000806040838503121561375a57613759614717565b5b600061376885828601613511565b925050602061377985828601613526565b9150509250929050565b6000806040838503121561379a57613799614717565b5b60006137a885828601613511565b92505060206137b9858286016135d6565b9150509250929050565b6000602082840312156137d9576137d8614717565b5b60006137e784828501613526565b91505092915050565b60006020828403121561380657613805614717565b5b60006138148482850161353b565b91505092915050565b60006020828403121561383357613832614717565b5b600061384184828501613550565b91505092915050565b6000602082840312156138605761385f614717565b5b600061386e84828501613565565b91505092915050565b60006020828403121561388d5761388c614717565b5b600082013567ffffffffffffffff8111156138ab576138aa614712565b5b6138b7848285016135a8565b91505092915050565b6000602082840312156138d6576138d5614717565b5b60006138e4848285016135d6565b91505092915050565b60006020828403121561390357613902614717565b5b6000613911848285016135eb565b91505092915050565b60006139268383613df5565b60208301905092915050565b61393b8161445b565b82525050565b600061394c826142da565b6139568185614308565b9350613961836142b5565b8060005b83811015613992578151613979888261391a565b9750613984836142fb565b925050600181019050613965565b5085935050505092915050565b6139a88161446d565b82525050565b60006139b9826142e5565b6139c38185614319565b93506139d38185602086016144de565b6139dc8161471c565b840191505092915050565b60006139f2826142f0565b6139fc818561432a565b9350613a0c8185602086016144de565b613a158161471c565b840191505092915050565b6000613a2b826142f0565b613a35818561433b565b9350613a458185602086016144de565b80840191505092915050565b60008154613a5e81614511565b613a68818661433b565b94506001821660008114613a835760018114613a9457613ac7565b60ff19831686528186019350613ac7565b613a9d856142c5565b60005b83811015613abf57815481890152600182019150602081019050613aa0565b838801955050505b50505092915050565b6000613add60148361432a565b9150613ae88261472d565b602082019050919050565b6000613b0060068361432a565b9150613b0b82614756565b602082019050919050565b6000613b23602b8361432a565b9150613b2e8261477f565b604082019050919050565b6000613b4660328361432a565b9150613b51826147ce565b604082019050919050565b6000613b6960268361432a565b9150613b748261481d565b604082019050919050565b6000613b8c60258361432a565b9150613b978261486c565b604082019050919050565b6000613baf601c8361432a565b9150613bba826148bb565b602082019050919050565b6000613bd260248361432a565b9150613bdd826148e4565b604082019050919050565b6000613bf560198361432a565b9150613c0082614933565b602082019050919050565b6000613c18600b8361432a565b9150613c238261495c565b602082019050919050565b6000613c3b60108361432a565b9150613c4682614985565b602082019050919050565b6000613c5e60298361432a565b9150613c69826149ae565b604082019050919050565b6000613c8160168361432a565b9150613c8c826149fd565b602082019050919050565b6000613ca460248361432a565b9150613caf82614a26565b604082019050919050565b6000613cc7603e8361432a565b9150613cd282614a75565b604082019050919050565b6000613cea60208361432a565b9150613cf582614ac4565b602082019050919050565b6000613d0d60208361432a565b9150613d1882614aed565b602082019050919050565b6000613d30602f8361432a565b9150613d3b82614b16565b604082019050919050565b6000613d5360188361432a565b9150613d5e82614b65565b602082019050919050565b6000613d7660218361432a565b9150613d8182614b8e565b604082019050919050565b6000613d99602c8361432a565b9150613da482614bdd565b604082019050919050565b6000613dbc602e8361432a565b9150613dc782614c2c565b604082019050919050565b6000613ddf601b8361432a565b9150613dea82614c7b565b602082019050919050565b613dfe816144c5565b82525050565b613e0d816144c5565b82525050565b6000613e1f8286613a20565b9150613e2b8285613a20565b9150613e378284613a51565b9150819050949350505050565b6000602082019050613e596000830184613932565b92915050565b6000608082019050613e746000830187613932565b613e816020830186613932565b613e8e6040830185613e04565b8181036060830152613ea081846139ae565b905095945050505050565b6000604082019050613ec06000830185613932565b613ecd6020830184613e04565b9392505050565b60006020820190508181036000830152613eee8184613941565b905092915050565b6000602082019050613f0b600083018461399f565b92915050565b60006020820190508181036000830152613f2b81846139e7565b905092915050565b60006020820190508181036000830152613f4c81613ad0565b9050919050565b60006020820190508181036000830152613f6c81613af3565b9050919050565b60006020820190508181036000830152613f8c81613b16565b9050919050565b60006020820190508181036000830152613fac81613b39565b9050919050565b60006020820190508181036000830152613fcc81613b5c565b9050919050565b60006020820190508181036000830152613fec81613b7f565b9050919050565b6000602082019050818103600083015261400c81613ba2565b9050919050565b6000602082019050818103600083015261402c81613bc5565b9050919050565b6000602082019050818103600083015261404c81613be8565b9050919050565b6000602082019050818103600083015261406c81613c0b565b9050919050565b6000602082019050818103600083015261408c81613c2e565b9050919050565b600060208201905081810360008301526140ac81613c51565b9050919050565b600060208201905081810360008301526140cc81613c74565b9050919050565b600060208201905081810360008301526140ec81613c97565b9050919050565b6000602082019050818103600083015261410c81613cba565b9050919050565b6000602082019050818103600083015261412c81613cdd565b9050919050565b6000602082019050818103600083015261414c81613d00565b9050919050565b6000602082019050818103600083015261416c81613d23565b9050919050565b6000602082019050818103600083015261418c81613d46565b9050919050565b600060208201905081810360008301526141ac81613d69565b9050919050565b600060208201905081810360008301526141cc81613d8c565b9050919050565b600060208201905081810360008301526141ec81613daf565b9050919050565b6000602082019050818103600083015261420c81613dd2565b9050919050565b60006020820190506142286000830184613e04565b92915050565b6000614238614249565b90506142448282614543565b919050565b6000604051905090565b600067ffffffffffffffff82111561426e5761426d6146d9565b5b6142778261471c565b9050602081019050919050565b600067ffffffffffffffff82111561429f5761429e6146d9565b5b6142a88261471c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614351826144c5565b915061435c836144c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614391576143906145ee565b5b828201905092915050565b60006143a7826144c5565b91506143b2836144c5565b9250826143c2576143c161461d565b5b828204905092915050565b60006143d8826144c5565b91506143e3836144c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561441c5761441b6145ee565b5b828202905092915050565b6000614432826144c5565b915061443d836144c5565b9250828210156144505761444f6145ee565b5b828203905092915050565b6000614466826144a5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144fc5780820151818401526020810190506144e1565b8381111561450b576000848401525b50505050565b6000600282049050600182168061452957607f821691505b6020821081141561453d5761453c61464c565b5b50919050565b61454c8261471c565b810181811067ffffffffffffffff8211171561456b5761456a6146d9565b5b80604052505050565b600061457f826144c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145b2576145b16145ee565b5b600182019050919050565b60006145c8826144c5565b91506145d3836144c5565b9250826145e3576145e261461d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f57726f6e672076616c7565000000000000000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614cad8161445b565b8114614cb857600080fd5b50565b614cc48161446d565b8114614ccf57600080fd5b50565b614cdb81614479565b8114614ce657600080fd5b50565b614cf2816144c5565b8114614cfd57600080fd5b5056fea26469706673582212207784af70f5b5273000112dc7264b6bc4124aeb8d2accc081ba01826475dfbd9464736f6c63430008070033697066733a2f2f516d58734a51696135316d7641476a62435153564657324d3557424b45324d465264664c6b74336333683632596b2f4572633732315f446174615f
Deployed Bytecode
0x60806040526004361061024a5760003560e01c80635c975abb11610139578063a035b1fe116100b6578063d5abeb011161007a578063d5abeb01146108c2578063da3ef23f146108ed578063deaa59df14610916578063e985e9c51461093f578063f2fde38b1461097c578063f3290d75146109a557610292565b8063a035b1fe146107df578063a22cb4651461080a578063b88d4fde14610833578063c87b56dd1461085c578063ca7ce3ec1461089957610292565b80637f00c7a6116100fd5780637f00c7a6146107205780638456cb59146107495780638da5cb5b1461076057806391b7f5ed1461078b57806395d89b41146107b457610292565b80635c975abb146106395780636352211e146106645780636c0360eb146106a157806370a08231146106cc578063715018a61461070957610292565b80632f745c59116101c757806342842e0e1161018b57806342842e0e14610544578063438b63001461056d5780634f6ccce7146105aa57806351cff8d9146105e757806355f804b31461061057610292565b80632f745c591461046157806330563bd71461049e5780633af32abf146104c75780633f4ba83a14610504578063415665851461051b57610292565b806318160ddd1161020e57806318160ddd14610390578063228025e8146103bb578063239c70ae146103e457806323b0f1e91461040f57806323b872dd1461043857610292565b806301ffc9a71461029757806306fdde03146102d4578063081812fc146102ff578063095ea7b31461033c57806310b5454d1461036557610292565b3661029257600a60159054906101000a900460ff16156102855761026d336109ce565b61027657600080fd5b6102803334610a24565b610290565b61028f3334610a24565b5b005b600080fd5b3480156102a357600080fd5b506102be60048036038101906102b9919061381d565b610fe5565b6040516102cb9190613ef6565b60405180910390f35b3480156102e057600080fd5b506102e961105f565b6040516102f69190613f11565b60405180910390f35b34801561030b57600080fd5b50610326600480360381019061032191906138c0565b6110f1565b6040516103339190613e44565b60405180910390f35b34801561034857600080fd5b50610363600480360381019061035e9190613783565b611137565b005b34801561037157600080fd5b5061037a61124f565b6040516103879190613ef6565b60405180910390f35b34801561039c57600080fd5b506103a5611262565b6040516103b29190614213565b60405180910390f35b3480156103c757600080fd5b506103e260048036038101906103dd91906138c0565b61126f565b005b3480156103f057600080fd5b506103f9611281565b6040516104069190614213565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190613783565b611287565b005b34801561044457600080fd5b5061045f600480360381019061045a919061366d565b611414565b005b34801561046d57600080fd5b5061048860048036038101906104839190613783565b611474565b6040516104959190614213565b60405180910390f35b3480156104aa57600080fd5b506104c560048036038101906104c09190613600565b611519565b005b3480156104d357600080fd5b506104ee60048036038101906104e99190613600565b6109ce565b6040516104fb9190613ef6565b60405180910390f35b34801561051057600080fd5b50610519611565565b005b34801561052757600080fd5b50610542600480360381019061053d9190613600565b6115c5565b005b34801561055057600080fd5b5061056b6004803603810190610566919061366d565b611628565b005b34801561057957600080fd5b50610594600480360381019061058f9190613600565b611648565b6040516105a19190613ed4565b60405180910390f35b3480156105b657600080fd5b506105d160048036038101906105cc91906138c0565b6116f6565b6040516105de9190614213565b60405180910390f35b3480156105f357600080fd5b5061060e60048036038101906106099190613600565b611767565b005b34801561061c57600080fd5b5061063760048036038101906106329190613877565b6118df565b005b34801561064557600080fd5b5061064e611901565b60405161065b9190613ef6565b60405180910390f35b34801561067057600080fd5b5061068b600480360381019061068691906138c0565b611918565b6040516106989190613e44565b60405180910390f35b3480156106ad57600080fd5b506106b66119ca565b6040516106c39190613f11565b60405180910390f35b3480156106d857600080fd5b506106f360048036038101906106ee9190613600565b611a58565b6040516107009190614213565b60405180910390f35b34801561071557600080fd5b5061071e611b10565b005b34801561072c57600080fd5b50610747600480360381019061074291906138c0565b611b24565b005b34801561075557600080fd5b5061075e611b36565b005b34801561076c57600080fd5b50610775611b96565b6040516107829190613e44565b60405180910390f35b34801561079757600080fd5b506107b260048036038101906107ad91906138c0565b611bc0565b005b3480156107c057600080fd5b506107c9611bd2565b6040516107d69190613f11565b60405180910390f35b3480156107eb57600080fd5b506107f4611c64565b6040516108019190614213565b60405180910390f35b34801561081657600080fd5b50610831600480360381019061082c9190613743565b611c6a565b005b34801561083f57600080fd5b5061085a600480360381019061085591906136c0565b611c80565b005b34801561086857600080fd5b50610883600480360381019061087e91906138c0565b611ce2565b6040516108909190613f11565b60405180910390f35b3480156108a557600080fd5b506108c060048036038101906108bb91906137c3565b611d8c565b005b3480156108ce57600080fd5b506108d7611db1565b6040516108e49190614213565b60405180910390f35b3480156108f957600080fd5b50610914600480360381019061090f9190613877565b611db7565b005b34801561092257600080fd5b5061093d60048036038101906109389190613600565b611dd9565b005b34801561094b57600080fd5b506109666004803603810190610961919061362d565b611e25565b6040516109739190613ef6565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e9190613600565b611eb9565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613600565b611f3d565b005b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610a2c611fa0565b600b54811480610a4957506002600b54610a4691906143cd565b81145b80610a6157506003600b54610a5e91906143cd565b81145b80610a7957506004600b54610a7691906143cd565b81145b80610a9157506005600b54610a8e91906143cd565b81145b610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac790614053565b60405180910390fd5b600a60159054906101000a900460ff1615610d6e57610aee826109ce565b610af757600080fd5b6000610b01611262565b90506000600b5483610b13919061439c565b905060008111610b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4f906141f3565b60405180910390fd5b601254811115610b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b94906140d3565b60405180910390fd5b6011548183610bac9190614346565b1115610bed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be4906140b3565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a85610c36919061439c565b9081150290604051600060405180830381858888f19350505050158015610c61573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a85610cab919061439c565b85610cb69190614427565b9081150290604051600060405180830381858888f19350505050158015610ce1573d6000803e3d6000fd5b506000600190505b818111610d66576000610cfa611901565b90508015610d3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3490613f53565b60405180910390fd5b610d52868386610d4d9190614346565b611fea565b508080610d5e90614574565b915050610ce9565b505050610fe1565b6000610d78611262565b90506000600b5483610d8a919061439c565b905060008111610dcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc6906141f3565b60405180910390fd5b601254811115610e14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0b906140d3565b60405180910390fd5b6011548183610e239190614346565b1115610e64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5b906140b3565b60405180910390fd5b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a85610ead919061439c565b9081150290604051600060405180830381858888f19350505050158015610ed8573d6000803e3d6000fd5b50600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc600a85610f22919061439c565b85610f2d9190614427565b9081150290604051600060405180830381858888f19350505050158015610f58573d6000803e3d6000fd5b506000600190505b818111610fdd576000610f71611901565b90508015610fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fab90613f53565b60405180910390fd5b610fc9868386610fc49190614346565b611fea565b508080610fd590614574565b915050610f60565b5050505b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611058575061105782612008565b5b9050919050565b60606000805461106e90614511565b80601f016020809104026020016040519081016040528092919081815260200182805461109a90614511565b80156110e75780601f106110bc576101008083540402835291602001916110e7565b820191906000526020600020905b8154815290600101906020018083116110ca57829003601f168201915b5050505050905090565b60006110fc826120ea565b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061114282611918565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156111b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111aa90614193565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166111d2612135565b73ffffffffffffffffffffffffffffffffffffffff1614806112015750611200816111fb612135565b611e25565b5b611240576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611237906140f3565b60405180910390fd5b61124a838361213d565b505050565b600a60159054906101000a900460ff1681565b6000600880549050905090565b6112776121f6565b8060118190555050565b60125481565b61128f611fa0565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166112e557600080fd5b60006112ef611262565b9050600082905060008111611339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611330906141f3565b60405180910390fd5b60115481836113489190614346565b1115611389576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611380906140b3565b60405180910390fd5b6000600190505b81811161140d5760006113a1611901565b905080156113e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113db90613f53565b60405180910390fd5b6113f98683866113f49190614346565b611fea565b50808061140590614574565b915050611390565b5050505050565b61142561141f612135565b82612274565b611464576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145b906141d3565b60405180910390fd5b61146f838383612309565b505050565b600061147f83611a58565b82106114c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b790613f73565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6115216121f6565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166115bb57600080fd5b6115c3612570565b565b6115cd6121f6565b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61164383838360405180602001604052806000815250611c80565b505050565b6060600061165583611a58565b905060008167ffffffffffffffff811115611673576116726146d9565b5b6040519080825280602002602001820160405280156116a15781602001602082028036833780820191505090505b50905060005b828110156116eb576116b98582611474565b8282815181106116cc576116cb6146aa565b5b60200260200101818152505080806116e390614574565b9150506116a7565b508092505050919050565b6000611700611262565b8210611741576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611738906141b3565b60405180910390fd5b60088281548110611755576117546146aa565b5b90600052602060002001549050919050565b61176f6121f6565b60008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016117aa9190613e44565b60206040518083038186803b1580156117c257600080fd5b505afa1580156117d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117fa91906138ed565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611837929190613eab565b602060405180830381600087803b15801561185157600080fd5b505af1158015611865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188991906137f0565b5060004711156118db573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156118d9573d6000803e3d6000fd5b505b5050565b6118e76121f6565b80600d90805190602001906118fd9291906133ea565b5050565b6000600a60149054906101000a900460ff16905090565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b890614173565b60405180910390fd5b80915050919050565b600d80546119d790614511565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0390614511565b8015611a505780601f10611a2557610100808354040283529160200191611a50565b820191906000526020600020905b815481529060010190602001808311611a3357829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090614093565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b186121f6565b611b2260006125d3565b565b611b2c6121f6565b8060128190555050565b601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b8c57600080fd5b611b94612699565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bc86121f6565b80600b8190555050565b606060018054611be190614511565b80601f0160208091040260200160405190810160405280929190818152602001828054611c0d90614511565b8015611c5a5780601f10611c2f57610100808354040283529160200191611c5a565b820191906000526020600020905b815481529060010190602001808311611c3d57829003601f168201915b5050505050905090565b600b5481565b611c7c611c75612135565b83836126fc565b5050565b611c91611c8b612135565b83612274565b611cd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc7906141d3565b60405180910390fd5b611cdc84848484612869565b50505050565b6060611ced826128c5565b611d2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2390614153565b60405180910390fd5b6000611d36612931565b90506000815111611d565760405180602001604052806000815250611d84565b80611d60846129c3565b600e604051602001611d7493929190613e13565b6040516020818303038152906040525b915050919050565b611d946121f6565b80600a60156101000a81548160ff02191690831515021790555050565b60115481565b611dbf6121f6565b80600e9080519060200190611dd59291906133ea565b5050565b611de16121f6565b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ec16121f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890613fb3565b60405180910390fd5b611f3a816125d3565b50565b611f456121f6565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611fa8611901565b15611fe8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fdf90614073565b60405180910390fd5b565b612004828260405180602001604052806000815250612b24565b5050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806120d357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806120e357506120e282612b7f565b5b9050919050565b6120f3816128c5565b612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990614173565b60405180910390fd5b50565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166121b083611918565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6121fe612135565b73ffffffffffffffffffffffffffffffffffffffff1661221c611b96565b73ffffffffffffffffffffffffffffffffffffffff1614612272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161226990614133565b60405180910390fd5b565b60008061228083611918565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806122c257506122c18185611e25565b5b8061230057508373ffffffffffffffffffffffffffffffffffffffff166122e8846110f1565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661232982611918565b73ffffffffffffffffffffffffffffffffffffffff161461237f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237690613fd3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e690614013565b60405180910390fd5b6123fa838383612be9565b61240560008261213d565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124559190614427565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124ac9190614346565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461256b838383612cfd565b505050565b612578612d02565b6000600a60146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6125bc612135565b6040516125c99190613e44565b60405180910390a1565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126a1611fa0565b6001600a60146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586126e5612135565b6040516126f29190613e44565b60405180910390a1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561276b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276290614033565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161285c9190613ef6565b60405180910390a3505050565b612874848484612309565b61288084848484612d4b565b6128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690613f93565b60405180910390fd5b50505050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6060600d805461294090614511565b80601f016020809104026020016040519081016040528092919081815260200182805461296c90614511565b80156129b95780601f1061298e576101008083540402835291602001916129b9565b820191906000526020600020905b81548152906001019060200180831161299c57829003601f168201915b5050505050905090565b60606000821415612a0b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b1f565b600082905060005b60008214612a3d578080612a2690614574565b915050600a82612a36919061439c565b9150612a13565b60008167ffffffffffffffff811115612a5957612a586146d9565b5b6040519080825280601f01601f191660200182016040528015612a8b5781602001600182028036833780820191505090505b5090505b60008514612b1857600182612aa49190614427565b9150600a85612ab391906145bd565b6030612abf9190614346565b60f81b818381518110612ad557612ad46146aa565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b11919061439c565b9450612a8f565b8093505050505b919050565b612b2e8383612ee2565b612b3b6000848484612d4b565b612b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7190613f93565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612bf48383836130bc565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3757612c32816130c1565b612c76565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612c7557612c74838261310a565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cb957612cb481613277565b612cf8565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612cf757612cf68282613348565b5b5b505050565b505050565b612d0a611901565b612d49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4090613f33565b60405180910390fd5b565b6000612d6c8473ffffffffffffffffffffffffffffffffffffffff166133c7565b15612ed5578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612d95612135565b8786866040518563ffffffff1660e01b8152600401612db79493929190613e5f565b602060405180830381600087803b158015612dd157600080fd5b505af1925050508015612e0257506040513d601f19601f82011682018060405250810190612dff919061384a565b60015b612e85573d8060008114612e32576040519150601f19603f3d011682016040523d82523d6000602084013e612e37565b606091505b50600081511415612e7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7490613f93565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612eda565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f4990614113565b60405180910390fd5b612f5b816128c5565b15612f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9290613ff3565b60405180910390fd5b612fa760008383612be9565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ff79190614346565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46130b860008383612cfd565b5050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161311784611a58565b6131219190614427565b9050600060076000848152602001908152602001600020549050818114613206576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061328b9190614427565b90506000600960008481526020019081526020016000205490506000600883815481106132bb576132ba6146aa565b5b9060005260206000200154905080600883815481106132dd576132dc6146aa565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061332c5761332b61467b565b5b6001900381819060005260206000200160009055905550505050565b600061335383611a58565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546133f690614511565b90600052602060002090601f016020900481019282613418576000855561345f565b82601f1061343157805160ff191683800117855561345f565b8280016001018555821561345f579182015b8281111561345e578251825591602001919060010190613443565b5b50905061346c9190613470565b5090565b5b80821115613489576000816000905550600101613471565b5090565b60006134a061349b84614253565b61422e565b9050828152602081018484840111156134bc576134bb61470d565b5b6134c78482856144cf565b509392505050565b60006134e26134dd84614284565b61422e565b9050828152602081018484840111156134fe576134fd61470d565b5b6135098482856144cf565b509392505050565b60008135905061352081614ca4565b92915050565b60008135905061353581614cbb565b92915050565b60008151905061354a81614cbb565b92915050565b60008135905061355f81614cd2565b92915050565b60008151905061357481614cd2565b92915050565b600082601f83011261358f5761358e614708565b5b813561359f84826020860161348d565b91505092915050565b600082601f8301126135bd576135bc614708565b5b81356135cd8482602086016134cf565b91505092915050565b6000813590506135e581614ce9565b92915050565b6000815190506135fa81614ce9565b92915050565b60006020828403121561361657613615614717565b5b600061362484828501613511565b91505092915050565b6000806040838503121561364457613643614717565b5b600061365285828601613511565b925050602061366385828601613511565b9150509250929050565b60008060006060848603121561368657613685614717565b5b600061369486828701613511565b93505060206136a586828701613511565b92505060406136b6868287016135d6565b9150509250925092565b600080600080608085870312156136da576136d9614717565b5b60006136e887828801613511565b94505060206136f987828801613511565b935050604061370a878288016135d6565b925050606085013567ffffffffffffffff81111561372b5761372a614712565b5b6137378782880161357a565b91505092959194509250565b6000806040838503121561375a57613759614717565b5b600061376885828601613511565b925050602061377985828601613526565b9150509250929050565b6000806040838503121561379a57613799614717565b5b60006137a885828601613511565b92505060206137b9858286016135d6565b9150509250929050565b6000602082840312156137d9576137d8614717565b5b60006137e784828501613526565b91505092915050565b60006020828403121561380657613805614717565b5b60006138148482850161353b565b91505092915050565b60006020828403121561383357613832614717565b5b600061384184828501613550565b91505092915050565b6000602082840312156138605761385f614717565b5b600061386e84828501613565565b91505092915050565b60006020828403121561388d5761388c614717565b5b600082013567ffffffffffffffff8111156138ab576138aa614712565b5b6138b7848285016135a8565b91505092915050565b6000602082840312156138d6576138d5614717565b5b60006138e4848285016135d6565b91505092915050565b60006020828403121561390357613902614717565b5b6000613911848285016135eb565b91505092915050565b60006139268383613df5565b60208301905092915050565b61393b8161445b565b82525050565b600061394c826142da565b6139568185614308565b9350613961836142b5565b8060005b83811015613992578151613979888261391a565b9750613984836142fb565b925050600181019050613965565b5085935050505092915050565b6139a88161446d565b82525050565b60006139b9826142e5565b6139c38185614319565b93506139d38185602086016144de565b6139dc8161471c565b840191505092915050565b60006139f2826142f0565b6139fc818561432a565b9350613a0c8185602086016144de565b613a158161471c565b840191505092915050565b6000613a2b826142f0565b613a35818561433b565b9350613a458185602086016144de565b80840191505092915050565b60008154613a5e81614511565b613a68818661433b565b94506001821660008114613a835760018114613a9457613ac7565b60ff19831686528186019350613ac7565b613a9d856142c5565b60005b83811015613abf57815481890152600182019150602081019050613aa0565b838801955050505b50505092915050565b6000613add60148361432a565b9150613ae88261472d565b602082019050919050565b6000613b0060068361432a565b9150613b0b82614756565b602082019050919050565b6000613b23602b8361432a565b9150613b2e8261477f565b604082019050919050565b6000613b4660328361432a565b9150613b51826147ce565b604082019050919050565b6000613b6960268361432a565b9150613b748261481d565b604082019050919050565b6000613b8c60258361432a565b9150613b978261486c565b604082019050919050565b6000613baf601c8361432a565b9150613bba826148bb565b602082019050919050565b6000613bd260248361432a565b9150613bdd826148e4565b604082019050919050565b6000613bf560198361432a565b9150613c0082614933565b602082019050919050565b6000613c18600b8361432a565b9150613c238261495c565b602082019050919050565b6000613c3b60108361432a565b9150613c4682614985565b602082019050919050565b6000613c5e60298361432a565b9150613c69826149ae565b604082019050919050565b6000613c8160168361432a565b9150613c8c826149fd565b602082019050919050565b6000613ca460248361432a565b9150613caf82614a26565b604082019050919050565b6000613cc7603e8361432a565b9150613cd282614a75565b604082019050919050565b6000613cea60208361432a565b9150613cf582614ac4565b602082019050919050565b6000613d0d60208361432a565b9150613d1882614aed565b602082019050919050565b6000613d30602f8361432a565b9150613d3b82614b16565b604082019050919050565b6000613d5360188361432a565b9150613d5e82614b65565b602082019050919050565b6000613d7660218361432a565b9150613d8182614b8e565b604082019050919050565b6000613d99602c8361432a565b9150613da482614bdd565b604082019050919050565b6000613dbc602e8361432a565b9150613dc782614c2c565b604082019050919050565b6000613ddf601b8361432a565b9150613dea82614c7b565b602082019050919050565b613dfe816144c5565b82525050565b613e0d816144c5565b82525050565b6000613e1f8286613a20565b9150613e2b8285613a20565b9150613e378284613a51565b9150819050949350505050565b6000602082019050613e596000830184613932565b92915050565b6000608082019050613e746000830187613932565b613e816020830186613932565b613e8e6040830185613e04565b8181036060830152613ea081846139ae565b905095945050505050565b6000604082019050613ec06000830185613932565b613ecd6020830184613e04565b9392505050565b60006020820190508181036000830152613eee8184613941565b905092915050565b6000602082019050613f0b600083018461399f565b92915050565b60006020820190508181036000830152613f2b81846139e7565b905092915050565b60006020820190508181036000830152613f4c81613ad0565b9050919050565b60006020820190508181036000830152613f6c81613af3565b9050919050565b60006020820190508181036000830152613f8c81613b16565b9050919050565b60006020820190508181036000830152613fac81613b39565b9050919050565b60006020820190508181036000830152613fcc81613b5c565b9050919050565b60006020820190508181036000830152613fec81613b7f565b9050919050565b6000602082019050818103600083015261400c81613ba2565b9050919050565b6000602082019050818103600083015261402c81613bc5565b9050919050565b6000602082019050818103600083015261404c81613be8565b9050919050565b6000602082019050818103600083015261406c81613c0b565b9050919050565b6000602082019050818103600083015261408c81613c2e565b9050919050565b600060208201905081810360008301526140ac81613c51565b9050919050565b600060208201905081810360008301526140cc81613c74565b9050919050565b600060208201905081810360008301526140ec81613c97565b9050919050565b6000602082019050818103600083015261410c81613cba565b9050919050565b6000602082019050818103600083015261412c81613cdd565b9050919050565b6000602082019050818103600083015261414c81613d00565b9050919050565b6000602082019050818103600083015261416c81613d23565b9050919050565b6000602082019050818103600083015261418c81613d46565b9050919050565b600060208201905081810360008301526141ac81613d69565b9050919050565b600060208201905081810360008301526141cc81613d8c565b9050919050565b600060208201905081810360008301526141ec81613daf565b9050919050565b6000602082019050818103600083015261420c81613dd2565b9050919050565b60006020820190506142286000830184613e04565b92915050565b6000614238614249565b90506142448282614543565b919050565b6000604051905090565b600067ffffffffffffffff82111561426e5761426d6146d9565b5b6142778261471c565b9050602081019050919050565b600067ffffffffffffffff82111561429f5761429e6146d9565b5b6142a88261471c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000614351826144c5565b915061435c836144c5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614391576143906145ee565b5b828201905092915050565b60006143a7826144c5565b91506143b2836144c5565b9250826143c2576143c161461d565b5b828204905092915050565b60006143d8826144c5565b91506143e3836144c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561441c5761441b6145ee565b5b828202905092915050565b6000614432826144c5565b915061443d836144c5565b9250828210156144505761444f6145ee565b5b828203905092915050565b6000614466826144a5565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156144fc5780820151818401526020810190506144e1565b8381111561450b576000848401525b50505050565b6000600282049050600182168061452957607f821691505b6020821081141561453d5761453c61464c565b5b50919050565b61454c8261471c565b810181811067ffffffffffffffff8211171561456b5761456a6146d9565b5b80604052505050565b600061457f826144c5565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156145b2576145b16145ee565b5b600182019050919050565b60006145c8826144c5565b91506145d3836144c5565b9250826145e3576145e261461d565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f5061757365640000000000000000000000000000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f57726f6e672076616c7565000000000000000000000000000000000000000000600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f4552433732313a2061646472657373207a65726f206973206e6f74206120766160008201527f6c6964206f776e65720000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206e6f7220617070726f76656420666f7220616c6c0000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206e6f7220617070726f766564000000000000000000000000000000000000602082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b614cad8161445b565b8114614cb857600080fd5b50565b614cc48161446d565b8114614ccf57600080fd5b50565b614cdb81614479565b8114614ce657600080fd5b50565b614cf2816144c5565b8114614cfd57600080fd5b5056fea26469706673582212207784af70f5b5273000112dc7264b6bc4124aeb8d2accc081ba01826475dfbd9464736f6c63430008070033
Deployed Bytecode Sourcemap
53243:5546:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58615:21;;;;;;;;;;;58612:169;;;58657:25;58671:10;58657:13;:25::i;:::-;58649:34;;;;;;58694:27;58699:10;58711:9;58694:4;:27::i;:::-;58612:169;;;58746:27;58751:10;58763:9;58746:4;:27::i;:::-;58612:169;53243:5546;;;;;47009:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33743:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35256:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34773:417;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53310:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47649:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54682:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53758:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56856:470;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35956:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47317:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55218:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54025:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58507:65;;;;;;;;;;;;;:::i;:::-;;54337:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36363:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57334:348;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47839:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58136:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54790:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9407:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33454:222;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53438:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33185:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12272:103;;;;;;;;;;;;;:::i;:::-;;54556:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58438:61;;;;;;;;;;;;;:::i;:::-;;11624:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55028:83;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33912:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53358:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35499:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36619:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57688:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53912:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53720:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54896:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55117:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35725:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12530:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54448:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54025;54083:4;54104:12;:18;54117:4;54104:18;;;;;;;;;;;;;;;;;;;;;;;;;54097:25;;54025:101;;;:::o;55333:1514::-;9012:19;:17;:19::i;:::-;55427:5:::1;;55418;:14;:36;;;;55453:1;55445:5;;:9;;;;:::i;:::-;55436:5;:18;55418:36;:58;;;;55475:1;55467:5;;:9;;;;:::i;:::-;55458:5;:18;55418:58;:80;;;;55497:1;55489:5;;:9;;;;:::i;:::-;55480:5;:18;55418:80;:102;;;;55519:1;55511:5;;:9;;;;:::i;:::-;55502:5;:18;55418:102;55409:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;55550:21;;;;;;;;;;;55546:1296;;;55592:20;55606:5;55592:13;:20::i;:::-;55584:29;;;::::0;::::1;;55624:14;55641:13;:11;:13::i;:::-;55624:30;;55665:19;55695:5;;55687;:13;;;;:::i;:::-;55665:35;;55733:1;55719:11;:15;55711:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;55800:13;;55785:11;:28;;55777:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;55897:9;;55882:11;55873:6;:20;;;;:::i;:::-;:33;;55865:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55954:13;;;;;;;;;;;55946:31;;:43;55986:2;55978:5;:10;;;;:::i;:::-;55946:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56008:12;;;;;;;;;;;56000:30;;:50;56046:2;56040:5;:8;;;;:::i;:::-;56031:5;:18;;;;:::i;:::-;56000:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56072:9;56084:1;56072:13;;56067:171;56092:11;56087:1;:16;56067:171;;56121:13;56137:8;:6;:8::i;:::-;56121:24;;56170:8;56169:9;56160:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;56198:28;56208:5;56224:1;56215:6;:10;;;;:::i;:::-;56198:9;:28::i;:::-;56110:128;56105:3;;;;;:::i;:::-;;;;56067:171;;;;55573:672;;55546:1296;;;56258:14;56275:13;:11;:13::i;:::-;56258:30;;56295:19;56325:5;;56317;:13;;;;:::i;:::-;56295:35;;56359:1;56345:11;:15;56337:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;56422:13;;56407:11;:28;;56399:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;56515:9;;56500:11;56491:6;:20;;;;:::i;:::-;:33;;56483:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56569:13;;;;;;;;;;;56561:31;;:43;56601:2;56593:5;:10;;;;:::i;:::-;56561:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56620:12;;;;;;;;;;;56612:30;;:50;56658:2;56652:5;:8;;;;:::i;:::-;56643:5;:18;;;;:::i;:::-;56612:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;56680:9;56692:1;56680:13;;56675:160;56700:11;56695:1;:16;56675:160;;56727:13;56743:8;:6;:8::i;:::-;56727:24;;56771:8;56770:9;56761:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;56799:28;56809:5;56825:1;56816:6;:10;;;;:::i;:::-;56799:9;:28::i;:::-;56718:117;56713:3;;;;;:::i;:::-;;;;56675:160;;;;56251:591;;55546:1296;55333:1514:::0;;:::o;47009:224::-;47111:4;47150:35;47135:50;;;:11;:50;;;;:90;;;;47189:36;47213:11;47189:23;:36::i;:::-;47135:90;47128:97;;47009:224;;;:::o;33743:100::-;33797:13;33830:5;33823:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33743:100;:::o;35256:171::-;35332:7;35352:23;35367:7;35352:14;:23::i;:::-;35395:15;:24;35411:7;35395:24;;;;;;;;;;;;;;;;;;;;;35388:31;;35256:171;;;:::o;34773:417::-;34854:13;34870:23;34885:7;34870:14;:23::i;:::-;34854:39;;34918:5;34912:11;;:2;:11;;;;34904:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;35012:5;34996:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;35021:37;35038:5;35045:12;:10;:12::i;:::-;35021:16;:37::i;:::-;34996:62;34974:174;;;;;;;;;;;;:::i;:::-;;;;;;;;;35161:21;35170:2;35174:7;35161:8;:21::i;:::-;34843:347;34773:417;;:::o;53310:41::-;;;;;;;;;;;;;:::o;47649:113::-;47710:7;47737:10;:17;;;;47730:24;;47649:113;:::o;54682:102::-;11510:13;:11;:13::i;:::-;54765::::1;54753:9;:25;;;;54682:102:::0;:::o;53758:32::-;;;;:::o;56856:470::-;9012:19;:17;:19::i;:::-;54174:12:::1;:24;54187:10;54174:24;;;;;;;;;;;;;;;;;;;;;;;;;54166:33;;;::::0;::::1;;56947:14:::2;56964:13;:11;:13::i;:::-;56947:30;;56984:19;57006:6;56984:28;;57041:1;57027:11;:15;57019:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;57113:9;;57098:11;57089:6;:20;;;;:::i;:::-;:33;;57081:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57164:9;57176:1;57164:13;;57159:160;57184:11;57179:1;:16;57159:160;;57211:13;57227:8;:6;:8::i;:::-;57211:24;;57255:8;57254:9;57245:29;;;;;;;;;;;;:::i;:::-;;;;;;;;;57283:28;57293:5;57309:1;57300:6;:10;;;;:::i;:::-;57283:9;:28::i;:::-;57202:117;57197:3;;;;;:::i;:::-;;;;57159:160;;;;56940:386;;56856:470:::0;;:::o;35956:336::-;36151:41;36170:12;:10;:12::i;:::-;36184:7;36151:18;:41::i;:::-;36143:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36256:28;36266:4;36272:2;36276:7;36256:9;:28::i;:::-;35956:336;;;:::o;47317:256::-;47414:7;47450:23;47467:5;47450:16;:23::i;:::-;47442:5;:31;47434:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47539:12;:19;47552:5;47539:19;;;;;;;;;;;;;;;:26;47559:5;47539:26;;;;;;;;;;;;47532:33;;47317:256;;;;:::o;55218:103::-;11510:13;:11;:13::i;:::-;55306:7:::1;55290:13;;:23;;;;;;;;;;;;;;;;;;55218:103:::0;:::o;58507:65::-;54174:12;:24;54187:10;54174:24;;;;;;;;;;;;;;;;;;;;;;;;;54166:33;;;;;;58554:10:::1;:8;:10::i;:::-;58507:65::o:0;54337:100::-;11510:13;:11;:13::i;:::-;54425:4:::1;54406:12;:18;54419:4;54406:18;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;54337:100:::0;:::o;36363:185::-;36501:39;36518:4;36524:2;36528:7;36501:39;;;;;;;;;;;;:16;:39::i;:::-;36363:185;;;:::o;57334:348::-;57409:16;57437:23;57463:17;57473:6;57463:9;:17::i;:::-;57437:43;;57487:25;57529:15;57515:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57487:58;;57557:9;57552:103;57572:15;57568:1;:19;57552:103;;;57617:30;57637:6;57645:1;57617:19;:30::i;:::-;57603:8;57612:1;57603:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;57589:3;;;;;:::i;:::-;;;;57552:103;;;;57668:8;57661:15;;;;57334:348;;;:::o;47839:233::-;47914:7;47950:30;:28;:30::i;:::-;47942:5;:38;47934:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;48047:10;48058:5;48047:17;;;;;;;;:::i;:::-;;;;;;;;;;48040:24;;47839:233;;;:::o;58136:293::-;11510:13;:11;:13::i;:::-;58202:15:::1;58227;58220:33;;;58262:4;58220:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;58202:66;;58279:15;58272:32;;;58305:10;58317:7;58272:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;58357:1;58333:21;:25;58329:95;;;58376:10;58368:28;;:51;58397:21;58368:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;58329:95;58198:231;58136:293:::0;:::o;54790:100::-;11510:13;:11;:13::i;:::-;54873:11:::1;54863:7;:21;;;;;;;;;;;;:::i;:::-;;54790:100:::0;:::o;9407:86::-;9454:4;9478:7;;;;;;;;;;;9471:14;;9407:86;:::o;33454:222::-;33526:7;33546:13;33562:7;:16;33570:7;33562:16;;;;;;;;;;;;;;;;;;;;;33546:32;;33614:1;33597:19;;:5;:19;;;;33589:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;33663:5;33656:12;;;33454:222;;;:::o;53438:92::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33185:207::-;33257:7;33302:1;33285:19;;:5;:19;;;;33277:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33368:9;:16;33378:5;33368:16;;;;;;;;;;;;;;;;33361:23;;33185:207;;;:::o;12272:103::-;11510:13;:11;:13::i;:::-;12337:30:::1;12364:1;12337:18;:30::i;:::-;12272:103::o:0;54556:118::-;11510:13;:11;:13::i;:::-;54651:17:::1;54635:13;:33;;;;54556:118:::0;:::o;58438:61::-;54174:12;:24;54187:10;54174:24;;;;;;;;;;;;;;;;;;;;;;;;;54166:33;;;;;;58483:8:::1;:6;:8::i;:::-;58438:61::o:0;11624:87::-;11670:7;11697:6;;;;;;;;;;;11690:13;;11624:87;:::o;55028:83::-;11510:13;:11;:13::i;:::-;55099:6:::1;55091:5;:14;;;;55028:83:::0;:::o;33912:104::-;33968:13;34001:7;33994:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33912:104;:::o;53358:33::-;;;;:::o;35499:155::-;35594:52;35613:12;:10;:12::i;:::-;35627:8;35637;35594:18;:52::i;:::-;35499:155;;:::o;36619:323::-;36793:41;36812:12;:10;:12::i;:::-;36826:7;36793:18;:41::i;:::-;36785:100;;;;;;;;;;;;:::i;:::-;;;;;;;;;36896:38;36910:4;36916:2;36920:7;36929:4;36896:13;:38::i;:::-;36619:323;;;;:::o;57688:434::-;57786:13;57827:16;57835:7;57827;:16::i;:::-;57811:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;57921:28;57952:10;:8;:10::i;:::-;57921:41;;58007:1;57982:14;57976:28;:32;:140;;;;;;;;;;;;;;;;;58044:14;58060:25;58077:7;58060:16;:25::i;:::-;58087:13;58027:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;57976:140;57969:147;;;57688:434;;;:::o;53912:105::-;11510:13;:11;:13::i;:::-;54003:6:::1;53979:21;;:30;;;;;;;;;;;;;;;;;;53912:105:::0;:::o;53720:31::-;;;;:::o;54896:124::-;11510:13;:11;:13::i;:::-;54997:17:::1;54981:13;:33;;;;;;;;;;;;:::i;:::-;;54896:124:::0;:::o;55117:93::-;11510:13;:11;:13::i;:::-;55195:7:::1;55180:12;;:22;;;;;;;;;;;;;;;;;;55117:93:::0;:::o;35725:164::-;35822:4;35846:18;:25;35865:5;35846:25;;;;;;;;;;;;;;;:35;35872:8;35846:35;;;;;;;;;;;;;;;;;;;;;;;;;35839:42;;35725:164;;;;:::o;12530:201::-;11510:13;:11;:13::i;:::-;12639:1:::1;12619:22;;:8;:22;;;;12611:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12695:28;12714:8;12695:18;:28::i;:::-;12530:201:::0;:::o;54448:101::-;11510:13;:11;:13::i;:::-;54536:5:::1;54517:12;:18;54530:4;54517:18;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;54448:101:::0;:::o;9566:108::-;9637:8;:6;:8::i;:::-;9636:9;9628:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9566:108::o;39349:110::-;39425:26;39435:2;39439:7;39425:26;;;;;;;;;;;;:9;:26::i;:::-;39349:110;;:::o;32816:305::-;32918:4;32970:25;32955:40;;;:11;:40;;;;:105;;;;33027:33;33012:48;;;:11;:48;;;;32955:105;:158;;;;33077:36;33101:11;33077:23;:36::i;:::-;32955:158;32935:178;;32816:305;;;:::o;43231:135::-;43313:16;43321:7;43313;:16::i;:::-;43305:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;43231:135;:::o;7520:98::-;7573:7;7600:10;7593:17;;7520:98;:::o;42510:174::-;42612:2;42585:15;:24;42601:7;42585:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;42668:7;42664:2;42630:46;;42639:23;42654:7;42639:14;:23::i;:::-;42630:46;;;;;;;;;;;;42510:174;;:::o;11789:132::-;11864:12;:10;:12::i;:::-;11853:23;;:7;:5;:7::i;:::-;:23;;;11845:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11789:132::o;38743:264::-;38836:4;38853:13;38869:23;38884:7;38869:14;:23::i;:::-;38853:39;;38922:5;38911:16;;:7;:16;;;:52;;;;38931:32;38948:5;38955:7;38931:16;:32::i;:::-;38911:52;:87;;;;38991:7;38967:31;;:20;38979:7;38967:11;:20::i;:::-;:31;;;38911:87;38903:96;;;38743:264;;;;:::o;41766:625::-;41925:4;41898:31;;:23;41913:7;41898:14;:23::i;:::-;:31;;;41890:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;42004:1;41990:16;;:2;:16;;;;41982:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42060:39;42081:4;42087:2;42091:7;42060:20;:39::i;:::-;42164:29;42181:1;42185:7;42164:8;:29::i;:::-;42225:1;42206:9;:15;42216:4;42206:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;42254:1;42237:9;:13;42247:2;42237:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;42285:2;42266:7;:16;42274:7;42266:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;42324:7;42320:2;42305:27;;42314:4;42305:27;;;;;;;;;;;;42345:38;42365:4;42371:2;42375:7;42345:19;:38::i;:::-;41766:625;;;:::o;10262:120::-;9271:16;:14;:16::i;:::-;10331:5:::1;10321:7;;:15;;;;;;;;;;;;;;;;;;10352:22;10361:12;:10;:12::i;:::-;10352:22;;;;;;:::i;:::-;;;;;;;;10262:120::o:0;12891:191::-;12965:16;12984:6;;;;;;;;;;;12965:25;;13010:8;13001:6;;:17;;;;;;;;;;;;;;;;;;13065:8;13034:40;;13055:8;13034:40;;;;;;;;;;;;12954:128;12891:191;:::o;10003:118::-;9012:19;:17;:19::i;:::-;10073:4:::1;10063:7;;:14;;;;;;;;;;;;;;;;;;10093:20;10100:12;:10;:12::i;:::-;10093:20;;;;;;:::i;:::-;;;;;;;;10003:118::o:0;42827:315::-;42982:8;42973:17;;:5;:17;;;;42965:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;43069:8;43031:18;:25;43050:5;43031:25;;;;;;;;;;;;;;;:35;43057:8;43031:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;43115:8;43093:41;;43108:5;43093:41;;;43125:8;43093:41;;;;;;:::i;:::-;;;;;;;;42827:315;;;:::o;37823:313::-;37979:28;37989:4;37995:2;37999:7;37979:9;:28::i;:::-;38026:47;38049:4;38055:2;38059:7;38068:4;38026:22;:47::i;:::-;38018:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;37823:313;;;;:::o;38449:127::-;38514:4;38566:1;38538:30;;:7;:16;38546:7;38538:16;;;;;;;;;;;;;;;;;;;;;:30;;;;38531:37;;38449:127;;;:::o;54229:102::-;54289:13;54318:7;54311:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;54229:102;:::o;4774:723::-;4830:13;5060:1;5051:5;:10;5047:53;;;5078:10;;;;;;;;;;;;;;;;;;;;;5047:53;5110:12;5125:5;5110:20;;5141:14;5166:78;5181:1;5173:4;:9;5166:78;;5199:8;;;;;:::i;:::-;;;;5230:2;5222:10;;;;;:::i;:::-;;;5166:78;;;5254:19;5286:6;5276:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5254:39;;5304:154;5320:1;5311:5;:10;5304:154;;5348:1;5338:11;;;;;:::i;:::-;;;5415:2;5407:5;:10;;;;:::i;:::-;5394:2;:24;;;;:::i;:::-;5381:39;;5364:6;5371;5364:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5444:2;5435:11;;;;;:::i;:::-;;;5304:154;;;5482:6;5468:21;;;;;4774:723;;;;:::o;39686:319::-;39815:18;39821:2;39825:7;39815:5;:18::i;:::-;39866:53;39897:1;39901:2;39905:7;39914:4;39866:22;:53::i;:::-;39844:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;39686:319;;;:::o;24478:157::-;24563:4;24602:25;24587:40;;;:11;:40;;;;24580:47;;24478:157;;;:::o;48685:589::-;48829:45;48856:4;48862:2;48866:7;48829:26;:45::i;:::-;48907:1;48891:18;;:4;:18;;;48887:187;;;48926:40;48958:7;48926:31;:40::i;:::-;48887:187;;;48996:2;48988:10;;:4;:10;;;48984:90;;49015:47;49048:4;49054:7;49015:32;:47::i;:::-;48984:90;48887:187;49102:1;49088:16;;:2;:16;;;49084:183;;;49121:45;49158:7;49121:36;:45::i;:::-;49084:183;;;49194:4;49188:10;;:2;:10;;;49184:83;;49215:40;49243:2;49247:7;49215:27;:40::i;:::-;49184:83;49084:183;48685:589;;;:::o;45866:125::-;;;;:::o;9751:108::-;9818:8;:6;:8::i;:::-;9810:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;9751:108::o;43930:853::-;44084:4;44105:15;:2;:13;;;:15::i;:::-;44101:675;;;44157:2;44141:36;;;44178:12;:10;:12::i;:::-;44192:4;44198:7;44207:4;44141:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;44137:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44399:1;44382:6;:13;:18;44378:328;;;44425:60;;;;;;;;;;:::i;:::-;;;;;;;;44378:328;44656:6;44650:13;44641:6;44637:2;44633:15;44626:38;44137:584;44273:41;;;44263:51;;;:6;:51;;;;44256:58;;;;;44101:675;44760:4;44753:11;;43930:853;;;;;;;:::o;40341:439::-;40435:1;40421:16;;:2;:16;;;;40413:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40494:16;40502:7;40494;:16::i;:::-;40493:17;40485:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;40556:45;40585:1;40589:2;40593:7;40556:20;:45::i;:::-;40631:1;40614:9;:13;40624:2;40614:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;40662:2;40643:7;:16;40651:7;40643:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;40707:7;40703:2;40682:33;;40699:1;40682:33;;;;;;;;;;;;40728:44;40756:1;40760:2;40764:7;40728:19;:44::i;:::-;40341:439;;:::o;45355:126::-;;;;:::o;49997:164::-;50101:10;:17;;;;50074:15;:24;50090:7;50074:24;;;;;;;;;;;:44;;;;50129:10;50145:7;50129:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49997:164;:::o;50788:988::-;51054:22;51104:1;51079:22;51096:4;51079:16;:22::i;:::-;:26;;;;:::i;:::-;51054:51;;51116:18;51137:17;:26;51155:7;51137:26;;;;;;;;;;;;51116:47;;51284:14;51270:10;:28;51266:328;;51315:19;51337:12;:18;51350:4;51337:18;;;;;;;;;;;;;;;:34;51356:14;51337:34;;;;;;;;;;;;51315:56;;51421:11;51388:12;:18;51401:4;51388:18;;;;;;;;;;;;;;;:30;51407:10;51388:30;;;;;;;;;;;:44;;;;51538:10;51505:17;:30;51523:11;51505:30;;;;;;;;;;;:43;;;;51300:294;51266:328;51690:17;:26;51708:7;51690:26;;;;;;;;;;;51683:33;;;51734:12;:18;51747:4;51734:18;;;;;;;;;;;;;;;:34;51753:14;51734:34;;;;;;;;;;;51727:41;;;50869:907;;50788:988;;:::o;52071:1079::-;52324:22;52369:1;52349:10;:17;;;;:21;;;;:::i;:::-;52324:46;;52381:18;52402:15;:24;52418:7;52402:24;;;;;;;;;;;;52381:45;;52753:19;52775:10;52786:14;52775:26;;;;;;;;:::i;:::-;;;;;;;;;;52753:48;;52839:11;52814:10;52825;52814:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;52950:10;52919:15;:28;52935:11;52919:28;;;;;;;;;;;:41;;;;53091:15;:24;53107:7;53091:24;;;;;;;;;;;53084:31;;;53126:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52142:1008;;;52071:1079;:::o;49575:221::-;49660:14;49677:20;49694:2;49677:16;:20::i;:::-;49660:37;;49735:7;49708:12;:16;49721:2;49708:16;;;;;;;;;;;;;;;:24;49725:6;49708:24;;;;;;;;;;;:34;;;;49782:6;49753:17;:26;49771:7;49753:26;;;;;;;;;;;:35;;;;49649:147;49575:221;;:::o;14322:326::-;14382:4;14639:1;14617:7;:19;;;:23;14610:30;;14322:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1179:5;1210:6;1204:13;1195:22;;1226:30;1250:5;1226:30;:::i;:::-;1125:137;;;;:::o;1268:::-;1313:5;1351:6;1338:20;1329:29;;1367:32;1393:5;1367:32;:::i;:::-;1268:137;;;;:::o;1411:141::-;1467:5;1498:6;1492:13;1483:22;;1514:32;1540:5;1514:32;:::i;:::-;1411:141;;;;:::o;1571:338::-;1626:5;1675:3;1668:4;1660:6;1656:17;1652:27;1642:122;;1683:79;;:::i;:::-;1642:122;1800:6;1787:20;1825:78;1899:3;1891:6;1884:4;1876:6;1872:17;1825:78;:::i;:::-;1816:87;;1632:277;1571:338;;;;:::o;1929:340::-;1985:5;2034:3;2027:4;2019:6;2015:17;2011:27;2001:122;;2042:79;;:::i;:::-;2001:122;2159:6;2146:20;2184:79;2259:3;2251:6;2244:4;2236:6;2232:17;2184:79;:::i;:::-;2175:88;;1991:278;1929:340;;;;:::o;2275:139::-;2321:5;2359:6;2346:20;2337:29;;2375:33;2402:5;2375:33;:::i;:::-;2275:139;;;;:::o;2420:143::-;2477:5;2508:6;2502:13;2493:22;;2524:33;2551:5;2524:33;:::i;:::-;2420:143;;;;:::o;2569:329::-;2628:6;2677:2;2665:9;2656:7;2652:23;2648:32;2645:119;;;2683:79;;:::i;:::-;2645:119;2803:1;2828:53;2873:7;2864:6;2853:9;2849:22;2828:53;:::i;:::-;2818:63;;2774:117;2569:329;;;;:::o;2904:474::-;2972:6;2980;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:53;3225:7;3216:6;3205:9;3201:22;3180:53;:::i;:::-;3170:63;;3126:117;3282:2;3308:53;3353:7;3344:6;3333:9;3329:22;3308:53;:::i;:::-;3298:63;;3253:118;2904:474;;;;;:::o;3384:619::-;3461:6;3469;3477;3526:2;3514:9;3505:7;3501:23;3497:32;3494:119;;;3532:79;;:::i;:::-;3494:119;3652:1;3677:53;3722:7;3713:6;3702:9;3698:22;3677:53;:::i;:::-;3667:63;;3623:117;3779:2;3805:53;3850:7;3841:6;3830:9;3826:22;3805:53;:::i;:::-;3795:63;;3750:118;3907:2;3933:53;3978:7;3969:6;3958:9;3954:22;3933:53;:::i;:::-;3923:63;;3878:118;3384:619;;;;;:::o;4009:943::-;4104:6;4112;4120;4128;4177:3;4165:9;4156:7;4152:23;4148:33;4145:120;;;4184:79;;:::i;:::-;4145:120;4304:1;4329:53;4374:7;4365:6;4354:9;4350:22;4329:53;:::i;:::-;4319:63;;4275:117;4431:2;4457:53;4502:7;4493:6;4482:9;4478:22;4457:53;:::i;:::-;4447:63;;4402:118;4559:2;4585:53;4630:7;4621:6;4610:9;4606:22;4585:53;:::i;:::-;4575:63;;4530:118;4715:2;4704:9;4700:18;4687:32;4746:18;4738:6;4735:30;4732:117;;;4768:79;;:::i;:::-;4732:117;4873:62;4927:7;4918:6;4907:9;4903:22;4873:62;:::i;:::-;4863:72;;4658:287;4009:943;;;;;;;:::o;4958:468::-;5023:6;5031;5080:2;5068:9;5059:7;5055:23;5051:32;5048:119;;;5086:79;;:::i;:::-;5048:119;5206:1;5231:53;5276:7;5267:6;5256:9;5252:22;5231:53;:::i;:::-;5221:63;;5177:117;5333:2;5359:50;5401:7;5392:6;5381:9;5377:22;5359:50;:::i;:::-;5349:60;;5304:115;4958:468;;;;;:::o;5432:474::-;5500:6;5508;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5810:2;5836:53;5881:7;5872:6;5861:9;5857:22;5836:53;:::i;:::-;5826:63;;5781:118;5432:474;;;;;:::o;5912:323::-;5968:6;6017:2;6005:9;5996:7;5992:23;5988:32;5985:119;;;6023:79;;:::i;:::-;5985:119;6143:1;6168:50;6210:7;6201:6;6190:9;6186:22;6168:50;:::i;:::-;6158:60;;6114:114;5912:323;;;;:::o;6241:345::-;6308:6;6357:2;6345:9;6336:7;6332:23;6328:32;6325:119;;;6363:79;;:::i;:::-;6325:119;6483:1;6508:61;6561:7;6552:6;6541:9;6537:22;6508:61;:::i;:::-;6498:71;;6454:125;6241:345;;;;:::o;6592:327::-;6650:6;6699:2;6687:9;6678:7;6674:23;6670:32;6667:119;;;6705:79;;:::i;:::-;6667:119;6825:1;6850:52;6894:7;6885:6;6874:9;6870:22;6850:52;:::i;:::-;6840:62;;6796:116;6592:327;;;;:::o;6925:349::-;6994:6;7043:2;7031:9;7022:7;7018:23;7014:32;7011:119;;;7049:79;;:::i;:::-;7011:119;7169:1;7194:63;7249:7;7240:6;7229:9;7225:22;7194:63;:::i;:::-;7184:73;;7140:127;6925:349;;;;:::o;7280:509::-;7349:6;7398:2;7386:9;7377:7;7373:23;7369:32;7366:119;;;7404:79;;:::i;:::-;7366:119;7552:1;7541:9;7537:17;7524:31;7582:18;7574:6;7571:30;7568:117;;;7604:79;;:::i;:::-;7568:117;7709:63;7764:7;7755:6;7744:9;7740:22;7709:63;:::i;:::-;7699:73;;7495:287;7280:509;;;;:::o;7795:329::-;7854:6;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;7795:329;;;;:::o;8130:351::-;8200:6;8249:2;8237:9;8228:7;8224:23;8220:32;8217:119;;;8255:79;;:::i;:::-;8217:119;8375:1;8400:64;8456:7;8447:6;8436:9;8432:22;8400:64;:::i;:::-;8390:74;;8346:128;8130:351;;;;:::o;8487:179::-;8556:10;8577:46;8619:3;8611:6;8577:46;:::i;:::-;8655:4;8650:3;8646:14;8632:28;;8487:179;;;;:::o;8672:118::-;8759:24;8777:5;8759:24;:::i;:::-;8754:3;8747:37;8672:118;;:::o;8826:732::-;8945:3;8974:54;9022:5;8974:54;:::i;:::-;9044:86;9123:6;9118:3;9044:86;:::i;:::-;9037:93;;9154:56;9204:5;9154:56;:::i;:::-;9233:7;9264:1;9249:284;9274:6;9271:1;9268:13;9249:284;;;9350:6;9344:13;9377:63;9436:3;9421:13;9377:63;:::i;:::-;9370:70;;9463:60;9516:6;9463:60;:::i;:::-;9453:70;;9309:224;9296:1;9293;9289:9;9284:14;;9249:284;;;9253:14;9549:3;9542:10;;8950:608;;;8826:732;;;;:::o;9564:109::-;9645:21;9660:5;9645:21;:::i;:::-;9640:3;9633:34;9564:109;;:::o;9679:360::-;9765:3;9793:38;9825:5;9793:38;:::i;:::-;9847:70;9910:6;9905:3;9847:70;:::i;:::-;9840:77;;9926:52;9971:6;9966:3;9959:4;9952:5;9948:16;9926:52;:::i;:::-;10003:29;10025:6;10003:29;:::i;:::-;9998:3;9994:39;9987:46;;9769:270;9679:360;;;;:::o;10045:364::-;10133:3;10161:39;10194:5;10161:39;:::i;:::-;10216:71;10280:6;10275:3;10216:71;:::i;:::-;10209:78;;10296:52;10341:6;10336:3;10329:4;10322:5;10318:16;10296:52;:::i;:::-;10373:29;10395:6;10373:29;:::i;:::-;10368:3;10364:39;10357:46;;10137:272;10045:364;;;;:::o;10415:377::-;10521:3;10549:39;10582:5;10549:39;:::i;:::-;10604:89;10686:6;10681:3;10604:89;:::i;:::-;10597:96;;10702:52;10747:6;10742:3;10735:4;10728:5;10724:16;10702:52;:::i;:::-;10779:6;10774:3;10770:16;10763:23;;10525:267;10415:377;;;;:::o;10822:845::-;10925:3;10962:5;10956:12;10991:36;11017:9;10991:36;:::i;:::-;11043:89;11125:6;11120:3;11043:89;:::i;:::-;11036:96;;11163:1;11152:9;11148:17;11179:1;11174:137;;;;11325:1;11320:341;;;;11141:520;;11174:137;11258:4;11254:9;11243;11239:25;11234:3;11227:38;11294:6;11289:3;11285:16;11278:23;;11174:137;;11320:341;11387:38;11419:5;11387:38;:::i;:::-;11447:1;11461:154;11475:6;11472:1;11469:13;11461:154;;;11549:7;11543:14;11539:1;11534:3;11530:11;11523:35;11599:1;11590:7;11586:15;11575:26;;11497:4;11494:1;11490:12;11485:17;;11461:154;;;11644:6;11639:3;11635:16;11628:23;;11327:334;;11141:520;;10929:738;;10822:845;;;;:::o;11673:366::-;11815:3;11836:67;11900:2;11895:3;11836:67;:::i;:::-;11829:74;;11912:93;12001:3;11912:93;:::i;:::-;12030:2;12025:3;12021:12;12014:19;;11673:366;;;:::o;12045:365::-;12187:3;12208:66;12272:1;12267:3;12208:66;:::i;:::-;12201:73;;12283:93;12372:3;12283:93;:::i;:::-;12401:2;12396:3;12392:12;12385:19;;12045:365;;;:::o;12416:366::-;12558:3;12579:67;12643:2;12638:3;12579:67;:::i;:::-;12572:74;;12655:93;12744:3;12655:93;:::i;:::-;12773:2;12768:3;12764:12;12757:19;;12416:366;;;:::o;12788:::-;12930:3;12951:67;13015:2;13010:3;12951:67;:::i;:::-;12944:74;;13027:93;13116:3;13027:93;:::i;:::-;13145:2;13140:3;13136:12;13129:19;;12788:366;;;:::o;13160:::-;13302:3;13323:67;13387:2;13382:3;13323:67;:::i;:::-;13316:74;;13399:93;13488:3;13399:93;:::i;:::-;13517:2;13512:3;13508:12;13501:19;;13160:366;;;:::o;13532:::-;13674:3;13695:67;13759:2;13754:3;13695:67;:::i;:::-;13688:74;;13771:93;13860:3;13771:93;:::i;:::-;13889:2;13884:3;13880:12;13873:19;;13532:366;;;:::o;13904:::-;14046:3;14067:67;14131:2;14126:3;14067:67;:::i;:::-;14060:74;;14143:93;14232:3;14143:93;:::i;:::-;14261:2;14256:3;14252:12;14245:19;;13904:366;;;:::o;14276:::-;14418:3;14439:67;14503:2;14498:3;14439:67;:::i;:::-;14432:74;;14515:93;14604:3;14515:93;:::i;:::-;14633:2;14628:3;14624:12;14617:19;;14276:366;;;:::o;14648:::-;14790:3;14811:67;14875:2;14870:3;14811:67;:::i;:::-;14804:74;;14887:93;14976:3;14887:93;:::i;:::-;15005:2;15000:3;14996:12;14989:19;;14648:366;;;:::o;15020:::-;15162:3;15183:67;15247:2;15242:3;15183:67;:::i;:::-;15176:74;;15259:93;15348:3;15259:93;:::i;:::-;15377:2;15372:3;15368:12;15361:19;;15020:366;;;:::o;15392:::-;15534:3;15555:67;15619:2;15614:3;15555:67;:::i;:::-;15548:74;;15631:93;15720:3;15631:93;:::i;:::-;15749:2;15744:3;15740:12;15733:19;;15392:366;;;:::o;15764:::-;15906:3;15927:67;15991:2;15986:3;15927:67;:::i;:::-;15920:74;;16003:93;16092:3;16003:93;:::i;:::-;16121:2;16116:3;16112:12;16105:19;;15764:366;;;:::o;16136:::-;16278:3;16299:67;16363:2;16358:3;16299:67;:::i;:::-;16292:74;;16375:93;16464:3;16375:93;:::i;:::-;16493:2;16488:3;16484:12;16477:19;;16136:366;;;:::o;16508:::-;16650:3;16671:67;16735:2;16730:3;16671:67;:::i;:::-;16664:74;;16747:93;16836:3;16747:93;:::i;:::-;16865:2;16860:3;16856:12;16849:19;;16508:366;;;:::o;16880:::-;17022:3;17043:67;17107:2;17102:3;17043:67;:::i;:::-;17036:74;;17119:93;17208:3;17119:93;:::i;:::-;17237:2;17232:3;17228:12;17221:19;;16880:366;;;:::o;17252:::-;17394:3;17415:67;17479:2;17474:3;17415:67;:::i;:::-;17408:74;;17491:93;17580:3;17491:93;:::i;:::-;17609:2;17604:3;17600:12;17593:19;;17252:366;;;:::o;17624:::-;17766:3;17787:67;17851:2;17846:3;17787:67;:::i;:::-;17780:74;;17863:93;17952:3;17863:93;:::i;:::-;17981:2;17976:3;17972:12;17965:19;;17624:366;;;:::o;17996:::-;18138:3;18159:67;18223:2;18218:3;18159:67;:::i;:::-;18152:74;;18235:93;18324:3;18235:93;:::i;:::-;18353:2;18348:3;18344:12;18337:19;;17996:366;;;:::o;18368:::-;18510:3;18531:67;18595:2;18590:3;18531:67;:::i;:::-;18524:74;;18607:93;18696:3;18607:93;:::i;:::-;18725:2;18720:3;18716:12;18709:19;;18368:366;;;:::o;18740:::-;18882:3;18903:67;18967:2;18962:3;18903:67;:::i;:::-;18896:74;;18979:93;19068:3;18979:93;:::i;:::-;19097:2;19092:3;19088:12;19081:19;;18740:366;;;:::o;19112:::-;19254:3;19275:67;19339:2;19334:3;19275:67;:::i;:::-;19268:74;;19351:93;19440:3;19351:93;:::i;:::-;19469:2;19464:3;19460:12;19453:19;;19112:366;;;:::o;19484:::-;19626:3;19647:67;19711:2;19706:3;19647:67;:::i;:::-;19640:74;;19723:93;19812:3;19723:93;:::i;:::-;19841:2;19836:3;19832:12;19825:19;;19484:366;;;:::o;19856:::-;19998:3;20019:67;20083:2;20078:3;20019:67;:::i;:::-;20012:74;;20095:93;20184:3;20095:93;:::i;:::-;20213:2;20208:3;20204:12;20197:19;;19856:366;;;:::o;20228:108::-;20305:24;20323:5;20305:24;:::i;:::-;20300:3;20293:37;20228:108;;:::o;20342:118::-;20429:24;20447:5;20429:24;:::i;:::-;20424:3;20417:37;20342:118;;:::o;20466:589::-;20691:3;20713:95;20804:3;20795:6;20713:95;:::i;:::-;20706:102;;20825:95;20916:3;20907:6;20825:95;:::i;:::-;20818:102;;20937:92;21025:3;21016:6;20937:92;:::i;:::-;20930:99;;21046:3;21039:10;;20466:589;;;;;;:::o;21061:222::-;21154:4;21192:2;21181:9;21177:18;21169:26;;21205:71;21273:1;21262:9;21258:17;21249:6;21205:71;:::i;:::-;21061:222;;;;:::o;21289:640::-;21484:4;21522:3;21511:9;21507:19;21499:27;;21536:71;21604:1;21593:9;21589:17;21580:6;21536:71;:::i;:::-;21617:72;21685:2;21674:9;21670:18;21661:6;21617:72;:::i;:::-;21699;21767:2;21756:9;21752:18;21743:6;21699:72;:::i;:::-;21818:9;21812:4;21808:20;21803:2;21792:9;21788:18;21781:48;21846:76;21917:4;21908:6;21846:76;:::i;:::-;21838:84;;21289:640;;;;;;;:::o;21935:332::-;22056:4;22094:2;22083:9;22079:18;22071:26;;22107:71;22175:1;22164:9;22160:17;22151:6;22107:71;:::i;:::-;22188:72;22256:2;22245:9;22241:18;22232:6;22188:72;:::i;:::-;21935:332;;;;;:::o;22273:373::-;22416:4;22454:2;22443:9;22439:18;22431:26;;22503:9;22497:4;22493:20;22489:1;22478:9;22474:17;22467:47;22531:108;22634:4;22625:6;22531:108;:::i;:::-;22523:116;;22273:373;;;;:::o;22652:210::-;22739:4;22777:2;22766:9;22762:18;22754:26;;22790:65;22852:1;22841:9;22837:17;22828:6;22790:65;:::i;:::-;22652:210;;;;:::o;22868:313::-;22981:4;23019:2;23008:9;23004:18;22996:26;;23068:9;23062:4;23058:20;23054:1;23043:9;23039:17;23032:47;23096:78;23169:4;23160:6;23096:78;:::i;:::-;23088:86;;22868:313;;;;:::o;23187:419::-;23353:4;23391:2;23380:9;23376:18;23368:26;;23440:9;23434:4;23430:20;23426:1;23415:9;23411:17;23404:47;23468:131;23594:4;23468:131;:::i;:::-;23460:139;;23187:419;;;:::o;23612:::-;23778:4;23816:2;23805:9;23801:18;23793:26;;23865:9;23859:4;23855:20;23851:1;23840:9;23836:17;23829:47;23893:131;24019:4;23893:131;:::i;:::-;23885:139;;23612:419;;;:::o;24037:::-;24203:4;24241:2;24230:9;24226:18;24218:26;;24290:9;24284:4;24280:20;24276:1;24265:9;24261:17;24254:47;24318:131;24444:4;24318:131;:::i;:::-;24310:139;;24037:419;;;:::o;24462:::-;24628:4;24666:2;24655:9;24651:18;24643:26;;24715:9;24709:4;24705:20;24701:1;24690:9;24686:17;24679:47;24743:131;24869:4;24743:131;:::i;:::-;24735:139;;24462:419;;;:::o;24887:::-;25053:4;25091:2;25080:9;25076:18;25068:26;;25140:9;25134:4;25130:20;25126:1;25115:9;25111:17;25104:47;25168:131;25294:4;25168:131;:::i;:::-;25160:139;;24887:419;;;:::o;25312:::-;25478:4;25516:2;25505:9;25501:18;25493:26;;25565:9;25559:4;25555:20;25551:1;25540:9;25536:17;25529:47;25593:131;25719:4;25593:131;:::i;:::-;25585:139;;25312:419;;;:::o;25737:::-;25903:4;25941:2;25930:9;25926:18;25918:26;;25990:9;25984:4;25980:20;25976:1;25965:9;25961:17;25954:47;26018:131;26144:4;26018:131;:::i;:::-;26010:139;;25737:419;;;:::o;26162:::-;26328:4;26366:2;26355:9;26351:18;26343:26;;26415:9;26409:4;26405:20;26401:1;26390:9;26386:17;26379:47;26443:131;26569:4;26443:131;:::i;:::-;26435:139;;26162:419;;;:::o;26587:::-;26753:4;26791:2;26780:9;26776:18;26768:26;;26840:9;26834:4;26830:20;26826:1;26815:9;26811:17;26804:47;26868:131;26994:4;26868:131;:::i;:::-;26860:139;;26587:419;;;:::o;27012:::-;27178:4;27216:2;27205:9;27201:18;27193:26;;27265:9;27259:4;27255:20;27251:1;27240:9;27236:17;27229:47;27293:131;27419:4;27293:131;:::i;:::-;27285:139;;27012:419;;;:::o;27437:::-;27603:4;27641:2;27630:9;27626:18;27618:26;;27690:9;27684:4;27680:20;27676:1;27665:9;27661:17;27654:47;27718:131;27844:4;27718:131;:::i;:::-;27710:139;;27437:419;;;:::o;27862:::-;28028:4;28066:2;28055:9;28051:18;28043:26;;28115:9;28109:4;28105:20;28101:1;28090:9;28086:17;28079:47;28143:131;28269:4;28143:131;:::i;:::-;28135:139;;27862:419;;;:::o;28287:::-;28453:4;28491:2;28480:9;28476:18;28468:26;;28540:9;28534:4;28530:20;28526:1;28515:9;28511:17;28504:47;28568:131;28694:4;28568:131;:::i;:::-;28560:139;;28287:419;;;:::o;28712:::-;28878:4;28916:2;28905:9;28901:18;28893:26;;28965:9;28959:4;28955:20;28951:1;28940:9;28936:17;28929:47;28993:131;29119:4;28993:131;:::i;:::-;28985:139;;28712:419;;;:::o;29137:::-;29303:4;29341:2;29330:9;29326:18;29318:26;;29390:9;29384:4;29380:20;29376:1;29365:9;29361:17;29354:47;29418:131;29544:4;29418:131;:::i;:::-;29410:139;;29137:419;;;:::o;29562:::-;29728:4;29766:2;29755:9;29751:18;29743:26;;29815:9;29809:4;29805:20;29801:1;29790:9;29786:17;29779:47;29843:131;29969:4;29843:131;:::i;:::-;29835:139;;29562:419;;;:::o;29987:::-;30153:4;30191:2;30180:9;30176:18;30168:26;;30240:9;30234:4;30230:20;30226:1;30215:9;30211:17;30204:47;30268:131;30394:4;30268:131;:::i;:::-;30260:139;;29987:419;;;:::o;30412:::-;30578:4;30616:2;30605:9;30601:18;30593:26;;30665:9;30659:4;30655:20;30651:1;30640:9;30636:17;30629:47;30693:131;30819:4;30693:131;:::i;:::-;30685:139;;30412:419;;;:::o;30837:::-;31003:4;31041:2;31030:9;31026:18;31018:26;;31090:9;31084:4;31080:20;31076:1;31065:9;31061:17;31054:47;31118:131;31244:4;31118:131;:::i;:::-;31110:139;;30837:419;;;:::o;31262:::-;31428:4;31466:2;31455:9;31451:18;31443:26;;31515:9;31509:4;31505:20;31501:1;31490:9;31486:17;31479:47;31543:131;31669:4;31543:131;:::i;:::-;31535:139;;31262:419;;;:::o;31687:::-;31853:4;31891:2;31880:9;31876:18;31868:26;;31940:9;31934:4;31930:20;31926:1;31915:9;31911:17;31904:47;31968:131;32094:4;31968:131;:::i;:::-;31960:139;;31687:419;;;:::o;32112:::-;32278:4;32316:2;32305:9;32301:18;32293:26;;32365:9;32359:4;32355:20;32351:1;32340:9;32336:17;32329:47;32393:131;32519:4;32393:131;:::i;:::-;32385:139;;32112:419;;;:::o;32537:::-;32703:4;32741:2;32730:9;32726:18;32718:26;;32790:9;32784:4;32780:20;32776:1;32765:9;32761:17;32754:47;32818:131;32944:4;32818:131;:::i;:::-;32810:139;;32537:419;;;:::o;32962:222::-;33055:4;33093:2;33082:9;33078:18;33070:26;;33106:71;33174:1;33163:9;33159:17;33150:6;33106:71;:::i;:::-;32962:222;;;;:::o;33190:129::-;33224:6;33251:20;;:::i;:::-;33241:30;;33280:33;33308:4;33300:6;33280:33;:::i;:::-;33190:129;;;:::o;33325:75::-;33358:6;33391:2;33385:9;33375:19;;33325:75;:::o;33406:307::-;33467:4;33557:18;33549:6;33546:30;33543:56;;;33579:18;;:::i;:::-;33543:56;33617:29;33639:6;33617:29;:::i;:::-;33609:37;;33701:4;33695;33691:15;33683:23;;33406:307;;;:::o;33719:308::-;33781:4;33871:18;33863:6;33860:30;33857:56;;;33893:18;;:::i;:::-;33857:56;33931:29;33953:6;33931:29;:::i;:::-;33923:37;;34015:4;34009;34005:15;33997:23;;33719:308;;;:::o;34033:132::-;34100:4;34123:3;34115:11;;34153:4;34148:3;34144:14;34136:22;;34033:132;;;:::o;34171:141::-;34220:4;34243:3;34235:11;;34266:3;34263:1;34256:14;34300:4;34297:1;34287:18;34279:26;;34171:141;;;:::o;34318:114::-;34385:6;34419:5;34413:12;34403:22;;34318:114;;;:::o;34438:98::-;34489:6;34523:5;34517:12;34507:22;;34438:98;;;:::o;34542:99::-;34594:6;34628:5;34622:12;34612:22;;34542:99;;;:::o;34647:113::-;34717:4;34749;34744:3;34740:14;34732:22;;34647:113;;;:::o;34766:184::-;34865:11;34899:6;34894:3;34887:19;34939:4;34934:3;34930:14;34915:29;;34766:184;;;;:::o;34956:168::-;35039:11;35073:6;35068:3;35061:19;35113:4;35108:3;35104:14;35089:29;;34956:168;;;;:::o;35130:169::-;35214:11;35248:6;35243:3;35236:19;35288:4;35283:3;35279:14;35264:29;;35130:169;;;;:::o;35305:148::-;35407:11;35444:3;35429:18;;35305:148;;;;:::o;35459:305::-;35499:3;35518:20;35536:1;35518:20;:::i;:::-;35513:25;;35552:20;35570:1;35552:20;:::i;:::-;35547:25;;35706:1;35638:66;35634:74;35631:1;35628:81;35625:107;;;35712:18;;:::i;:::-;35625:107;35756:1;35753;35749:9;35742:16;;35459:305;;;;:::o;35770:185::-;35810:1;35827:20;35845:1;35827:20;:::i;:::-;35822:25;;35861:20;35879:1;35861:20;:::i;:::-;35856:25;;35900:1;35890:35;;35905:18;;:::i;:::-;35890:35;35947:1;35944;35940:9;35935:14;;35770:185;;;;:::o;35961:348::-;36001:7;36024:20;36042:1;36024:20;:::i;:::-;36019:25;;36058:20;36076:1;36058:20;:::i;:::-;36053:25;;36246:1;36178:66;36174:74;36171:1;36168:81;36163:1;36156:9;36149:17;36145:105;36142:131;;;36253:18;;:::i;:::-;36142:131;36301:1;36298;36294:9;36283:20;;35961:348;;;;:::o;36315:191::-;36355:4;36375:20;36393:1;36375:20;:::i;:::-;36370:25;;36409:20;36427:1;36409:20;:::i;:::-;36404:25;;36448:1;36445;36442:8;36439:34;;;36453:18;;:::i;:::-;36439:34;36498:1;36495;36491:9;36483:17;;36315:191;;;;:::o;36512:96::-;36549:7;36578:24;36596:5;36578:24;:::i;:::-;36567:35;;36512:96;;;:::o;36614:90::-;36648:7;36691:5;36684:13;36677:21;36666:32;;36614:90;;;:::o;36710:149::-;36746:7;36786:66;36779:5;36775:78;36764:89;;36710:149;;;:::o;36865:126::-;36902:7;36942:42;36935:5;36931:54;36920:65;;36865:126;;;:::o;36997:77::-;37034:7;37063:5;37052:16;;36997:77;;;:::o;37080:154::-;37164:6;37159:3;37154;37141:30;37226:1;37217:6;37212:3;37208:16;37201:27;37080:154;;;:::o;37240:307::-;37308:1;37318:113;37332:6;37329:1;37326:13;37318:113;;;37417:1;37412:3;37408:11;37402:18;37398:1;37393:3;37389:11;37382:39;37354:2;37351:1;37347:10;37342:15;;37318:113;;;37449:6;37446:1;37443:13;37440:101;;;37529:1;37520:6;37515:3;37511:16;37504:27;37440:101;37289:258;37240:307;;;:::o;37553:320::-;37597:6;37634:1;37628:4;37624:12;37614:22;;37681:1;37675:4;37671:12;37702:18;37692:81;;37758:4;37750:6;37746:17;37736:27;;37692:81;37820:2;37812:6;37809:14;37789:18;37786:38;37783:84;;;37839:18;;:::i;:::-;37783:84;37604:269;37553:320;;;:::o;37879:281::-;37962:27;37984:4;37962:27;:::i;:::-;37954:6;37950:40;38092:6;38080:10;38077:22;38056:18;38044:10;38041:34;38038:62;38035:88;;;38103:18;;:::i;:::-;38035:88;38143:10;38139:2;38132:22;37922:238;37879:281;;:::o;38166:233::-;38205:3;38228:24;38246:5;38228:24;:::i;:::-;38219:33;;38274:66;38267:5;38264:77;38261:103;;;38344:18;;:::i;:::-;38261:103;38391:1;38384:5;38380:13;38373:20;;38166:233;;;:::o;38405:176::-;38437:1;38454:20;38472:1;38454:20;:::i;:::-;38449:25;;38488:20;38506:1;38488:20;:::i;:::-;38483:25;;38527:1;38517:35;;38532:18;;:::i;:::-;38517:35;38573:1;38570;38566:9;38561:14;;38405:176;;;;:::o;38587:180::-;38635:77;38632:1;38625:88;38732:4;38729:1;38722:15;38756:4;38753:1;38746:15;38773:180;38821:77;38818:1;38811:88;38918:4;38915:1;38908:15;38942:4;38939:1;38932:15;38959:180;39007:77;39004:1;38997:88;39104:4;39101:1;39094:15;39128:4;39125:1;39118:15;39145:180;39193:77;39190:1;39183:88;39290:4;39287:1;39280:15;39314:4;39311:1;39304:15;39331:180;39379:77;39376:1;39369:88;39476:4;39473:1;39466:15;39500:4;39497:1;39490:15;39517:180;39565:77;39562:1;39555:88;39662:4;39659:1;39652:15;39686:4;39683:1;39676:15;39703:117;39812:1;39809;39802:12;39826:117;39935:1;39932;39925:12;39949:117;40058:1;40055;40048:12;40072:117;40181:1;40178;40171:12;40195:102;40236:6;40287:2;40283:7;40278:2;40271:5;40267:14;40263:28;40253:38;;40195:102;;;:::o;40303:170::-;40443:22;40439:1;40431:6;40427:14;40420:46;40303:170;:::o;40479:156::-;40619:8;40615:1;40607:6;40603:14;40596:32;40479:156;:::o;40641:230::-;40781:34;40777:1;40769:6;40765:14;40758:58;40850:13;40845:2;40837:6;40833:15;40826:38;40641:230;:::o;40877:237::-;41017:34;41013:1;41005:6;41001:14;40994:58;41086:20;41081:2;41073:6;41069:15;41062:45;40877:237;:::o;41120:225::-;41260:34;41256:1;41248:6;41244:14;41237:58;41329:8;41324:2;41316:6;41312:15;41305:33;41120:225;:::o;41351:224::-;41491:34;41487:1;41479:6;41475:14;41468:58;41560:7;41555:2;41547:6;41543:15;41536:32;41351:224;:::o;41581:178::-;41721:30;41717:1;41709:6;41705:14;41698:54;41581:178;:::o;41765:223::-;41905:34;41901:1;41893:6;41889:14;41882:58;41974:6;41969:2;41961:6;41957:15;41950:31;41765:223;:::o;41994:175::-;42134:27;42130:1;42122:6;42118:14;42111:51;41994:175;:::o;42175:161::-;42315:13;42311:1;42303:6;42299:14;42292:37;42175:161;:::o;42342:166::-;42482:18;42478:1;42470:6;42466:14;42459:42;42342:166;:::o;42514:228::-;42654:34;42650:1;42642:6;42638:14;42631:58;42723:11;42718:2;42710:6;42706:15;42699:36;42514:228;:::o;42748:172::-;42888:24;42884:1;42876:6;42872:14;42865:48;42748:172;:::o;42926:223::-;43066:34;43062:1;43054:6;43050:14;43043:58;43135:6;43130:2;43122:6;43118:15;43111:31;42926:223;:::o;43155:249::-;43295:34;43291:1;43283:6;43279:14;43272:58;43364:32;43359:2;43351:6;43347:15;43340:57;43155:249;:::o;43410:182::-;43550:34;43546:1;43538:6;43534:14;43527:58;43410:182;:::o;43598:::-;43738:34;43734:1;43726:6;43722:14;43715:58;43598:182;:::o;43786:234::-;43926:34;43922:1;43914:6;43910:14;43903:58;43995:17;43990:2;43982:6;43978:15;43971:42;43786:234;:::o;44026:174::-;44166:26;44162:1;44154:6;44150:14;44143:50;44026:174;:::o;44206:220::-;44346:34;44342:1;44334:6;44330:14;44323:58;44415:3;44410:2;44402:6;44398:15;44391:28;44206:220;:::o;44432:231::-;44572:34;44568:1;44560:6;44556:14;44549:58;44641:14;44636:2;44628:6;44624:15;44617:39;44432:231;:::o;44669:233::-;44809:34;44805:1;44797:6;44793:14;44786:58;44878:16;44873:2;44865:6;44861:15;44854:41;44669:233;:::o;44908:177::-;45048:29;45044:1;45036:6;45032:14;45025:53;44908:177;:::o;45091:122::-;45164:24;45182:5;45164:24;:::i;:::-;45157:5;45154:35;45144:63;;45203:1;45200;45193:12;45144:63;45091:122;:::o;45219:116::-;45289:21;45304:5;45289:21;:::i;:::-;45282:5;45279:32;45269:60;;45325:1;45322;45315:12;45269:60;45219:116;:::o;45341:120::-;45413:23;45430:5;45413:23;:::i;:::-;45406:5;45403:34;45393:62;;45451:1;45448;45441:12;45393:62;45341:120;:::o;45467:122::-;45540:24;45558:5;45540:24;:::i;:::-;45533:5;45530:35;45520:63;;45579:1;45576;45569:12;45520:63;45467:122;:::o
Swarm Source
ipfs://7784af70f5b5273000112dc7264b6bc4124aeb8d2accc081ba01826475dfbd94
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.