Source Code
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
USDTex
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2020-10-26
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;
/**
* @title SafeERC20
* @dev Wrappers around ERC20 operations that throw on failure (when the token
* contract returns false). Tokens that return no value (and instead revert or
* throw on failure) are also supported, non-reverting calls are assumed to be
* successful.
* To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
* which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
*/
library SafeERC20 {
using SafeMath for uint256;
using Address for address;
function safeTransfer(IERC20 token, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
}
function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
_callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
}
/**
* @dev Deprecated. This function has issues similar to the ones found in
* {IERC20-approve}, and its usage is discouraged.
*
* Whenever possible, use {safeIncreaseAllowance} and
* {safeDecreaseAllowance} instead.
*/
function safeApprove(IERC20 token, address spender, uint256 value) internal {
// safeApprove should only be called when setting an initial allowance,
// or when resetting it to zero. To increase and decrease it, use
// 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
// solhint-disable-next-line max-line-length
require((value == 0) || (token.allowance(address(this), spender) == 0),
"SafeERC20: approve from non-zero to non-zero allowance"
);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
}
function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).add(value);
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
_callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
}
/**
* @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
* on the return value: the return value is optional (but if data is returned, it must not be false).
* @param token The token targeted by the call.
* @param data The call data (encoded using abi.encode or one of its variants).
*/
function _callOptionalReturn(IERC20 token, bytes memory data) private {
// We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
// we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
// the target address contains contract code and also asserts for success in the low-level call.
bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
if (returndata.length > 0) { // Return data is optional
// solhint-disable-next-line max-line-length
require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
}
}
}
pragma solidity ^0.6.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `recipient`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address recipient, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `sender` to `recipient` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
}
pragma solidity ^0.6.0;
/**
* @dev Wrappers over Solidity's arithmetic operations with added overflow
* checks.
*
* Arithmetic operations in Solidity wrap on overflow. This can easily result
* in bugs, because programmers usually assume that an overflow raises an
* error, which is the standard behavior in high level programming languages.
* `SafeMath` restores this intuition by reverting the transaction when an
* operation overflows.
*
* Using this library instead of the unchecked operations eliminates an entire
* class of bugs, so it's recommended to use it always.
*/
library SafeMath {
/**
* @dev Returns the addition of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `+` operator.
*
* Requirements:
*
* - Addition cannot overflow.
*/
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
/**
* @dev Returns the subtraction of two unsigned integers, reverting with custom message on
* overflow (when the result is negative).
*
* Counterpart to Solidity's `-` operator.
*
* Requirements:
*
* - Subtraction cannot overflow.
*/
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
/**
* @dev Returns the multiplication of two unsigned integers, reverting on
* overflow.
*
* Counterpart to Solidity's `*` operator.
*
* Requirements:
*
* - Multiplication cannot overflow.
*/
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
// Gas optimization: this is cheaper than requiring 'a' not being zero, but the
// benefit is lost if 'b' is also tested.
// See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
/**
* @dev Returns the integer division of two unsigned integers. Reverts with custom message on
* division by zero. The result is rounded towards zero.
*
* Counterpart to Solidity's `/` operator. Note: this function uses a
* `revert` opcode (which leaves remaining gas untouched) while Solidity
* uses an invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
/**
* @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
* Reverts with custom message when dividing by zero.
*
* Counterpart to Solidity's `%` operator. This function uses a `revert`
* opcode (which leaves remaining gas untouched) while Solidity uses an
* invalid opcode to revert (consuming all remaining gas).
*
* Requirements:
*
* - The divisor cannot be zero.
*/
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
pragma solidity ^0.6.2;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies in extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
// solhint-disable-next-line no-inline-assembly
assembly { size := extcodesize(account) }
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
// solhint-disable-next-line avoid-low-level-calls, avoid-call-value
(bool success, ) = recipient.call{ value: amount }("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain`call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
return _functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
require(address(this).balance >= value, "Address: insufficient balance for call");
return _functionCallWithValue(target, data, value, errorMessage);
}
function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
require(isContract(target), "Address: call to non-contract");
// solhint-disable-next-line avoid-low-level-calls
(bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
// solhint-disable-next-line no-inline-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
pragma solidity 0.6.12;
contract USDTex {
using SafeMath for uint256;
using SafeERC20 for IERC20;
// USDT contract Decimals: 6
IERC20 public investToken;
uint256 constant public INVEST_MIN_AMOUNT = 1e7; // 10 usdt
uint256 constant public PERCENTS_DIVIDER = 1e13 ;//1000;
uint256 constant public BASE_PERCENT = 1e11;
uint256 constant public MAX_PERCENT = 18*(1e12);
uint256 constant public MARKETING_FEE = 5*(1e11);
uint256 constant public PROJECT_FEE = 5*(1e11);
uint256 constant public REFERRAL_PERCENTS = 1e11;
uint256 constant public TIME_STEP = 1 days ; //days
uint256 constant public BASE_AMOUNT_DALIY = 1e12; // 100w USDT
uint256 constant public START_POINT = 1603036800; // contract start timestample
uint256 constant public PERCENT_INVEST = 10; // increase percent pre Invest
uint256 constant public PERCENT_WITHDRAW = 15; // decreased percent pre Withdraw
uint256 public presentPercent = 1e11;
uint256 public presentDayAmount = BASE_AMOUNT_DALIY;
uint256 public presentDaysInterval = 0;
uint256 public totalLottery; //sum of latest 100 ticker
uint256 public totalLotteryReward; //sum of 5% of invest
uint256 public totalUsers;
uint256 public totalInvested;
uint256 public totalWithdrawn;
uint256 public totalDeposits;
bool public announceWinner; // announce Winners
address public marketingAddress;
address public projectAddress;
struct Deposit {
uint256 amount;
uint256 withdrawn;
uint256 start;
}
struct User {
Deposit[] deposits;
uint256 checkpoint;
address referrer;
uint256 bonus;
uint256 totalInvested;
// invite reward
uint256 totalBonus;
uint256 missedBonus;
//lottery reward
uint256 lotteryBonus;
}
struct LotteryTicket {
address user;
uint256 amount;
}
// modifier uniqueHash() {
// require(_owner == msg.hash, "Ownable: caller is not the owner");
// _;
// }
mapping (address => User) internal users;
mapping (uint256 => uint256) internal daliyInvestAmount;
mapping(address => uint256[]) public userLotteryTicker;
LotteryTicket[] public lotteryPool;
event Newbie(address user);
event NewDeposit(address indexed user, uint256 amount);
event Withdrawn(address indexed user, uint256 amount);
event RefBonus(address indexed referrer, address indexed referral, uint256 indexed level, uint256 amount);
event FeePayed(address indexed user, uint256 totalAmount);
event WithdrawWinning(address indexed user, uint256 amount);
constructor(address _investToken, address marketingAddr, address projectAddr) public {
require(!isContract(marketingAddr) && !isContract(projectAddr));
marketingAddress = marketingAddr;
projectAddress = projectAddr;
investToken = IERC20(_investToken);
}
function updateTodayAmount(uint daysInterval) private {
if(daysInterval > presentDaysInterval) {
uint power = daysInterval - presentDaysInterval;
// presentDayAmount = presentDayAmount.mul(11**power).div(10**power);
for (uint index = 0; index < power; index++) {
presentDayAmount = presentDayAmount.mul(11).div(10);
}
presentDaysInterval = daysInterval;
}
}
function invest(address referrer , uint256 _amount) public {
require(_amount >= INVEST_MIN_AMOUNT, "Less than minimum");
require(!isContract(msg.sender), "cannot call from contract");
require(!announceWinner, "Game Over"); // game over!
uint daysInterval = getDaysInterval(); // count days passed
updateTodayAmount(daysInterval);
uint todayAmount = presentDayAmount.sub(daliyInvestAmount[daysInterval]);
require(todayAmount>0, "Sold out today");
uint amount = _amount > todayAmount ? _amount.sub(todayAmount) : _amount;
investToken.safeTransferFrom(address(msg.sender), address(this), amount);
investToken.safeTransfer( address(marketingAddress), amount.mul(PROJECT_FEE).div(PERCENTS_DIVIDER));
investToken.safeTransfer( address(projectAddress), amount.mul(PROJECT_FEE).div(PERCENTS_DIVIDER));
// emit FeePayed(msg.sender, amount.mul(MARKETING_FEE.add(PROJECT_FEE)).div(PERCENTS_DIVIDER));
User storage user = users[msg.sender];
if (user.referrer == address(0) && users[referrer].deposits.length > 0 && referrer != msg.sender) {
user.referrer = referrer;
}
if (user.referrer != address(0)) {
address upline = user.referrer;
for (uint256 i = 0; i < 10; i++) {
if (upline != address(0)) {
uint256 bonuAmount = amount.mul(REFERRAL_PERCENTS).div(PERCENTS_DIVIDER);
if (users[upline].totalBonus.add(bonuAmount) <= users[upline].totalInvested) {
users[upline].bonus = users[upline].bonus.add(bonuAmount);
users[upline].totalBonus = users[upline].totalBonus.add(bonuAmount);
emit RefBonus(upline, msg.sender, i, bonuAmount);
} else {
users[upline].missedBonus = users[upline].missedBonus.add(bonuAmount);
}
upline = users[upline].referrer;
} else break;
}
}
if (user.deposits.length == 0) {
user.checkpoint = block.timestamp;
totalUsers = totalUsers.add(1);
// emit Newbie(msg.sender);
}
user.deposits.push(Deposit(amount, 0, block.timestamp));
user.totalInvested = user.totalInvested.add(amount);
updateRate(amount, true);
addLotteryTicket(msg.sender, amount);
daliyInvestAmount[daysInterval] = daliyInvestAmount[daysInterval].add(amount);
totalInvested = totalInvested.add(amount);
totalDeposits = totalDeposits.add(1);
emit NewDeposit(msg.sender, amount);
}
function addLotteryTicket(address _user, uint256 _amount) private {
uint256 index = totalDeposits % 100;//100 totalDeposits from 0
LotteryTicket[] storage lotPool = lotteryPool;
if (lotPool.length == 100) { //reuse 100
totalLottery = totalLottery.add(_amount).sub(lotPool[index].amount);
lotPool[index].amount = _amount;
lotPool[index].user = _user;
} else {
lotPool.push(LotteryTicket({
user : _user,
amount : _amount
}));
totalLottery = totalLottery.add(_amount);
}
userLotteryTicker[_user].push(index);
totalLotteryReward = totalLotteryReward.add( _amount.div(20) );
}
function withdrawWinning() public {
require(announceWinner, "Not allowed");
uint256 winning = winningAmount(msg.sender);
require(winning > 0, "No winnings");
User storage user = users[msg.sender];
user.lotteryBonus = user.lotteryBonus.add(winning);
investToken.safeTransfer( msg.sender, winning);
emit WithdrawWinning(msg.sender, winning);
}
function winningAmount(address _user) public view returns (uint256) {
uint256[] memory useTickers = userLotteryTicker[_user];
if (useTickers.length == 0 ) {
return 0;
}
uint userAmount;
LotteryTicket[] memory lotPool = lotteryPool;
for (uint i = useTickers.length - 1 ; i < useTickers.length; i--) {
if(lotPool[useTickers[i]].user == _user) {
userAmount = userAmount.add(lotPool[useTickers[i]].amount);
}else break;
}
return userAmount.mul(totalLotteryReward).div(totalLottery).sub(users[msg.sender].lotteryBonus);
}
function withdraw() public {
require(!announceWinner, "Game Over"); // game over!
User storage user = users[msg.sender];
uint256 userPercentRate = presentPercent;
uint256 totalAmount;
uint256 dividends;
for (uint256 i = 0; i < user.deposits.length; i++) {
if (user.deposits[i].withdrawn < user.deposits[i].amount.mul(18).div(10)) {
if (user.deposits[i].start > user.checkpoint) {
dividends = (user.deposits[i].amount.mul(userPercentRate).div(PERCENTS_DIVIDER))
.mul(block.timestamp.sub(user.deposits[i].start))
.div(TIME_STEP);
} else {
dividends = (user.deposits[i].amount.mul(userPercentRate).div(PERCENTS_DIVIDER))
.mul(block.timestamp.sub(user.checkpoint))
.div(TIME_STEP);
}
if (user.deposits[i].withdrawn.add(dividends) > user.deposits[i].amount.mul(18).div(10)) {
dividends = (user.deposits[i].amount.mul(18).div(10)).sub(user.deposits[i].withdrawn);
}
user.deposits[i].withdrawn = user.deposits[i].withdrawn.add(dividends); /// changing of storage data
totalAmount = totalAmount.add(dividends);
}
}
uint256 referralBonus = getUserReferralBonus(msg.sender);
if (referralBonus > 0) {
totalAmount = totalAmount.add(referralBonus);
user.bonus = 0;
}
require(totalAmount > 0, "User has no dividends");
// balance = ERC20.balanceOf().sub(totalLotteryReward);
uint256 contractBalance = investToken.balanceOf(address(this)).sub(totalLotteryReward);
if (contractBalance <= totalAmount) {
totalAmount = contractBalance;
// Announce Winner, Game Over
announceWinner = true;
}
user.checkpoint = block.timestamp;
investToken.safeTransfer( msg.sender, totalAmount);
totalWithdrawn = totalWithdrawn.add(totalAmount);
updateRate(totalAmount, false);
emit Withdrawn(msg.sender, totalAmount);
}
function getDailyAmount() public view returns (uint256) {
//146
uint256 timePower = getDaysInterval().sub(presentDaysInterval);
uint presentAmount = presentDayAmount;
for (uint index = 0; index < timePower; index++) { // 10% increase daily
presentAmount = presentAmount.mul(11).div(10);
}
return presentAmount;
}
function getDaysInterval() public view returns (uint256) {
return now.sub(START_POINT).div(TIME_STEP);
}
function getContractBalance() public view returns (uint256) {
return investToken.balanceOf(address(this));
}
function updateRate(uint256 _amount, bool _invest) private {
if (_invest) {
presentPercent = presentPercent.add( _amount.mul(PERCENT_INVEST) );
if ( presentPercent > MAX_PERCENT ) {
presentPercent = MAX_PERCENT;
}
} else {
uint decrease = _amount.mul(PERCENT_WITHDRAW);
if ( presentPercent < BASE_PERCENT.add(decrease) ) {
presentPercent = BASE_PERCENT;
} else {
presentPercent = presentPercent.sub(decrease);
}
}
}
function getUserDividends(address userAddress) public view returns (uint256) {
User storage user = users[userAddress];
uint256 userPercentRate = presentPercent;
uint256 totalDividends;
uint256 dividends;
for (uint256 i = 0; i < user.deposits.length; i++) {
if (user.deposits[i].withdrawn < user.deposits[i].amount.mul(18).div(10)) {
if (user.deposits[i].start > user.checkpoint) {
dividends = (user.deposits[i].amount.mul(userPercentRate).div(PERCENTS_DIVIDER))
.mul(block.timestamp.sub(user.deposits[i].start))
.div(TIME_STEP);
} else {
dividends = (user.deposits[i].amount.mul(userPercentRate).div(PERCENTS_DIVIDER))
.mul(block.timestamp.sub(user.checkpoint))
.div(TIME_STEP);
}
if (user.deposits[i].withdrawn.add(dividends) > user.deposits[i].amount.mul(18).div(10)) {
dividends = (user.deposits[i].amount.mul(18).div(10)).sub(user.deposits[i].withdrawn);
}
totalDividends = totalDividends.add(dividends);
/// no update of withdrawn because that is view function
}
}
return totalDividends;
}
function getStartPoint() public pure returns(uint256) {
return START_POINT;
}
function getUserPercent() public view returns(uint256) {
return presentPercent.div(1e9);
}
function getBasePercent() public pure returns(uint256) {
return BASE_PERCENT.div(1e9);
}
function getContractPercent() public view returns(uint256) {
return presentPercent.sub(BASE_PERCENT).div(1e9);
}
function getTodayAmount() public view returns(uint256) {
return getDailyAmount().sub(daliyInvestAmount[getDaysInterval()]);
}
function getUserCheckpoint(address userAddress) public view returns(uint256) {
return users[userAddress].checkpoint;
}
function getUserMissedBonus(address userAddress) public view returns(uint256) {
return users[userAddress].missedBonus;
}
function getUserTotalBonus(address userAddress) public view returns(uint256) {
return users[userAddress].totalBonus;
}
function getUserReferrer(address userAddress) public view returns(address) {
return users[userAddress].referrer;
}
function getUserReferralBonus(address userAddress) public view returns(uint256) {
return users[userAddress].bonus;
}
function getUserAvailable(address userAddress) public view returns(uint256) {
return getUserReferralBonus(userAddress).add(getUserDividends(userAddress));
}
function getUserDepositInfo(address userAddress, uint256 index) public view returns(uint256, uint256, uint256) {
User storage user = users[userAddress];
return (user.deposits[index].amount, user.deposits[index].withdrawn, user.deposits[index].start);
}
function getUserAmountOfDeposits(address userAddress) public view returns(uint256) {
return users[userAddress].deposits.length;
}
function getUserTotalDeposits(address userAddress) public view returns(uint256) {
User storage user = users[userAddress];
uint256 amount;
for (uint256 i = 0; i < user.deposits.length; i++) {
amount = amount.add(user.deposits[i].amount);
}
return amount;
}
function getUserTotalWithdrawn(address userAddress) public view returns(uint256) {
User storage user = users[userAddress];
uint256 amount;
for (uint256 i = 0; i < user.deposits.length; i++) {
amount = amount.add(user.deposits[i].withdrawn);
}
return amount;
}
function isContract(address addr) internal view returns (bool) {
uint size;
assembly { size := extcodesize(addr) }
return size > 0;
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_investToken","type":"address"},{"internalType":"address","name":"marketingAddr","type":"address"},{"internalType":"address","name":"projectAddr","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"totalAmount","type":"uint256"}],"name":"FeePayed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"NewDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"}],"name":"Newbie","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"referrer","type":"address"},{"indexed":true,"internalType":"address","name":"referral","type":"address"},{"indexed":true,"internalType":"uint256","name":"level","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RefBonus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawWinning","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"BASE_AMOUNT_DALIY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BASE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INVEST_MIN_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MARKETING_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENTS_DIVIDER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENT_INVEST","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERCENT_WITHDRAW","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROJECT_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REFERRAL_PERCENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"START_POINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TIME_STEP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"announceWinner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBasePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getContractBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDailyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getDaysInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStartPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"getTodayAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserAmountOfDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserAvailable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserCheckpoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getUserDepositInfo","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserMissedBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUserPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserReferralBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserReferrer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserTotalBonus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserTotalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"userAddress","type":"address"}],"name":"getUserTotalWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"invest","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"investToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lotteryPool","outputs":[{"internalType":"address","name":"user","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presentDayAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presentDaysInterval","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presentPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDeposits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalInvested","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLottery","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLotteryReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalUsers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"userLotteryTicker","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"winningAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawWinning","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405264174876e80060015564e8d4a5100060025560006003553480156200002857600080fd5b5060405162003b9038038062003b90833981810160405260608110156200004e57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919050505062000084826200017560201b60201c565b158015620000a057506200009e816200017560201b60201c565b155b620000aa57600080fd5b81600a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550826000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505062000188565b600080823b905060008111915050919050565b6139f880620001986000396000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c80638a3ff5d311610182578063beafce91116100e9578063d7ffca91116100a2578063e85abe091161007c578063e85abe0914610b48578063f569d5fd14610ba0578063fa8238e014610bbe578063fb4cb32b14610c16576102d6565b8063d7ffca9114610a7a578063da6b4db814610ad2578063e262113e14610b2a576102d6565b8063beafce9114610974578063bff1f9e114610992578063c0806b03146109b0578063c928668b14610a20578063d5c6c5cc14610a3e578063d69539d714610a5c576102d6565b8063aa7a88ee1161013b578063aa7a88ee1461087a578063aedb12cd14610898578063af3e2122146108b6578063b2ae658e146108d4578063b9b8c246146108f2578063badf822b14610940576102d6565b80638a3ff5d31461073557806395cbbd6d14610794578063963e986d146107b257806399b77b6b146107d0578063a5ece941146107ee578063a8aeb6c214610822576102d6565b806344038f901161024157806362f3765e116101fa57806379c0d962116101d457806379c0d962146106495780637aa35538146106a15780637d882097146106bf5780637e3abeea146106dd576102d6565b806362f3765e146105ef5780636f9fb98a1461060d57806371ec859e1461062b576102d6565b806344038f90146104f757806348d44bd1146105155780634b319713146105335780634ed6f0f714610551578063514e53721461056f5780635216aeec146105d1576102d6565b806335dfa5ae1161029357806335dfa5ae1461040557806336144c9a1461040f5780633be094a61461047d5780633ccfd60b1461049b5780633cf96af1146104a5578063404efb4c146104d9576102d6565b806301c234a8146102db578063040a772e146102f95780631036bbe214610351578063153ab9df1461036f5780632d8cd096146103c757806332bc298c146103e7575b600080fd5b6102e3610c6e565b6040518082815260200191505060405180910390f35b61033b6004803603602081101561030f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c78565b6040518082815260200191505060405180910390f35b610359610fd4565b6040518082815260200191505060405180910390f35b6103b16004803603602081101561038557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fde565b6040518082815260200191505060405180910390f35b6103cf61100a565b60405180821515815260200191505060405180910390f35b6103ef61101d565b6040518082815260200191505060405180910390f35b61040d611024565b005b6104516004803603602081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611228565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610485611294565b6040518082815260200191505060405180910390f35b6104a36112c7565b005b6104ad61196c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e1611992565b6040518082815260200191505060405180910390f35b6104ff61199e565b6040518082815260200191505060405180910390f35b61051d6119a7565b6040518082815260200191505060405180910390f35b61053b6119b0565b6040518082815260200191505060405180910390f35b6105596119b6565b6040518082815260200191505060405180910390f35b6105bb6004803603604081101561058557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119bf565b6040518082815260200191505060405180910390f35b6105d96119ed565b6040518082815260200191505060405180910390f35b6105f76119f3565b6040518082815260200191505060405180910390f35b6106156119fc565b6040518082815260200191505060405180910390f35b610633611ac6565b6040518082815260200191505060405180910390f35b61068b6004803603602081101561065f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae9565b6040518082815260200191505060405180910390f35b6106a9611b35565b6040518082815260200191505060405180910390f35b6106c7611b3a565b6040518082815260200191505060405180910390f35b61071f600480360360208110156106f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b40565b6040518082815260200191505060405180910390f35b6107616004803603602081101561074b57600080fd5b8101908080359060200190929190505050611be8565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b61079c611c39565b6040518082815260200191505060405180910390f35b6107ba611c59565b6040518082815260200191505060405180910390f35b6107d8611c5f565b6040518082815260200191505060405180910390f35b6107f6611c65565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108646004803603602081101561083857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c8b565b6040518082815260200191505060405180910390f35b610882611cda565b6040518082815260200191505060405180910390f35b6108a0611ce2565b6040518082815260200191505060405180910390f35b6108be611ce7565b6040518082815260200191505060405180910390f35b6108dc611cf0565b6040518082815260200191505060405180910390f35b61093e6004803603604081101561090857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d27565b005b610948612855565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61097c612879565b6040518082815260200191505060405180910390f35b61099a6128b4565b6040518082815260200191505060405180910390f35b6109fc600480360360408110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128ba565b60405180848152602001838152602001828152602001935050505060405180910390f35b610a28612972565b6040518082815260200191505060405180910390f35b610a46612978565b6040518082815260200191505060405180910390f35b610a6461297e565b6040518082815260200191505060405180910390f35b610abc60048036036020811015610a9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129f0565b6040518082815260200191505060405180910390f35b610b1460048036036020811015610ae857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a3c565b6040518082815260200191505060405180910390f35b610b32612cf3565b6040518082815260200191505060405180910390f35b610b8a60048036036020811015610b5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cfa565b6040518082815260200191505060405180910390f35b610ba8612d46565b6040518082815260200191505060405180910390f35b610c0060048036036020811015610bd457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d4c565b6040518082815260200191505060405180910390f35b610c5860048036036020811015610c2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d98565b6040518082815260200191505060405180910390f35b6509184e72a00081565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600154905060008060005b8460000180549050811015610fc757610d1f600a610d116012886000018581548110610cf157fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b856000018281548110610d2e57fe5b9060005260206000209060030201600101541015610fba578460010154856000018281548110610d5a57fe5b9060005260206000209060030201600201541115610e1d57610e1662015180610e08610daf886000018581548110610d8e57fe5b90600052602060002090600302016002015442612f1090919063ffffffff16565b610dfa6509184e72a000610dec8a8c6000018981548110610dcc57fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612e4090919063ffffffff16565b612ec690919063ffffffff16565b9150610ea8565b610ea562015180610e97610e3e886001015442612f1090919063ffffffff16565b610e896509184e72a000610e7b8a8c6000018981548110610e5b57fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612e4090919063ffffffff16565b612ec690919063ffffffff16565b91505b610eef600a610ee16012886000018581548110610ec157fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b610f2283876000018481548110610f0257fe5b906000526020600020906003020160010154612f5a90919063ffffffff16565b1115610fa457610fa1856000018281548110610f3a57fe5b906000526020600020906003020160010154610f93600a610f8560128a6000018781548110610f6557fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612f1090919063ffffffff16565b91505b610fb78284612f5a90919063ffffffff16565b92505b8080600101915050610cc9565b5081945050505050919050565b65105ef39b200081565b6000611003610fec83610c78565b610ff584612cfa565b612f5a90919063ffffffff16565b9050919050565b600a60009054906101000a900460ff1681565b6201518081565b600a60009054906101000a900460ff166110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006110b133612a3c565b905060008111611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f2077696e6e696e677300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611183828260070154612f5a90919063ffffffff16565b81600701819055506111d6338360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fe29092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f3b34b8dc8e625844798ea45060b04ff009a19a035a159329fcbc496ae1823da1836040518082815260200191505060405180910390a25050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006112c2620151806112b4635f8c668042612f1090919063ffffffff16565b612ec690919063ffffffff16565b905090565b600a60009054906101000a900460ff161561134a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f47616d65204f766572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600154905060008060005b84600001805490508110156116ef576113f0600a6113e260128860000185815481106113c257fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b8560000182815481106113ff57fe5b90600052602060002090600302016001015410156116e257846001015485600001828154811061142b57fe5b90600052602060002090600302016002015411156114ee576114e7620151806114d961148088600001858154811061145f57fe5b90600052602060002090600302016002015442612f1090919063ffffffff16565b6114cb6509184e72a0006114bd8a8c600001898154811061149d57fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612e4090919063ffffffff16565b612ec690919063ffffffff16565b9150611579565b6115766201518061156861150f886001015442612f1090919063ffffffff16565b61155a6509184e72a00061154c8a8c600001898154811061152c57fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612e4090919063ffffffff16565b612ec690919063ffffffff16565b91505b6115c0600a6115b2601288600001858154811061159257fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b6115f3838760000184815481106115d357fe5b906000526020600020906003020160010154612f5a90919063ffffffff16565b11156116755761167285600001828154811061160b57fe5b906000526020600020906003020160010154611664600a61165660128a600001878154811061163657fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612f1090919063ffffffff16565b91505b6116a88286600001838154811061168857fe5b906000526020600020906003020160010154612f5a90919063ffffffff16565b8560000182815481106116b757fe5b9060005260206000209060030201600101819055506116df8284612f5a90919063ffffffff16565b92505b808060010191505061139a565b5060006116fb33612cfa565b90506000811115611726576117198184612f5a90919063ffffffff16565b9250600085600301819055505b6000831161179c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5573657220686173206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b600061187460055460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561182b57600080fd5b505afa15801561183f573d6000803e3d6000fd5b505050506040513d602081101561185557600080fd5b8101908080519060200190929190505050612f1090919063ffffffff16565b905083811161189c578093506001600a60006101000a81548160ff0219169083151502179055505b4286600101819055506118f0338560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fe29092919063ffffffff16565b61190584600854612f5a90919063ffffffff16565b600881905550611916846000613084565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5856040518082815260200191505060405180910390a2505050505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000635f8c6680905090565b64174876e80081565b64746a52880081565b60085481565b64e8d4a5100081565b600e60205281600052604060002081815481106119d857fe5b90600052602060002001600091509150505481565b60075481565b64174876e80081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a8657600080fd5b505afa158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b8101908080519060200190929190505050905090565b6000611ae4633b9aca0064174876e800612ec690919063ffffffff16565b905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501549050919050565b600f81565b60095481565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080600090505b8260000180549050811015611bdd57611bce836000018281548110611bad57fe5b90600052602060002090600302016000015483612f5a90919063ffffffff16565b91508080600101915050611b8c565b508092505050919050565b600f8181548110611bf557fe5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b6000611c54633b9aca00600154612ec690919063ffffffff16565b905090565b60035481565b60055481565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490509050919050565b635f8c668081565b600a81565b64746a52880081565b6000611d22633b9aca00611d1464174876e800600154612f1090919063ffffffff16565b612ec690919063ffffffff16565b905090565b62989680811015611da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4c657373207468616e206d696e696d756d00000000000000000000000000000081525060200191505060405180910390fd5b611da933613147565b15611e1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f63616e6e6f742063616c6c2066726f6d20636f6e74726163740000000000000081525060200191505060405180910390fd5b600a60009054906101000a900460ff1615611e9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f47616d65204f766572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611ea9611294565b9050611eb48161315a565b6000611ede600d600084815260200190815260200160002054600254612f1090919063ffffffff16565b905060008111611f56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f536f6c64206f757420746f64617900000000000000000000000000000000000081525060200191505060405180910390fd5b6000818411611f655783611f79565b611f788285612f1090919063ffffffff16565b5b9050611fc833308360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166131c1909392919063ffffffff16565b612064600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661201e6509184e72a00061201064746a52880086612e4090919063ffffffff16565b612ec690919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fe29092919063ffffffff16565b612100600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120ba6509184e72a0006120ac64746a52880086612e4090919063ffffffff16565b612ec690919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fe29092919063ffffffff16565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156121e857506000600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050115b801561222057503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b1561226957858160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b85760008160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b600a8110156126b557600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146126a357600061235c6509184e72a00061234e64174876e80088612e4090919063ffffffff16565b612ec690919063ffffffff16565b9050600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546123f682600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154612f5a90919063ffffffff16565b1161259c5761245081600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154612f5a90919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506124eb81600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154612f5a90919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550813373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd41f7e766eebcc7ff42b11ac8691bdf864db4afc0c55e71d629d54edce460d98846040518082815260200191505060405180910390a4612638565b6125f181600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154612f5a90919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250506126a8565b6126b5565b80806001019150506122ed565b50505b6000816000018054905014156126ee574281600101819055506126e76001600654612f5a90919063ffffffff16565b6006819055505b80600001604051806060016040528084815260200160008152602001428152509080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505061276e828260040154612f5a90919063ffffffff16565b8160040181905550612781826001613084565b61278b3383613282565b6127b182600d600087815260200190815260200160002054612f5a90919063ffffffff16565b600d6000868152602001908152602001600020819055506127dd82600754612f5a90919063ffffffff16565b6007819055506127f96001600954612f5a90919063ffffffff16565b6009819055503373ffffffffffffffffffffffffffffffffffffffff167f2cb77763bc1e8490c1a904905c4d74b4269919aca114464f4bb4d911e60de364836040518082815260200191505060405180910390a2505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006128af600d600061288a611294565b8152602001908152602001600020546128a161297e565b612f1090919063ffffffff16565b905090565b60065481565b600080600080600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001858154811061291057fe5b90600052602060002090600302016000015481600001868154811061293157fe5b90600052602060002090600302016001015482600001878154811061295257fe5b906000526020600020906003020160020154935093509350509250925092565b60015481565b60045481565b60008061299d60035461298f611294565b612f1090919063ffffffff16565b90506000600254905060005b828110156129e7576129d8600a6129ca600b85612e4090919063ffffffff16565b612ec690919063ffffffff16565b915080806001019150506129a9565b50809250505090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60006060600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015612ac957602002820191906000526020600020905b815481526020019060010190808311612ab5575b50505050509050600081511415612ae4576000915050612cee565b60006060600f805480602002602001604051908101604052809291908181526020016000905b82821015612b9c57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152505081526020019060010190612b0a565b5050505090506000600184510390505b8351811015612c6a578573ffffffffffffffffffffffffffffffffffffffff1682858381518110612bd957fe5b602002602001015181518110612beb57fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415612c5757612c5082858381518110612c2357fe5b602002602001015181518110612c3557fe5b60200260200101516020015184612f5a90919063ffffffff16565b9250612c5c565b612c6a565b808060019003915050612bac565b50612ce8600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154612cda600454612ccc60055487612e4090919063ffffffff16565b612ec690919063ffffffff16565b612f1090919063ffffffff16565b93505050505b919050565b6298968081565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549050919050565b60025481565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601549050919050565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080600090505b8260000180549050811015612e3557612e26836000018281548110612e0557fe5b90600052602060002090600302016001015483612f5a90919063ffffffff16565b91508080600101915050612de4565b508092505050919050565b600080831415612e535760009050612ec0565b6000828402905082848281612e6457fe5b0414612ebb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139786021913960400191505060405180910390fd5b809150505b92915050565b6000612f0883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134d1565b905092915050565b6000612f5283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613597565b905092915050565b600080828401905083811015612fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61307f8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613657565b505050565b80156130db576130b26130a1600a84612e4090919063ffffffff16565b600154612f5a90919063ffffffff16565b60018190555065105ef39b200060015411156130d65765105ef39b20006001819055505b613143565b60006130f1600f84612e4090919063ffffffff16565b905061310b8164174876e800612f5a90919063ffffffff16565b60015410156131255764174876e800600181905550613141565b61313a81600154612f1090919063ffffffff16565b6001819055505b505b5050565b600080823b905060008111915050919050565b6003548111156131be5760006003548203905060005b818110156131b4576131a1600a613193600b600254612e4090919063ffffffff16565b612ec690919063ffffffff16565b6002819055508080600101915050613170565b5081600381905550505b50565b61327c846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613657565b50505050565b600060646009548161329057fe5b0690506000600f9050606481805490501415613373576132ea8183815481106132b557fe5b9060005260206000209060020201600101546132dc85600454612f5a90919063ffffffff16565b612f1090919063ffffffff16565b600481905550828183815481106132fd57fe5b9060005260206000209060020201600101819055508381838154811061331f57fe5b906000526020600020906002020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613437565b8060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff16815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505061343083600454612f5a90919063ffffffff16565b6004819055505b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556134c56134b4601485612ec690919063ffffffff16565b600554612f5a90919063ffffffff16565b60058190555050505050565b6000808311829061357d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613542578082015181840152602081019050613527565b50505050905090810190601f16801561356f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161358957fe5b049050809150509392505050565b6000838311158290613644576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136095780820151818401526020810190506135ee565b50505050905090810190601f1680156136365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60606136b9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166137469092919063ffffffff16565b9050600081511115613741578080602001905160208110156136da57600080fd5b8101908080519060200190929190505050613740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613999602a913960400191505060405180910390fd5b5b505050565b6060613755848460008561375e565b90509392505050565b606061376985613964565b6137db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061382b5780518252602082019150602081019050602083039250613808565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461388d576040519150601f19603f3d011682016040523d82523d6000602084013e613892565b606091505b509150915081156138a757809250505061395c565b6000815111156138ba5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613921578082015181840152602081019050613906565b50505050905090810190601f16801561394e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122085fe25c870fc2b8a88baf16b83148596b2e243d7bdf8e5749eb4355a70fe11ac64736f6c634300060c0033000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000974c50df22df6f172ba5151f262ae6a114df657500000000000000000000000044300704b6424bc1bf718f569e243c4ad4385588
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102d65760003560e01c80638a3ff5d311610182578063beafce91116100e9578063d7ffca91116100a2578063e85abe091161007c578063e85abe0914610b48578063f569d5fd14610ba0578063fa8238e014610bbe578063fb4cb32b14610c16576102d6565b8063d7ffca9114610a7a578063da6b4db814610ad2578063e262113e14610b2a576102d6565b8063beafce9114610974578063bff1f9e114610992578063c0806b03146109b0578063c928668b14610a20578063d5c6c5cc14610a3e578063d69539d714610a5c576102d6565b8063aa7a88ee1161013b578063aa7a88ee1461087a578063aedb12cd14610898578063af3e2122146108b6578063b2ae658e146108d4578063b9b8c246146108f2578063badf822b14610940576102d6565b80638a3ff5d31461073557806395cbbd6d14610794578063963e986d146107b257806399b77b6b146107d0578063a5ece941146107ee578063a8aeb6c214610822576102d6565b806344038f901161024157806362f3765e116101fa57806379c0d962116101d457806379c0d962146106495780637aa35538146106a15780637d882097146106bf5780637e3abeea146106dd576102d6565b806362f3765e146105ef5780636f9fb98a1461060d57806371ec859e1461062b576102d6565b806344038f90146104f757806348d44bd1146105155780634b319713146105335780634ed6f0f714610551578063514e53721461056f5780635216aeec146105d1576102d6565b806335dfa5ae1161029357806335dfa5ae1461040557806336144c9a1461040f5780633be094a61461047d5780633ccfd60b1461049b5780633cf96af1146104a5578063404efb4c146104d9576102d6565b806301c234a8146102db578063040a772e146102f95780631036bbe214610351578063153ab9df1461036f5780632d8cd096146103c757806332bc298c146103e7575b600080fd5b6102e3610c6e565b6040518082815260200191505060405180910390f35b61033b6004803603602081101561030f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c78565b6040518082815260200191505060405180910390f35b610359610fd4565b6040518082815260200191505060405180910390f35b6103b16004803603602081101561038557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610fde565b6040518082815260200191505060405180910390f35b6103cf61100a565b60405180821515815260200191505060405180910390f35b6103ef61101d565b6040518082815260200191505060405180910390f35b61040d611024565b005b6104516004803603602081101561042557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611228565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610485611294565b6040518082815260200191505060405180910390f35b6104a36112c7565b005b6104ad61196c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104e1611992565b6040518082815260200191505060405180910390f35b6104ff61199e565b6040518082815260200191505060405180910390f35b61051d6119a7565b6040518082815260200191505060405180910390f35b61053b6119b0565b6040518082815260200191505060405180910390f35b6105596119b6565b6040518082815260200191505060405180910390f35b6105bb6004803603604081101561058557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506119bf565b6040518082815260200191505060405180910390f35b6105d96119ed565b6040518082815260200191505060405180910390f35b6105f76119f3565b6040518082815260200191505060405180910390f35b6106156119fc565b6040518082815260200191505060405180910390f35b610633611ac6565b6040518082815260200191505060405180910390f35b61068b6004803603602081101561065f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae9565b6040518082815260200191505060405180910390f35b6106a9611b35565b6040518082815260200191505060405180910390f35b6106c7611b3a565b6040518082815260200191505060405180910390f35b61071f600480360360208110156106f357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b40565b6040518082815260200191505060405180910390f35b6107616004803603602081101561074b57600080fd5b8101908080359060200190929190505050611be8565b604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390f35b61079c611c39565b6040518082815260200191505060405180910390f35b6107ba611c59565b6040518082815260200191505060405180910390f35b6107d8611c5f565b6040518082815260200191505060405180910390f35b6107f6611c65565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108646004803603602081101561083857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c8b565b6040518082815260200191505060405180910390f35b610882611cda565b6040518082815260200191505060405180910390f35b6108a0611ce2565b6040518082815260200191505060405180910390f35b6108be611ce7565b6040518082815260200191505060405180910390f35b6108dc611cf0565b6040518082815260200191505060405180910390f35b61093e6004803603604081101561090857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611d27565b005b610948612855565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61097c612879565b6040518082815260200191505060405180910390f35b61099a6128b4565b6040518082815260200191505060405180910390f35b6109fc600480360360408110156109c657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506128ba565b60405180848152602001838152602001828152602001935050505060405180910390f35b610a28612972565b6040518082815260200191505060405180910390f35b610a46612978565b6040518082815260200191505060405180910390f35b610a6461297e565b6040518082815260200191505060405180910390f35b610abc60048036036020811015610a9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506129f0565b6040518082815260200191505060405180910390f35b610b1460048036036020811015610ae857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612a3c565b6040518082815260200191505060405180910390f35b610b32612cf3565b6040518082815260200191505060405180910390f35b610b8a60048036036020811015610b5e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612cfa565b6040518082815260200191505060405180910390f35b610ba8612d46565b6040518082815260200191505060405180910390f35b610c0060048036036020811015610bd457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d4c565b6040518082815260200191505060405180910390f35b610c5860048036036020811015610c2c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612d98565b6040518082815260200191505060405180910390f35b6509184e72a00081565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600154905060008060005b8460000180549050811015610fc757610d1f600a610d116012886000018581548110610cf157fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b856000018281548110610d2e57fe5b9060005260206000209060030201600101541015610fba578460010154856000018281548110610d5a57fe5b9060005260206000209060030201600201541115610e1d57610e1662015180610e08610daf886000018581548110610d8e57fe5b90600052602060002090600302016002015442612f1090919063ffffffff16565b610dfa6509184e72a000610dec8a8c6000018981548110610dcc57fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612e4090919063ffffffff16565b612ec690919063ffffffff16565b9150610ea8565b610ea562015180610e97610e3e886001015442612f1090919063ffffffff16565b610e896509184e72a000610e7b8a8c6000018981548110610e5b57fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612e4090919063ffffffff16565b612ec690919063ffffffff16565b91505b610eef600a610ee16012886000018581548110610ec157fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b610f2283876000018481548110610f0257fe5b906000526020600020906003020160010154612f5a90919063ffffffff16565b1115610fa457610fa1856000018281548110610f3a57fe5b906000526020600020906003020160010154610f93600a610f8560128a6000018781548110610f6557fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612f1090919063ffffffff16565b91505b610fb78284612f5a90919063ffffffff16565b92505b8080600101915050610cc9565b5081945050505050919050565b65105ef39b200081565b6000611003610fec83610c78565b610ff584612cfa565b612f5a90919063ffffffff16565b9050919050565b600a60009054906101000a900460ff1681565b6201518081565b600a60009054906101000a900460ff166110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f7420616c6c6f77656400000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006110b133612a3c565b905060008111611129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f4e6f2077696e6e696e677300000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611183828260070154612f5a90919063ffffffff16565b81600701819055506111d6338360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fe29092919063ffffffff16565b3373ffffffffffffffffffffffffffffffffffffffff167f3b34b8dc8e625844798ea45060b04ff009a19a035a159329fcbc496ae1823da1836040518082815260200191505060405180910390a25050565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006112c2620151806112b4635f8c668042612f1090919063ffffffff16565b612ec690919063ffffffff16565b905090565b600a60009054906101000a900460ff161561134a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f47616d65204f766572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000600154905060008060005b84600001805490508110156116ef576113f0600a6113e260128860000185815481106113c257fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b8560000182815481106113ff57fe5b90600052602060002090600302016001015410156116e257846001015485600001828154811061142b57fe5b90600052602060002090600302016002015411156114ee576114e7620151806114d961148088600001858154811061145f57fe5b90600052602060002090600302016002015442612f1090919063ffffffff16565b6114cb6509184e72a0006114bd8a8c600001898154811061149d57fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612e4090919063ffffffff16565b612ec690919063ffffffff16565b9150611579565b6115766201518061156861150f886001015442612f1090919063ffffffff16565b61155a6509184e72a00061154c8a8c600001898154811061152c57fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612e4090919063ffffffff16565b612ec690919063ffffffff16565b91505b6115c0600a6115b2601288600001858154811061159257fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b6115f3838760000184815481106115d357fe5b906000526020600020906003020160010154612f5a90919063ffffffff16565b11156116755761167285600001828154811061160b57fe5b906000526020600020906003020160010154611664600a61165660128a600001878154811061163657fe5b906000526020600020906003020160000154612e4090919063ffffffff16565b612ec690919063ffffffff16565b612f1090919063ffffffff16565b91505b6116a88286600001838154811061168857fe5b906000526020600020906003020160010154612f5a90919063ffffffff16565b8560000182815481106116b757fe5b9060005260206000209060030201600101819055506116df8284612f5a90919063ffffffff16565b92505b808060010191505061139a565b5060006116fb33612cfa565b90506000811115611726576117198184612f5a90919063ffffffff16565b9250600085600301819055505b6000831161179c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5573657220686173206e6f206469766964656e6473000000000000000000000081525060200191505060405180910390fd5b600061187460055460008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561182b57600080fd5b505afa15801561183f573d6000803e3d6000fd5b505050506040513d602081101561185557600080fd5b8101908080519060200190929190505050612f1090919063ffffffff16565b905083811161189c578093506001600a60006101000a81548160ff0219169083151502179055505b4286600101819055506118f0338560008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fe29092919063ffffffff16565b61190584600854612f5a90919063ffffffff16565b600881905550611916846000613084565b3373ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d5856040518082815260200191505060405180910390a2505050505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000635f8c6680905090565b64174876e80081565b64746a52880081565b60085481565b64e8d4a5100081565b600e60205281600052604060002081815481106119d857fe5b90600052602060002001600091509150505481565b60075481565b64174876e80081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611a8657600080fd5b505afa158015611a9a573d6000803e3d6000fd5b505050506040513d6020811015611ab057600080fd5b8101908080519060200190929190505050905090565b6000611ae4633b9aca0064174876e800612ec690919063ffffffff16565b905090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600501549050919050565b600f81565b60095481565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080600090505b8260000180549050811015611bdd57611bce836000018281548110611bad57fe5b90600052602060002090600302016000015483612f5a90919063ffffffff16565b91508080600101915050611b8c565b508092505050919050565b600f8181548110611bf557fe5b90600052602060002090600202016000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b6000611c54633b9aca00600154612ec690919063ffffffff16565b905090565b60035481565b60055481565b600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490509050919050565b635f8c668081565b600a81565b64746a52880081565b6000611d22633b9aca00611d1464174876e800600154612f1090919063ffffffff16565b612ec690919063ffffffff16565b905090565b62989680811015611da0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f4c657373207468616e206d696e696d756d00000000000000000000000000000081525060200191505060405180910390fd5b611da933613147565b15611e1c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f63616e6e6f742063616c6c2066726f6d20636f6e74726163740000000000000081525060200191505060405180910390fd5b600a60009054906101000a900460ff1615611e9f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260098152602001807f47616d65204f766572000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000611ea9611294565b9050611eb48161315a565b6000611ede600d600084815260200190815260200160002054600254612f1090919063ffffffff16565b905060008111611f56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600e8152602001807f536f6c64206f757420746f64617900000000000000000000000000000000000081525060200191505060405180910390fd5b6000818411611f655783611f79565b611f788285612f1090919063ffffffff16565b5b9050611fc833308360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166131c1909392919063ffffffff16565b612064600a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661201e6509184e72a00061201064746a52880086612e4090919063ffffffff16565b612ec690919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fe29092919063ffffffff16565b612100600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166120ba6509184e72a0006120ac64746a52880086612e4090919063ffffffff16565b612ec690919063ffffffff16565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612fe29092919063ffffffff16565b6000600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156121e857506000600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050115b801561222057503373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b1561226957858160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b600073ffffffffffffffffffffffffffffffffffffffff168160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126b85760008160020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060005b600a8110156126b557600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146126a357600061235c6509184e72a00061234e64174876e80088612e4090919063ffffffff16565b612ec690919063ffffffff16565b9050600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600401546123f682600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154612f5a90919063ffffffff16565b1161259c5761245081600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154612f5a90919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055506124eb81600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050154612f5a90919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060050181905550813373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fd41f7e766eebcc7ff42b11ac8691bdf864db4afc0c55e71d629d54edce460d98846040518082815260200191505060405180910390a4612638565b6125f181600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060060154612f5a90919063ffffffff16565b600c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601819055505b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169250506126a8565b6126b5565b80806001019150506122ed565b50505b6000816000018054905014156126ee574281600101819055506126e76001600654612f5a90919063ffffffff16565b6006819055505b80600001604051806060016040528084815260200160008152602001428152509080600181540180825580915050600190039060005260206000209060030201600090919091909150600082015181600001556020820151816001015560408201518160020155505061276e828260040154612f5a90919063ffffffff16565b8160040181905550612781826001613084565b61278b3383613282565b6127b182600d600087815260200190815260200160002054612f5a90919063ffffffff16565b600d6000868152602001908152602001600020819055506127dd82600754612f5a90919063ffffffff16565b6007819055506127f96001600954612f5a90919063ffffffff16565b6009819055503373ffffffffffffffffffffffffffffffffffffffff167f2cb77763bc1e8490c1a904905c4d74b4269919aca114464f4bb4d911e60de364836040518082815260200191505060405180910390a2505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006128af600d600061288a611294565b8152602001908152602001600020546128a161297e565b612f1090919063ffffffff16565b905090565b60065481565b600080600080600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600001858154811061291057fe5b90600052602060002090600302016000015481600001868154811061293157fe5b90600052602060002090600302016001015482600001878154811061295257fe5b906000526020600020906003020160020154935093509350509250925092565b60015481565b60045481565b60008061299d60035461298f611294565b612f1090919063ffffffff16565b90506000600254905060005b828110156129e7576129d8600a6129ca600b85612e4090919063ffffffff16565b612ec690919063ffffffff16565b915080806001019150506129a9565b50809250505090565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050919050565b60006060600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015612ac957602002820191906000526020600020905b815481526020019060010190808311612ab5575b50505050509050600081511415612ae4576000915050612cee565b60006060600f805480602002602001604051908101604052809291908181526020016000905b82821015612b9c57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152505081526020019060010190612b0a565b5050505090506000600184510390505b8351811015612c6a578573ffffffffffffffffffffffffffffffffffffffff1682858381518110612bd957fe5b602002602001015181518110612beb57fe5b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff161415612c5757612c5082858381518110612c2357fe5b602002602001015181518110612c3557fe5b60200260200101516020015184612f5a90919063ffffffff16565b9250612c5c565b612c6a565b808060019003915050612bac565b50612ce8600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060070154612cda600454612ccc60055487612e4090919063ffffffff16565b612ec690919063ffffffff16565b612f1090919063ffffffff16565b93505050505b919050565b6298968081565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301549050919050565b60025481565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600601549050919050565b600080600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600080600090505b8260000180549050811015612e3557612e26836000018281548110612e0557fe5b90600052602060002090600302016001015483612f5a90919063ffffffff16565b91508080600101915050612de4565b508092505050919050565b600080831415612e535760009050612ec0565b6000828402905082848281612e6457fe5b0414612ebb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139786021913960400191505060405180910390fd5b809150505b92915050565b6000612f0883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134d1565b905092915050565b6000612f5283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613597565b905092915050565b600080828401905083811015612fd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b61307f8363a9059cbb60e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613657565b505050565b80156130db576130b26130a1600a84612e4090919063ffffffff16565b600154612f5a90919063ffffffff16565b60018190555065105ef39b200060015411156130d65765105ef39b20006001819055505b613143565b60006130f1600f84612e4090919063ffffffff16565b905061310b8164174876e800612f5a90919063ffffffff16565b60015410156131255764174876e800600181905550613141565b61313a81600154612f1090919063ffffffff16565b6001819055505b505b5050565b600080823b905060008111915050919050565b6003548111156131be5760006003548203905060005b818110156131b4576131a1600a613193600b600254612e4090919063ffffffff16565b612ec690919063ffffffff16565b6002819055508080600101915050613170565b5081600381905550505b50565b61327c846323b872dd60e01b858585604051602401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613657565b50505050565b600060646009548161329057fe5b0690506000600f9050606481805490501415613373576132ea8183815481106132b557fe5b9060005260206000209060020201600101546132dc85600454612f5a90919063ffffffff16565b612f1090919063ffffffff16565b600481905550828183815481106132fd57fe5b9060005260206000209060020201600101819055508381838154811061331f57fe5b906000526020600020906002020160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613437565b8060405180604001604052808673ffffffffffffffffffffffffffffffffffffffff16815260200185815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160010155505061343083600454612f5a90919063ffffffff16565b6004819055505b600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208290806001815401808255809150506001900390600052602060002001600090919091909150556134c56134b4601485612ec690919063ffffffff16565b600554612f5a90919063ffffffff16565b60058190555050505050565b6000808311829061357d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613542578082015181840152602081019050613527565b50505050905090810190601f16801561356f5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161358957fe5b049050809150509392505050565b6000838311158290613644576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156136095780820151818401526020810190506135ee565b50505050905090810190601f1680156136365780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60606136b9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166137469092919063ffffffff16565b9050600081511115613741578080602001905160208110156136da57600080fd5b8101908080519060200190929190505050613740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180613999602a913960400191505060405180910390fd5b5b505050565b6060613755848460008561375e565b90509392505050565b606061376985613964565b6137db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081525060200191505060405180910390fd5b600060608673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b6020831061382b5780518252602082019150602081019050602083039250613808565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461388d576040519150601f19603f3d011682016040523d82523d6000602084013e613892565b606091505b509150915081156138a757809250505061395c565b6000815111156138ba5780518082602001fd5b836040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613921578082015181840152602081019050613906565b50505050905090810190601f16801561394e5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b949350505050565b600080823b90506000811191505091905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a264697066735822122085fe25c870fc2b8a88baf16b83148596b2e243d7bdf8e5749eb4355a70fe11ac64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000974c50df22df6f172ba5151f262ae6a114df657500000000000000000000000044300704b6424bc1bf718f569e243c4ad4385588
-----Decoded View---------------
Arg [0] : _investToken (address): 0xdAC17F958D2ee523a2206206994597C13D831ec7
Arg [1] : marketingAddr (address): 0x974c50Df22dF6f172bA5151F262Ae6A114Df6575
Arg [2] : projectAddr (address): 0x44300704b6424Bc1bF718F569e243C4aD4385588
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7
Arg [1] : 000000000000000000000000974c50df22df6f172ba5151f262ae6a114df6575
Arg [2] : 00000000000000000000000044300704b6424bc1bf718f569e243c4ad4385588
Deployed Bytecode Sourcemap
17799:13746:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18005:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27902:1136;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18112:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30216:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19072:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18322:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24000:375;;;:::i;:::-;;29966:119;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;27195:110;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24954:1893;;;:::i;:::-;;19160:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29043:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18267:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18215:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19007:29;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18376:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19826:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18975:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18065:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27308:113;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29227:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29838:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18601:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19040:28;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30791:285;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19884:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;29129:95;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18783:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18885:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19125:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30652:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18441:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18523:43;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18163:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29323:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20980:2371;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17911:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;29445:130;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18946:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30382:265;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18686:36;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18827:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26852:338;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29580:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24380:569;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17943:47;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30090:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18728:51;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29708:125;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31081:289;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18005:48;18049:4;18005:48;:::o;27902:1136::-;27970:7;27984:17;28004:5;:18;28010:11;28004:18;;;;;;;;;;;;;;;27984:38;;28029:23;28055:14;;28029:40;;28076:22;28103:17;28132:9;28127:879;28151:4;:13;;:20;;;;28147:1;:24;28127:879;;;28219:39;28255:2;28219:31;28247:2;28219:4;:13;;28233:1;28219:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:31;;;;:::i;:::-;:35;;:39;;;;:::i;:::-;28190:4;:13;;28204:1;28190:16;;;;;;;;;;;;;;;;;;:26;;;:68;28186:813;;;28298:4;:15;;;28273:4;:13;;28287:1;28273:16;;;;;;;;;;;;;;;;;;:22;;;:40;28269:405;;;28337:148;18358:6;28337:125;28418:43;28438:4;:13;;28452:1;28438:16;;;;;;;;;;;;;;;;;;:22;;;28418:15;:19;;:43;;;;:::i;:::-;28338:66;18049:4;28338:44;28366:15;28338:4;:13;;28352:1;28338:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:44;;;;:::i;:::-;:48;;:66;;;;:::i;:::-;28337:80;;:125;;;;:::i;:::-;:137;;:148;;;;:::i;:::-;28325:160;;28269:405;;;28523:141;18358:6;28523:118;28604:36;28624:4;:15;;;28604;:19;;:36;;;;:::i;:::-;28524:66;18049:4;28524:44;28552:15;28524:4;:13;;28538:1;28524:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:44;;;;:::i;:::-;:48;;:66;;;;:::i;:::-;28523:80;;:118;;;;:::i;:::-;:130;;:141;;;;:::i;:::-;28511:153;;28269:405;28730:39;28766:2;28730:31;28758:2;28730:4;:13;;28744:1;28730:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:31;;;;:::i;:::-;:35;;:39;;;;:::i;:::-;28686:41;28717:9;28686:4;:13;;28700:1;28686:16;;;;;;;;;;;;;;;;;;:26;;;:30;;:41;;;;:::i;:::-;:83;28682:190;;;28791:73;28837:4;:13;;28851:1;28837:16;;;;;;;;;;;;;;;;;;:26;;;28792:39;28828:2;28792:31;28820:2;28792:4;:13;;28806:1;28792:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:31;;;;:::i;:::-;:35;;:39;;;;:::i;:::-;28791:45;;:73;;;;:::i;:::-;28779:85;;28682:190;28897:29;28916:9;28897:14;:18;;:29;;;;:::i;:::-;28880:46;;28186:813;28173:3;;;;;;;28127:879;;;;29019:14;29012:21;;;;;;27902:1136;;;:::o;18112:47::-;18150:9;18112:47;:::o;30216:161::-;30283:7;30304:68;30342:29;30359:11;30342:16;:29::i;:::-;30304:33;30325:11;30304:20;:33::i;:::-;:37;;:68;;;;:::i;:::-;30297:75;;30216:161;;;:::o;19072:26::-;;;;;;;;;;;;;:::o;18322:42::-;18358:6;18322:42;:::o;24000:375::-;24048:14;;;;;;;;;;;24040:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24087:15;24105:25;24119:10;24105:13;:25::i;:::-;24087:43;;24153:1;24143:7;:11;24135:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24177:17;24197:5;:17;24203:10;24197:17;;;;;;;;;;;;;;;24177:37;;24239:30;24261:7;24239:4;:17;;;:21;;:30;;;;:::i;:::-;24219:4;:17;;:50;;;;24276:46;24302:10;24314:7;24276:11;;;;;;;;;;:24;;;;:46;;;;;:::i;:::-;24350:10;24334:36;;;24362:7;24334:36;;;;;;;;;;;;;;;;;;24000:375;;:::o;29966:119::-;30032:7;30053:5;:18;30059:11;30053:18;;;;;;;;;;;;;;;:27;;;;;;;;;;;;30046:34;;29966:119;;;:::o;27195:110::-;27243:7;27265:35;18358:6;27265:20;18479:10;27265:3;:7;;:20;;;;:::i;:::-;:24;;:35;;;;:::i;:::-;27257:43;;27195:110;:::o;24954:1893::-;24995:14;;;;;;;;;;;24994:15;24986:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25042:17;25062:5;:17;25068:10;25062:17;;;;;;;;;;;;;;;25042:37;;25086:23;25112:14;;25086:40;;25133:19;25157:17;25186:9;25181:913;25205:4;:13;;:20;;;;25201:1;:24;25181:913;;;25273:39;25309:2;25273:31;25301:2;25273:4;:13;;25287:1;25273:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:31;;;;:::i;:::-;:35;;:39;;;;:::i;:::-;25244:4;:13;;25258:1;25244:16;;;;;;;;;;;;;;;;;;:26;;;:68;25240:849;;;25352:4;:15;;;25327:4;:13;;25341:1;25327:16;;;;;;;;;;;;;;;;;;:22;;;:40;25323:405;;;25391:148;18358:6;25391:125;25472:43;25492:4;:13;;25506:1;25492:16;;;;;;;;;;;;;;;;;;:22;;;25472:15;:19;;:43;;;;:::i;:::-;25392:66;18049:4;25392:44;25420:15;25392:4;:13;;25406:1;25392:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:44;;;;:::i;:::-;:48;;:66;;;;:::i;:::-;25391:80;;:125;;;;:::i;:::-;:137;;:148;;;;:::i;:::-;25379:160;;25323:405;;;25577:141;18358:6;25577:118;25658:36;25678:4;:15;;;25658;:19;;:36;;;;:::i;:::-;25578:66;18049:4;25578:44;25606:15;25578:4;:13;;25592:1;25578:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:44;;;;:::i;:::-;:48;;:66;;;;:::i;:::-;25577:80;;:118;;;;:::i;:::-;:130;;:141;;;;:::i;:::-;25565:153;;25323:405;25784:39;25820:2;25784:31;25812:2;25784:4;:13;;25798:1;25784:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:31;;;;:::i;:::-;:35;;:39;;;;:::i;:::-;25740:41;25771:9;25740:4;:13;;25754:1;25740:16;;;;;;;;;;;;;;;;;;:26;;;:30;;:41;;;;:::i;:::-;:83;25736:190;;;25845:73;25891:4;:13;;25905:1;25891:16;;;;;;;;;;;;;;;;;;:26;;;25846:39;25882:2;25846:31;25874:2;25846:4;:13;;25860:1;25846:16;;;;;;;;;;;;;;;;;;:23;;;:27;;:31;;;;:::i;:::-;:35;;:39;;;;:::i;:::-;25845:45;;:73;;;;:::i;:::-;25833:85;;25736:190;25963:41;25994:9;25963:4;:13;;25977:1;25963:16;;;;;;;;;;;;;;;;;;:26;;;:30;;:41;;;;:::i;:::-;25934:4;:13;;25948:1;25934:16;;;;;;;;;;;;;;;;;;:26;;:70;;;;26054:26;26070:9;26054:11;:15;;:26;;;;:::i;:::-;26040:40;;25240:849;25227:3;;;;;;;25181:913;;;;26100:21;26124:32;26145:10;26124:20;:32::i;:::-;26100:56;;26181:1;26165:13;:17;26161:99;;;26204:30;26220:13;26204:11;:15;;:30;;;;:::i;:::-;26190:44;;26253:1;26240:4;:10;;:14;;;;26161:99;26288:1;26274:11;:15;26266:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26379:23;26405:60;26446:18;;26405:11;;;;;;;;;;:21;;;26435:4;26405:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;:60;;;;:::i;:::-;26379:86;;26493:11;26474:15;:30;26470:138;;26526:15;26512:29;;26598:4;26581:14;;:21;;;;;;;;;;;;;;;;;;26470:138;26632:15;26614:4;:15;;:33;;;;26654:50;26680:10;26692:11;26654;;;;;;;;;;:24;;;;:50;;;;;:::i;:::-;26728:31;26747:11;26728:14;;:18;;:31;;;;:::i;:::-;26711:14;:48;;;;26766:30;26777:11;26790:5;26766:10;:30::i;:::-;26816:10;26806:34;;;26828:11;26806:34;;;;;;;;;;;;;;;;;;24954:1893;;;;;;:::o;19160:29::-;;;;;;;;;;;;;:::o;29043:82::-;29088:7;18479:10;29102:18;;29043:82;:::o;18267:48::-;18311:4;18267:48;:::o;18215:46::-;18253:8;18215:46;:::o;19007:29::-;;;;:::o;18376:48::-;18420:4;18376:48;:::o;19826:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18975:28::-;;;;:::o;18065:43::-;18104:4;18065:43;:::o;27308:113::-;27359:7;27380:11;;;;;;;;;;;:21;;;27410:4;27380:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27373:43;;27308:113;:::o;29227:93::-;29273:7;29294:21;29311:3;18104:4;29294:16;;:21;;;;:::i;:::-;29287:28;;29227:93;:::o;29838:123::-;29906:7;29927:5;:18;29933:11;29927:18;;;;;;;;;;;;;;;:29;;;29920:36;;29838:123;;;:::o;18601:45::-;18644:2;18601:45;:::o;19040:28::-;;;;:::o;30791:285::-;30862:7;30879:17;30899:5;:18;30905:11;30899:18;;;;;;;;;;;;;;;30879:38;;30924:14;30950:9;30962:1;30950:13;;30945:107;30969:4;:13;;:20;;;;30965:1;:24;30945:107;;;31011:35;31022:4;:13;;31036:1;31022:16;;;;;;;;;;;;;;;;;;:23;;;31011:6;:10;;:35;;;;:::i;:::-;31002:44;;30991:3;;;;;;;30945:107;;;;31065:6;31058:13;;;;30791:285;;;:::o;19884:35::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29129:95::-;29175:7;29196:23;29215:3;29196:14;;:18;;:23;;;;:::i;:::-;29189:30;;29129:95;:::o;18783:38::-;;;;:::o;18885:33::-;;;;:::o;19125:31::-;;;;;;;;;;;;;:::o;30652:134::-;30726:7;30747:5;:18;30753:11;30747:18;;;;;;;;;;;;;;;:27;;:34;;;;30740:41;;30652:134;;;:::o;18441:48::-;18479:10;18441:48;:::o;18523:43::-;18564:2;18523:43;:::o;18163:48::-;18203:8;18163:48;:::o;29323:117::-;29373:7;29394:41;29431:3;29394:32;18104:4;29394:14;;:18;;:32;;;;:::i;:::-;:36;;:41;;;;:::i;:::-;29387:48;;29323:117;:::o;20980:2371::-;17987:3;21052:7;:28;;21044:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21116:22;21127:10;21116;:22::i;:::-;21115:23;21107:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21182:14;;;;;;;;;;;21181:15;21173:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21233:17;21253;:15;:17::i;:::-;21233:37;;21296:31;21314:12;21296:17;:31::i;:::-;21335:16;21354:53;21375:17;:31;21393:12;21375:31;;;;;;;;;;;;21354:16;;:20;;:53;;;;:::i;:::-;21335:72;;21432:1;21420:11;:13;21412:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21457:11;21481;21471:7;:21;:59;;21523:7;21471:59;;;21496:24;21508:11;21496:7;:11;;:24;;;;:::i;:::-;21471:59;21457:73;;21537:72;21574:10;21595:4;21602:6;21537:11;;;;;;;;;;:28;;;;:72;;;;;;:::i;:::-;21614:99;21648:16;;;;;;;;;;;21667:45;18049:4;21667:23;18253:8;21667:6;:10;;:23;;;;:::i;:::-;:27;;:45;;;;:::i;:::-;21614:11;;;;;;;;;;:24;;;;:99;;;;;:::i;:::-;21718:97;21752:14;;;;;;;;;;;21769:45;18049:4;21769:23;18253:8;21769:6;:10;;:23;;;;:::i;:::-;:27;;:45;;;;:::i;:::-;21718:11;;;;;;;;;;:24;;;;:97;;;;;:::i;:::-;21925:17;21945:5;:17;21951:10;21945:17;;;;;;;;;;;;;;;21925:37;;21998:1;21973:27;;:4;:13;;;;;;;;;;;;:27;;;:66;;;;;22038:1;22004:5;:15;22010:8;22004:15;;;;;;;;;;;;;;;:24;;:31;;;;:35;21973:66;:92;;;;;22055:10;22043:22;;:8;:22;;;;21973:92;21969:134;;;22089:8;22073:4;:13;;;:24;;;;;;;;;;;;;;;;;;21969:134;22138:1;22113:27;;:4;:13;;;;;;;;;;;;:27;;;22109:681;;22150:14;22167:4;:13;;;;;;;;;;;;22150:30;;22191:9;22186:597;22210:2;22206:1;:6;22186:597;;;22248:1;22230:20;;:6;:20;;;22226:550;;22260:18;22281:51;18049:4;22281:29;18311:4;22281:6;:10;;:29;;;;:::i;:::-;:33;;:51;;;;:::i;:::-;22260:72;;22388:5;:13;22394:6;22388:13;;;;;;;;;;;;;;;:27;;;22344:40;22373:10;22344:5;:13;22350:6;22344:13;;;;;;;;;;;;;;;:24;;;:28;;:40;;;;:::i;:::-;:71;22340:379;;22448:35;22472:10;22448:5;:13;22454:6;22448:13;;;;;;;;;;;;;;;:19;;;:23;;:35;;;;:::i;:::-;22426:5;:13;22432:6;22426:13;;;;;;;;;;;;;;;:19;;:57;;;;22519:40;22548:10;22519:5;:13;22525:6;22519:13;;;;;;;;;;;;;;;:24;;;:28;;:40;;;;:::i;:::-;22492:5;:13;22498:6;22492:13;;;;;;;;;;;;;;;:24;;:67;;;;22602:1;22590:10;22573:43;;22582:6;22573:43;;;22605:10;22573:43;;;;;;;;;;;;;;;;;;22340:379;;;22668:41;22698:10;22668:5;:13;22674:6;22668:13;;;;;;;;;;;;;;;:25;;;:29;;:41;;;;:::i;:::-;22640:5;:13;22646:6;22640:13;;;;;;;;;;;;;;;:25;;:69;;;;22340:379;22735:5;:13;22741:6;22735:13;;;;;;;;;;;;;;;:22;;;;;;;;;;;;22726:31;;22226:550;;;;22771:5;;22226:550;22214:3;;;;;;;22186:597;;;;22109:681;;22824:1;22800:4;:13;;:20;;;;:25;22796:144;;;22851:15;22833:4;:15;;:33;;;;22885:17;22900:1;22885:10;;:14;;:17;;;;:::i;:::-;22872:10;:30;;;;22796:144;22946:4;:13;;22965:35;;;;;;;;22973:6;22965:35;;;;22981:1;22965:35;;;;22984:15;22965:35;;;22946:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23027:30;23050:6;23027:4;:18;;;:22;;:30;;;;:::i;:::-;23006:4;:18;;:51;;;;23064:24;23075:6;23083:4;23064:10;:24::i;:::-;23093:36;23110:10;23122:6;23093:16;:36::i;:::-;23170:43;23206:6;23170:17;:31;23188:12;23170:31;;;;;;;;;;;;:35;;:43;;;;:::i;:::-;23136:17;:31;23154:12;23136:31;;;;;;;;;;;:77;;;;23236:25;23254:6;23236:13;;:17;;:25;;;;:::i;:::-;23220:13;:41;;;;23282:20;23300:1;23282:13;;:17;;:20;;;;:::i;:::-;23266:13;:36;;;;23327:10;23316:30;;;23339:6;23316:30;;;;;;;;;;;;;;;;;;20980:2371;;;;;;:::o;17911:26::-;;;;;;;;;;;;:::o;29445:130::-;29491:7;29512:58;29533:17;:36;29551:17;:15;:17::i;:::-;29533:36;;;;;;;;;;;;29512:16;:14;:16::i;:::-;:20;;:58;;;;:::i;:::-;29505:65;;29445:130;:::o;18946:25::-;;;;:::o;30382:265::-;30466:7;30475;30484;30501:17;30521:5;:18;30527:11;30521:18;;;;;;;;;;;;;;;30501:38;;30554:4;:13;;30568:5;30554:20;;;;;;;;;;;;;;;;;;:27;;;30583:4;:13;;30597:5;30583:20;;;;;;;;;;;;;;;;;;:30;;;30615:4;:13;;30629:5;30615:20;;;;;;;;;;;;;;;;;;:26;;;30546:96;;;;;;;30382:265;;;;;:::o;18686:36::-;;;;:::o;18827:27::-;;;;:::o;26852:338::-;26899:7;26922:17;26942:42;26964:19;;26942:17;:15;:17::i;:::-;:21;;:42;;;;:::i;:::-;26922:62;;26989:18;27010:16;;26989:37;;27036:10;27031:129;27060:9;27052:5;:17;27031:129;;;27125:29;27151:2;27125:21;27143:2;27125:13;:17;;:21;;;;:::i;:::-;:25;;:29;;;;:::i;:::-;27109:45;;27071:7;;;;;;;27031:129;;;;27171:13;27164:20;;;;26852:338;:::o;29580:123::-;29648:7;29669:5;:18;29675:11;29669:18;;;;;;;;;;;;;;;:29;;;29662:36;;29580:123;;;:::o;24380:569::-;24439:7;24453:27;24483:17;:24;24501:5;24483:24;;;;;;;;;;;;;;;24453:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24539:1;24518:10;:17;:22;24514:49;;;24556:1;24549:8;;;;;24514:49;24569:15;24589:30;24622:11;24589:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24643:6;24672:1;24652:10;:17;:21;24643:30;;24638:203;24680:10;:17;24676:1;:21;24638:203;;;24746:5;24715:36;;:7;24723:10;24734:1;24723:13;;;;;;;;;;;;;;24715:22;;;;;;;;;;;;;;:27;;;:36;;;24712:123;;;24773:45;24788:7;24796:10;24807:1;24796:13;;;;;;;;;;;;;;24788:22;;;;;;;;;;;;;;:29;;;24773:10;:14;;:45;;;;:::i;:::-;24760:58;;24712:123;;;24830:5;;24712:123;24699:3;;;;;;;;24638:203;;;;24854:88;24911:5;:17;24917:10;24911:17;;;;;;;;;;;;;;;:30;;;24854:52;24893:12;;24854:34;24869:18;;24854:10;:14;;:34;;;;:::i;:::-;:38;;:52;;;;:::i;:::-;:56;;:88;;;;:::i;:::-;24847:95;;;;;24380:569;;;;:::o;17943:47::-;17987:3;17943:47;:::o;30090:121::-;30161:7;30182:5;:18;30188:11;30182:18;;;;;;;;;;;;;;;:24;;;30175:31;;30090:121;;;:::o;18728:51::-;;;;:::o;29708:125::-;29777:7;29798:5;:18;29804:11;29798:18;;;;;;;;;;;;;;;:30;;;29791:37;;29708:125;;;:::o;31081:289::-;31153:7;31170:17;31190:5;:18;31196:11;31190:18;;;;;;;;;;;;;;;31170:38;;31215:14;31241:9;31253:1;31241:13;;31236:110;31260:4;:13;;:20;;;;31256:1;:24;31236:110;;;31302:38;31313:4;:13;;31327:1;31313:16;;;;;;;;;;;;;;;;;;:26;;;31302:6;:10;;:38;;;;:::i;:::-;31293:47;;31282:3;;;;;;;31236:110;;;;31359:6;31352:13;;;;31081:289;;;:::o;8665:471::-;8723:7;8973:1;8968;:6;8964:47;;;8998:1;8991:8;;;;8964:47;9023:9;9039:1;9035;:5;9023:17;;9068:1;9063;9059;:5;;;;;;:10;9051:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9127:1;9120:8;;;8665:471;;;;;:::o;9612:132::-;9670:7;9697:39;9701:1;9704;9697:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;9690:46;;9612:132;;;;:::o;7775:136::-;7833:7;7860:43;7864:1;7867;7860:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;7853:50;;7775:136;;;;:::o;7311:181::-;7369:7;7389:9;7405:1;7401;:5;7389:17;;7430:1;7425;:6;;7417:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7483:1;7476:8;;;7311:181;;;;:::o;623:177::-;706:86;726:5;756:23;;;781:2;785:5;733:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;706:19;:86::i;:::-;623:177;;;:::o;27424:473::-;27492:7;27488:401;;;27524:49;27544:27;18564:2;27544:7;:11;;:27;;;;:::i;:::-;27524:14;;:18;;:49;;;;:::i;:::-;27507:14;:66;;;;18150:9;27584:14;;:28;27579:78;;;18150:9;27622:14;:28;;;;27579:78;27488:401;;;27674:13;27690:29;18644:2;27690:7;:11;;:29;;;;:::i;:::-;27674:45;;27747:26;27764:8;18104:4;27747:16;;:26;;;;:::i;:::-;27730:14;;:43;27725:159;;;18104:4;27783:14;:29;;;;27725:159;;;27849:28;27868:8;27849:14;;:18;;:28;;;;:::i;:::-;27832:14;:45;;;;27725:159;27488:401;;27424:473;;:::o;31375:165::-;31432:4;31449:9;31500:4;31488:17;31480:25;;31531:1;31524:4;:8;31517:15;;;31375:165;;;:::o;20579:396::-;20658:19;;20643:12;:34;20640:331;;;20685:10;20713:19;;20698:12;:34;20685:47;;20819:10;20814:110;20843:5;20835;:13;20814:110;;;20885:32;20914:2;20885:24;20906:2;20885:16;;:20;;:24;;;;:::i;:::-;:28;;:32;;;;:::i;:::-;20866:16;:51;;;;20850:7;;;;;;;20814:110;;;;20953:12;20931:19;:34;;;;20640:331;;20579:396;:::o;808:205::-;909:96;929:5;959:27;;;988:4;994:2;998:5;936:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;909:19;:96::i;:::-;808:205;;;;:::o;23356:639::-;23427:13;23460:3;23443:13;;:20;;;;;;23427:36;;23495:32;23530:11;23495:46;;23570:3;23552:7;:14;;;;:21;23548:333;;;23608:52;23638:7;23646:5;23638:14;;;;;;;;;;;;;;;;;;:21;;;23608:25;23625:7;23608:12;;:16;;:25;;;;:::i;:::-;:29;;:52;;;;:::i;:::-;23593:12;:67;;;;23690:7;23666;23674:5;23666:14;;;;;;;;;;;;;;;;;;:21;;:31;;;;23727:5;23703:7;23711:5;23703:14;;;;;;;;;;;;;;;;;;:19;;;:29;;;;;;;;;;;;;;;;;;23548:333;;;23752:7;23765:63;;;;;;;;23793:5;23765:63;;;;;;23814:7;23765:63;;;23752:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23850:25;23867:7;23850:12;;:16;;:25;;;;:::i;:::-;23835:12;:40;;;;23548:333;23885:17;:24;23903:5;23885:24;;;;;;;;;;;;;;;23915:5;23885:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23949:41;23973:15;23985:2;23973:7;:11;;:15;;;;:::i;:::-;23949:18;;:22;;:41;;;;:::i;:::-;23928:18;:62;;;;23356:639;;;;:::o;10240:278::-;10326:7;10358:1;10354;:5;10361:12;10346:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10385:9;10401:1;10397;:5;;;;;;10385:17;;10509:1;10502:8;;;10240:278;;;;;:::o;8214:192::-;8300:7;8333:1;8328;:6;;8336:12;8320:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8360:9;8376:1;8372;:5;8360:17;;8397:1;8390:8;;;8214:192;;;;;:::o;2928:761::-;3352:23;3378:69;3406:4;3378:69;;;;;;;;;;;;;;;;;3386:5;3378:27;;;;:69;;;;;:::i;:::-;3352:95;;3482:1;3462:10;:17;:21;3458:224;;;3604:10;3593:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3585:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3458:224;2928:761;;;:::o;15401:196::-;15504:12;15536:53;15559:6;15567:4;15573:1;15576:12;15536:22;:53::i;:::-;15529:60;;15401:196;;;;;:::o;16778:979::-;16908:12;16941:18;16952:6;16941:10;:18::i;:::-;16933:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17067:12;17081:23;17108:6;:11;;17128:8;17139:4;17108:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17066:78;;;;17159:7;17155:595;;;17190:10;17183:17;;;;;;17155:595;17324:1;17304:10;:17;:21;17300:439;;;17567:10;17561:17;17628:15;17615:10;17611:2;17607:19;17600:44;17515:148;17710:12;17703:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16778:979;;;;;;;:::o;12483:422::-;12543:4;12751:12;12862:7;12850:20;12842:28;;12896:1;12889:4;:8;12882:15;;;12483:422;;;:::o
Swarm Source
ipfs://85fe25c870fc2b8a88baf16b83148596b2e243d7bdf8e5749eb4355a70fe11ac
Loading...
Loading
Loading...
Loading
Net Worth in USD
$8.24
Net Worth in ETH
0.003774
Token Allocations
USDT
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $0.999729 | 8.245 | $8.24 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.