Source Code
Latest 25 from a total of 28 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Buy With Eth | 22834180 | 258 days ago | IN | 0.00416 ETH | 0.00028571 | ||||
| Buy With Eth | 22815380 | 261 days ago | IN | 0.003 ETH | 0.00037222 | ||||
| Buy With Eth | 22652378 | 284 days ago | IN | 0.02 ETH | 0.00024188 | ||||
| Buy With Eth | 22644925 | 285 days ago | IN | 0.012118 ETH | 0.00026814 | ||||
| Buy With USDT | 22072382 | 365 days ago | IN | 0 ETH | 0.00021996 | ||||
| Buy With USDT | 22067230 | 366 days ago | IN | 0 ETH | 0.00017043 | ||||
| Buy With Eth | 22067220 | 366 days ago | IN | 0.01 ETH | 0.00017439 | ||||
| Buy With Eth | 22067157 | 366 days ago | IN | 0.05 ETH | 0.00016155 | ||||
| Buy With USDT | 22066882 | 366 days ago | IN | 0 ETH | 0.00012748 | ||||
| Buy With Eth | 22066687 | 366 days ago | IN | 0.001 ETH | 0.00013247 | ||||
| Buy With USDT | 22066019 | 366 days ago | IN | 0 ETH | 0.00011565 | ||||
| Buy With USDT | 22065631 | 366 days ago | IN | 0 ETH | 0.00012718 | ||||
| Buy With Eth | 22061224 | 366 days ago | IN | 0.00001 ETH | 0.00019541 | ||||
| Buy With Eth | 22037031 | 370 days ago | IN | 0.001 ETH | 0.00012759 | ||||
| Buy With Eth | 22018105 | 372 days ago | IN | 0.001 ETH | 0.00271062 | ||||
| Buy With Eth | 21973591 | 379 days ago | IN | 0.001 ETH | 0.00035121 | ||||
| Buy With Eth | 21973579 | 379 days ago | IN | 0.001 ETH | 0.00024381 | ||||
| Buy With Eth | 21973362 | 379 days ago | IN | 0.001 ETH | 0.00019504 | ||||
| Buy With Eth | 21949946 | 382 days ago | IN | 0.00015 ETH | 0.00015181 | ||||
| Buy With Eth | 21949938 | 382 days ago | IN | 0.001 ETH | 0.00014888 | ||||
| Buy With Eth | 21931582 | 384 days ago | IN | 0.001 ETH | 0.00059499 | ||||
| Buy With USDT | 21931566 | 384 days ago | IN | 0 ETH | 0.00028499 | ||||
| Buy With Eth | 21931554 | 384 days ago | IN | 0.01 ETH | 0.00030211 | ||||
| Update Referral ... | 21931516 | 384 days ago | IN | 0 ETH | 0.00004696 | ||||
| Buy With Eth | 21916082 | 387 days ago | IN | 0.000372 ETH | 0.00040389 |
Latest 19 internal transactions
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Transfer | 22834180 | 258 days ago | 0.00416 ETH | ||||
| Transfer | 22815380 | 261 days ago | 0.003 ETH | ||||
| Transfer | 22652378 | 284 days ago | 0.02 ETH | ||||
| Transfer | 22644925 | 285 days ago | 0.012118 ETH | ||||
| Transfer | 22067220 | 366 days ago | 0.01 ETH | ||||
| Transfer | 22067157 | 366 days ago | 0.05 ETH | ||||
| Transfer | 22066687 | 366 days ago | 0.001 ETH | ||||
| Transfer | 22061224 | 366 days ago | 0.00001 ETH | ||||
| Transfer | 22037031 | 370 days ago | 0.001 ETH | ||||
| Transfer | 22018105 | 372 days ago | 0.001 ETH | ||||
| Transfer | 21973591 | 379 days ago | 0.001 ETH | ||||
| Transfer | 21973579 | 379 days ago | 0.001 ETH | ||||
| Transfer | 21973362 | 379 days ago | 0.001 ETH | ||||
| Transfer | 21949946 | 382 days ago | 0.00015 ETH | ||||
| Transfer | 21949938 | 382 days ago | 0.001 ETH | ||||
| Transfer | 21931582 | 384 days ago | 0.001 ETH | ||||
| Transfer | 21931554 | 384 days ago | 0.01 ETH | ||||
| Transfer | 21916082 | 387 days ago | 0.000372 ETH | ||||
| Transfer | 21915387 | 387 days ago | 0.0001 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
PreSale
Compiler Version
v0.8.28+commit.7893614a
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2025-02-23
*/
pragma solidity 0.8.28;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
// pointer aliasing, and it cannot be disabled.
// The values being non-zero value makes deployment a bit more expensive,
// but in exchange the refund on every call to nonReentrant will be lower in
// amount. Since refunds are capped to a percentage of the total
// transaction's gas, it is best to keep them low in cases like this one, to
// increase the likelihood of the full refund coming into effect.
uint256 private constant _NOT_ENTERED = 1;
uint256 private constant _ENTERED = 2;
uint256 private _status;
constructor() {
_status = _NOT_ENTERED;
}
/**
* @dev Prevents a contract from calling itself, directly or indirectly.
* Calling a `nonReentrant` function from another `nonReentrant`
* function is not supported. It is possible to prevent this from happening
* by making the `nonReentrant` function external, and making it call a
* `private` function that does the actual work.
*/
modifier nonReentrant() {
_nonReentrantBefore();
_;
_nonReentrantAfter();
}
function _nonReentrantBefore() private {
// On the first call to nonReentrant, _status will be _NOT_ENTERED
require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
// Any calls to nonReentrant after this point will fail
_status = _ENTERED;
}
function _nonReentrantAfter() private {
// By storing the original value once again, a refund is triggered (see
// https://eips.ethereum.org/EIPS/eip-2200)
_status = _NOT_ENTERED;
}
}
// File: @openzeppelin/contracts/utils/Context.sol
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: @openzeppelin/contracts/access/Ownable.sol
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: @openzeppelin/contracts/utils/Address.sol
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
* [IMPORTANT]
* ====
* You shouldn't rely on `isContract` to protect against flash loan attacks!
*
* Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
* like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
* constructor.
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize/address.code.length, which returns 0
// for contracts in construction, since the code is only stored at the end
// of the constructor execution.
return account.code.length > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Address: insufficient balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "Address: unable to send value, recipient may have reverted");
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, "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");
(bool success, bytes memory returndata) = target.call{value: value}(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
return functionStaticCall(target, data, "Address: low-level static call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
return functionDelegateCall(target, data, "Address: low-level delegate call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResultFromTarget(target, success, returndata, errorMessage);
}
/**
* @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
* the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
*
* _Available since v4.8._
*/
function verifyCallResultFromTarget(
address target,
bool success,
bytes memory returndata,
string memory errorMessage
) internal view returns (bytes memory) {
if (success) {
if (returndata.length == 0) {
// only check isContract if the call was successful and the return data is empty
// otherwise we already know that it was a contract
require(isContract(target), "Address: call to non-contract");
}
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
/**
* @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason or using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
_revert(returndata, errorMessage);
}
}
function _revert(bytes memory returndata, string memory errorMessage) private pure {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
/// @solidity memory-safe-assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
// File: @openzeppelin/contracts/token/ERC20/IERC20.sol
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
interface IERC20 {
/**
* @dev Emitted when `value` tokens are moved from one account (`from`) to
* another (`to`).
*
* Note that `value` may be zero.
*/
event Transfer(address indexed from, address indexed to, uint256 value);
/**
* @dev Emitted when the allowance of a `spender` for an `owner` is set by
* a call to {approve}. `value` is the new allowance.
*/
event Approval(address indexed owner, address indexed spender, uint256 value);
/**
* @dev Returns the amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` tokens from the caller's account to `to`.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transfer(address to, uint256 amount) external returns (bool);
/**
* @dev Returns the remaining number of tokens that `spender` will be
* allowed to spend on behalf of `owner` through {transferFrom}. This is
* zero by default.
*
* This value changes when {approve} or {transferFrom} are called.
*/
function allowance(address owner, address spender) external view returns (uint256);
/**
* @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* IMPORTANT: Beware that changing an allowance with this method brings the risk
* that someone may use both the old and the new allowance by unfortunate
* transaction ordering. One possible solution to mitigate this race
* condition is to first reduce the spender's allowance to 0 and set the
* desired value afterwards:
* https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
*
* Emits an {Approval} event.
*/
function approve(address spender, uint256 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` is then deducted from the caller's
* allowance.
*
* Returns a boolean value indicating whether the operation succeeded.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 amount
) external returns (bool);
}
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)
/**
* @dev Interface for the optional metadata functions from the ERC20 standard.
*
* _Available since v4.1._
*/
interface IERC20Metadata is IERC20 {
/**
* @dev Returns the name of the token.
*/
function name() external view returns (string memory);
/**
* @dev Returns the symbol of the token.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the decimals places of the token.
*/
function decimals() external view returns (uint8);
}
// File: renqFinanceUpdate.sol
//SPDX-License-Identifier: MIT
interface Aggregator {
function latestRoundData()
external
view
returns (
uint80 roundId,
int256 answer,
uint256 startedAt,
uint256 updatedAt,
uint80 answeredInRound
);
}
contract PreSale is ReentrancyGuard, Ownable {
uint256 public presaleId;
uint256 public USDT_MULTIPLIER = (10**6);
uint256 public ETH_MULTIPLIER = (10**18);
address public fundReceiver;
uint256 public referralReward = 5; // (e.g., 5 means 5%)
uint256 public totalReferralsDistributed;
struct Referral {
address referrer;
uint256 tokensEarned; // Tokens earned from this referral
}
mapping(address => Referral[]) public referrals;
mapping(address => uint256) public totalReferralEarnings;
struct Presale {
uint256 startTime;
uint256 endTime;
uint256 price;
uint256 Sold;
uint256 tokensToSell;
uint256 amountRaised;
bool Active;
}
struct ClaimData {
uint256 totalAmount;
}
uint256 public silverBonusAmount = 250 * USDT_MULTIPLIER;
uint256 public goldBonusAmount = 500 * USDT_MULTIPLIER;
uint256 public platinumBonusAmount = 1000 * USDT_MULTIPLIER;
uint256 public diamondBonusAmount = 2500 * USDT_MULTIPLIER;
struct BonusReward {
uint256 silver;
uint256 gold;
uint256 platinum;
uint256 diamond;
}
// silver, gold, platinum, diamond
BonusReward public bonusReward = BonusReward(5, 7, 10, 15);
IERC20Metadata public USDTInterface = IERC20Metadata(0xdAC17F958D2ee523a2206206994597C13D831ec7);
Aggregator internal aggregatorETHInterface = Aggregator(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419);
// https://docs.chain.link/docs/ethereum-addresses/ => (ETH / USD)
mapping(uint256 => bool) public paused;
mapping(uint256 => Presale) public presale;
mapping(address => ClaimData) public userClaimData;
address public SaleToken;
event PresaleCreated(
uint256 indexed _id,
uint256 _totalTokens,
uint256 _startTime,
uint256 _endTime
);
event TokensBought(
address indexed user,
address indexed purchaseToken,
uint256 tokensBought,
uint256 amountPaid,
uint256 timestamp
);
event PresaleTokenAddressUpdated(
address indexed prevValue,
address indexed newValue,
uint256 timestamp
);
event PresalePaused(uint256 indexed id, uint256 timestamp);
event PresaleUnpaused(uint256 indexed id, uint256 timestamp);
constructor(uint256 _price, uint256 _tokensToSell, address _fundReceiver, address _saleToken) {
presaleId++;
presale[presaleId] = Presale(
0,
0,
_price,
0,
_tokensToSell,
0,
false
);
emit PresaleCreated(presaleId, _tokensToSell, 0, 0);
fundReceiver = _fundReceiver;
SaleToken = _saleToken;
}
function startPresale() public onlyOwner {
presale[presaleId].startTime = block.timestamp;
presale[presaleId].Active = true;
}
function endPresale() public onlyOwner {
require(
presale[presaleId].Active = true,
"This presale is already Inactive"
);
presale[presaleId].endTime = block.timestamp;
presale[presaleId].Active = false;
}
// /**
// * @dev Update a new presale
// * @param _price Per USD price should be multiplied with token decimals
// * @param _tokensToSell No of tokens to sell without denomination. If 1 million tokens to be sold then - 1_000_000 has to be passed
// */
function updatePresale(
uint256 _price
) external onlyOwner {
presale[presaleId].price = _price;
}
/**
* @dev to update bonusReward for purchases
* @param _silver % for silver buyer
* @param _gold % for gold buyer
* @param _platinum % for platinum buyer
* @param _diamond % for diamond buyer
*/
function updateBonusRewardAmount(uint256 _silver, uint256 _gold, uint256 _platinum, uint256 _diamond) external onlyOwner {
bonusReward.silver = _silver;
bonusReward.gold = _gold;
bonusReward.platinum = _platinum;
bonusReward.diamond = _diamond;
}
/**
* @dev to update Bonus Amount for purchases
* @param _silver for silverBonusAmount
* @param _gold for goldBonusAmount
* @param _platinum for platinumBonusAmount
* @param _diamond for diamondBonusAmount
*/
function updateBonusReward(uint256 _silver, uint256 _gold, uint256 _platinum, uint256 _diamond) external onlyOwner {
silverBonusAmount = _silver;
goldBonusAmount = _gold;
platinumBonusAmount = _platinum;
diamondBonusAmount = _diamond;
}
/**
* @dev to update referralReward
* @param _referralReward for referralReward
*/
function updateReferralReward(uint256 _referralReward) external onlyOwner {
referralReward = _referralReward;
}
/**
* @dev To update the fund receiving wallet
* @param _wallet address of wallet to update
*/
function changeFundWallet(address _wallet) external onlyOwner {
require(_wallet != address(0), "Invalid parameters");
fundReceiver = _wallet;
}
/**
* @dev To update the USDT Token address
* @param _newAddress Sale token address
*/
function changeUSDTToken(address _newAddress) external onlyOwner {
require(_newAddress != address(0), "Zero token address");
USDTInterface = IERC20Metadata(_newAddress);
}
/**
* @dev To pause the presale
*/
function pausePresale() external onlyOwner {
require(!paused[presaleId], "Already paused");
paused[presaleId] = true;
emit PresalePaused(presaleId, block.timestamp);
}
/**
* @dev To unpause the presale
*/
function unPausePresale()
external
onlyOwner
{
require(paused[presaleId], "Not paused");
paused[presaleId] = false;
emit PresaleUnpaused(presaleId, block.timestamp);
}
/**
* @dev To get latest ETH price in 10**18 format
*/
function getLatestETHPrice() public view returns (uint256) {
(, int256 price, , , ) = aggregatorETHInterface.latestRoundData();
price = (price * (10**10));
return uint256(price);
}
modifier checkSaleState(uint256 _id, uint256 amount) {
require(
block.timestamp >= presale[_id].startTime &&
presale[_id].Active == true,
"Invalid time for buying"
);
require(
amount > 0 && amount <= presale[_id].tokensToSell-presale[_id].Sold,
"Invalid sale amount"
);
_;
}
function addReferral(address _referrer, address _referee, uint256 _tokensEarned) internal {
referrals[_referrer].push(Referral(_referee, _tokensEarned));
totalReferralEarnings[_referrer] += _tokensEarned;
}
function getReferrals(address _referrer) public view returns (Referral[] memory) {
return referrals[_referrer];
}
function getTotalReferralEarnings(address _referrer) public view returns (uint256) {
return totalReferralEarnings[_referrer];
}
/**
* @dev To buy into a presale using USDT
* @param usdAmount Usdt amount to buy tokens
*/
function buyWithUSDT(uint256 usdAmount, address referrer)
external
checkSaleState(presaleId, usdtToTokens(presaleId, usdAmount))
returns (bool)
{
uint256 tokens = usdtToTokens(presaleId, usdAmount);
require(!paused[presaleId], "Presale paused");
require(presale[presaleId].Active == true, "Presale is not active yet");
require(presale[presaleId].Sold + tokens <= presale[presaleId].tokensToSell,
"Amount should be less than total tokens sell amount");
presale[presaleId].amountRaised += usdAmount;
if (referrer != address(0) && referrer != msg.sender && userClaimData[referrer].totalAmount > 0) {
uint256 reward = (tokens * referralReward) / 100;
addReferral(referrer, msg.sender, reward);
IERC20(SaleToken).transfer(referrer, reward);
totalReferralsDistributed += reward;
}
uint256 bonusRewardAmount = checkBounusRewardAmount(usdAmount, tokens);
tokens = tokens + bonusRewardAmount;
presale[presaleId].Sold += tokens;
if (userClaimData[_msgSender()].totalAmount > 0) {
userClaimData[_msgSender()].totalAmount += tokens;
} else {
userClaimData[_msgSender()] = ClaimData(tokens);
}
uint256 ourAllowance = USDTInterface.allowance(
_msgSender(),
address(this)
);
require(usdAmount <= ourAllowance, "Make sure to add enough allowance");
(bool success, ) = address(USDTInterface).call(
abi.encodeWithSignature(
"transferFrom(address,address,uint256)",
_msgSender(),
fundReceiver,
usdAmount
)
);
require(success, "Token payment failed");
bool status = IERC20(SaleToken).transfer(msg.sender, tokens);
require(status, "Token transfer failed");
emit TokensBought(
_msgSender(),
address(USDTInterface),
tokens,
usdAmount,
block.timestamp
);
return true;
}
/**
* @dev To buy into a presale using ETH
*/
function buyWithEth(address referrer)
external
payable
checkSaleState(presaleId, ethToTokens(presaleId, msg.value))
nonReentrant
returns (bool)
{
uint256 usdAmount = (msg.value * getLatestETHPrice() * USDT_MULTIPLIER) / (ETH_MULTIPLIER * ETH_MULTIPLIER);
uint256 tokens = usdtToTokens(presaleId, usdAmount);
require(presale[presaleId].Sold + tokens <= presale[presaleId].tokensToSell,
"Amount should be less than total tokens sell amount");
require(!paused[presaleId], "Presale paused");
require(presale[presaleId].Active == true, "Presale is not active yet");
if (referrer != address(0) && referrer != msg.sender && userClaimData[referrer].totalAmount > 0) {
uint256 reward = (tokens * referralReward) / 100;
addReferral(referrer, msg.sender, reward);
IERC20(SaleToken).transfer(referrer, reward);
totalReferralsDistributed += reward;
presale[presaleId].Sold += reward;
}
uint256 bonusRewardAmount = checkBounusRewardAmount(usdAmount, tokens);
tokens = tokens + bonusRewardAmount;
presale[presaleId].Sold += tokens;
presale[presaleId].amountRaised += usdAmount;
if (userClaimData[_msgSender()].totalAmount > 0) {
userClaimData[_msgSender()].totalAmount += tokens;
} else {
userClaimData[_msgSender()] = ClaimData(tokens);
}
sendValue(payable(fundReceiver), msg.value);
bool status = IERC20(SaleToken).transfer(msg.sender, tokens);
require(status, "Token transfer failed");
emit TokensBought(
_msgSender(),
address(0),
tokens,
msg.value,
block.timestamp
);
return true;
}
/**
* @dev Helper funtion to get bonusRewardAmount for given usdAmount
* @param usdAmount usdt Amount
* @param tokens token Amount
*/
function checkBounusRewardAmount(uint256 usdAmount, uint256 tokens) public view returns (uint256 reward) {
if (usdAmount >= diamondBonusAmount) {
reward = (tokens * bonusReward.diamond) / 100;
}
else if (usdAmount >= platinumBonusAmount) {
reward = (tokens * bonusReward.platinum) / 100;
} else if (usdAmount >= goldBonusAmount) {
reward = (tokens * bonusReward.gold) / 100;
} else if (usdAmount >= silverBonusAmount) {
reward = (tokens * bonusReward.silver) / 100;
}
}
/**
* @dev Helper funtion to get ETH price for given amount
* @param _id Presale id
* @param amount No of tokens to buy
*/
function ethBuyHelper(uint256 _id, uint256 amount)
external
view
returns (uint256 ethAmount)
{
uint256 usdPrice = (amount * presale[_id].price);
ethAmount = (usdPrice * ETH_MULTIPLIER) / (getLatestETHPrice() * 10**IERC20Metadata(SaleToken).decimals());
}
/**
* @dev Helper funtion to get USDT price for given amount
* @param _id Presale id
* @param amount No of tokens to buy
*/
function usdtBuyHelper(uint256 _id, uint256 amount)
external
view
returns (uint256 usdPrice)
{
usdPrice = (amount * presale[_id].price) / 10**IERC20Metadata(SaleToken).decimals();
}
/**
* @dev Helper funtion to get tokens for eth amount
* @param _id Presale id
* @param amount No of eth
*/
function ethToTokens(uint256 _id, uint256 amount)
public
view
returns (uint256 _tokens)
{
uint256 usdAmount = amount * getLatestETHPrice() * USDT_MULTIPLIER / (ETH_MULTIPLIER * ETH_MULTIPLIER);
_tokens = usdtToTokens(_id, usdAmount);
}
/**
* @dev Helper funtion to get tokens for given usdt amount
* @param _id Presale id
* @param amount No of usdt
*/
function usdtToTokens(uint256 _id, uint256 amount)
public
view
returns (uint256 _tokens)
{
_tokens = (amount * presale[_id].price) / USDT_MULTIPLIER;
}
function sendValue(address payable recipient, uint256 amount) internal {
require(address(this).balance >= amount, "Low balance");
(bool success, ) = recipient.call{value: amount}("");
require(success, "ETH Payment failed");
}
function WithdrawTokens(address _token, uint256 amount) external onlyOwner {
IERC20(_token).transfer(fundReceiver, amount);
}
function WithdrawContractFunds(uint256 amount) external onlyOwner {
sendValue(payable(fundReceiver), amount);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"},{"internalType":"uint256","name":"_tokensToSell","type":"uint256"},{"internalType":"address","name":"_fundReceiver","type":"address"},{"internalType":"address","name":"_saleToken","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_totalTokens","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"PresaleCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresalePaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"prevValue","type":"address"},{"indexed":true,"internalType":"address","name":"newValue","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleTokenAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"PresaleUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"purchaseToken","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokensBought","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountPaid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TokensBought","type":"event"},{"inputs":[],"name":"ETH_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SaleToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDTInterface","outputs":[{"internalType":"contract IERC20Metadata","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT_MULTIPLIER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawContractFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"WithdrawTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bonusReward","outputs":[{"internalType":"uint256","name":"silver","type":"uint256"},{"internalType":"uint256","name":"gold","type":"uint256"},{"internalType":"uint256","name":"platinum","type":"uint256"},{"internalType":"uint256","name":"diamond","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdAmount","type":"uint256"},{"internalType":"address","name":"referrer","type":"address"}],"name":"buyWithUSDT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"changeFundWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newAddress","type":"address"}],"name":"changeUSDTToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdAmount","type":"uint256"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"checkBounusRewardAmount","outputs":[{"internalType":"uint256","name":"reward","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"diamondBonusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethBuyHelper","outputs":[{"internalType":"uint256","name":"ethAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ethToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestETHPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"getReferrals","outputs":[{"components":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"tokensEarned","type":"uint256"}],"internalType":"struct PreSale.Referral[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"}],"name":"getTotalReferralEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"goldBonusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"platinumBonusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"presale","outputs":[{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"uint256","name":"Sold","type":"uint256"},{"internalType":"uint256","name":"tokensToSell","type":"uint256"},{"internalType":"uint256","name":"amountRaised","type":"uint256"},{"internalType":"bool","name":"Active","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presaleId","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"referrals","outputs":[{"internalType":"address","name":"referrer","type":"address"},{"internalType":"uint256","name":"tokensEarned","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"silverBonusAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startPresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalReferralEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReferralsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unPausePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_silver","type":"uint256"},{"internalType":"uint256","name":"_gold","type":"uint256"},{"internalType":"uint256","name":"_platinum","type":"uint256"},{"internalType":"uint256","name":"_diamond","type":"uint256"}],"name":"updateBonusReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_silver","type":"uint256"},{"internalType":"uint256","name":"_gold","type":"uint256"},{"internalType":"uint256","name":"_platinum","type":"uint256"},{"internalType":"uint256","name":"_diamond","type":"uint256"}],"name":"updateBonusRewardAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"updatePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referralReward","type":"uint256"}],"name":"updateReferralReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdtBuyHelper","outputs":[{"internalType":"uint256","name":"usdPrice","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"usdtToTokens","outputs":[{"internalType":"uint256","name":"_tokens","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userClaimData","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
6080604052620f42406003819055670de0b6b3a764000060045560056006556100299060fa610288565b600a5560035461003b906101f4610288565b600b5560035461004d906103e8610288565b600c5560035461005f906109c4610288565b600d55604080516080810182526005808252600760208301819052600a938301849052600f6060909301839052600e919091558155601091909155601155601280546001600160a01b031990811673dac17f958d2ee523a2206206994597c13d831ec71790915560138054909116735f4ec3df9cbd43714fe2740f5e3616155c5b84191790553480156100f0575f5ffd5b506040516125e23803806125e283398101604081905261010f916102c0565b60015f5561011c33610223565b60028054905f61012b83610304565b90915550506040805160e0810182525f80825260208083018281528385018981526060808601858152608087018b815260a0880187815260c08901888152600280548a52601589528b8a209a518b55965160018b01559451898701559151600389015551600488015551600587015590516006909501805460ff191695151595909517909455548451888152918201839052938101919091527f6a00651728a92841411081673eaa4eddbed06d102a590e050c22def40d4dd0b8910160405180910390a2600580546001600160a01b039384166001600160a01b031991821617909155601780549290931691161790555061031c9050565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b634e487b7160e01b5f52601160045260245ffd5b808202811582820484141761029f5761029f610274565b92915050565b80516001600160a01b03811681146102bb575f5ffd5b919050565b5f5f5f5f608085870312156102d3575f5ffd5b8451602086015190945092506102eb604086016102a5565b91506102f9606086016102a5565b905092959194509250565b5f6001820161031557610315610274565b5060010190565b6122b9806103295f395ff3fe608060405260043610610253575f3560e01c8063833cde521161013f578063d8eaa36d116100b3578063f2fde38b11610078578063f2fde38b14610761578063f309fed914610780578063f597573f1461079f578063fb4aa0a1146107be578063fe9f676e146107dd578063ff6221bf146107fc575f5ffd5b8063d8eaa36d1461064c578063e18e84f91461065f578063e554e1ad14610674578063e697b5d814610693578063e6ab1434146106d1575f5ffd5b8063a9991bf311610104578063a9991bf314610583578063b08c7e6b146105a2578063b31ee5ae146105b7578063c2a0fb04146105d6578063cf13d91b146105eb578063d095362f1461062d575f5ffd5b8063833cde52146104e85780638561c3151461051f5780638da5cb5b1461053e5780639f9742c81461055b578063a43be57b1461056f575f5ffd5b80634b1da4a5116101d65780637010e3251161019b5780637010e3251461042d578063715018a614610442578063718a196214610456578063727f034214610475578063777e0d86146104a0578063813d4453146104b4575f5ffd5b80634b1da4a51461039c5780634d683674146103bb578063582b5723146103d0578063680f2e4f146103ef5780636fb4adff1461040e575f5ffd5b8063397643631161021c578063397643631461030657806341a0894d1461031b578063446d49da1461034757806346b6ef411461035c57806348bf4fcf14610387575f5ffd5b8062dde10e1461025757806304c98b2b1461029a578063070f5c09146102b0578063200dc0f6146102c45780632127fe04146102e7575b5f5ffd5b348015610262575f5ffd5b50610285610271366004611e8a565b60146020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156102a5575f5ffd5b506102ae61081b565b005b3480156102bb575f5ffd5b506102ae61084d565b3480156102cf575f5ffd5b506102d9600a5481565b604051908152602001610291565b3480156102f2575f5ffd5b506102d9610301366004611ea1565b610907565b348015610311575f5ffd5b506102d960045481565b348015610326575f5ffd5b5061033a610335366004611edc565b6109d6565b6040516102919190611ef5565b348015610352575f5ffd5b506102d960075481565b348015610367575f5ffd5b506102d9610376366004611edc565b60096020525f908152604090205481565b348015610392575f5ffd5b506102d960035481565b3480156103a7575f5ffd5b506102ae6103b6366004611e8a565b610a5f565b3480156103c6575f5ffd5b506102d960065481565b3480156103db575f5ffd5b506102ae6103ea366004611e8a565b610a7c565b3480156103fa575f5ffd5b506102ae610409366004611f4c565b610a9d565b348015610419575f5ffd5b506102ae610428366004611edc565b610b1e565b348015610438575f5ffd5b506102d9600d5481565b34801561044d575f5ffd5b506102ae610b93565b348015610461575f5ffd5b506102d9610470366004611ea1565b610ba6565b348015610480575f5ffd5b506102d961048f366004611edc565b60166020525f908152604090205481565b3480156104ab575f5ffd5b506102d9610bed565b3480156104bf575f5ffd5b506102d96104ce366004611edc565b6001600160a01b03165f9081526009602052604090205490565b3480156104f3575f5ffd5b50601754610507906001600160a01b031681565b6040516001600160a01b039091168152602001610291565b34801561052a575f5ffd5b506102ae610539366004611edc565b610c80565b348015610549575f5ffd5b506001546001600160a01b0316610507565b348015610566575f5ffd5b506102ae610cf5565b34801561057a575f5ffd5b506102ae610d98565b34801561058e575f5ffd5b506102ae61059d366004611f74565b610de9565b3480156105ad575f5ffd5b506102d9600b5481565b3480156105c2575f5ffd5b506102d96105d1366004611ea1565b610e05565b3480156105e1575f5ffd5b506102d9600c5481565b3480156105f6575f5ffd5b50600e54600f5460105460115461060d9392919084565b604080519485526020850193909352918301526060820152608001610291565b348015610638575f5ffd5b50610285610647366004611fa3565b610e8c565b61028561065a366004611edc565b61153d565b34801561066a575f5ffd5b506102d960025481565b34801561067f575f5ffd5b506102ae61068e366004611e8a565b611a9b565b34801561069e575f5ffd5b506106b26106ad366004611f4c565b611aa8565b604080516001600160a01b039093168352602083019190915201610291565b3480156106dc575f5ffd5b5061072a6106eb366004611e8a565b60156020525f90815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919060ff1687565b604080519788526020880196909652948601939093526060850191909152608084015260a0830152151560c082015260e001610291565b34801561076c575f5ffd5b506102ae61077b366004611edc565b611aea565b34801561078b575f5ffd5b506102d961079a366004611ea1565b611b60565b3480156107aa575f5ffd5b50601254610507906001600160a01b031681565b3480156107c9575f5ffd5b50600554610507906001600160a01b031681565b3480156107e8575f5ffd5b506102d96107f7366004611ea1565b611b81565b348015610807575f5ffd5b506102ae610816366004611f74565b611c12565b610823611c2e565b600280545f908152601560205260408082204290559154815220600601805460ff19166001179055565b610855611c2e565b6002545f9081526014602052604090205460ff16156108ac5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481c185d5cd95960921b60448201526064015b60405180910390fd5b600280545f9081526014602052604090819020805460ff19166001179055905490517f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f906108fd9042815260200190565b60405180910390a2565b5f8281526015602052604081206002015481906109249084611fe1565b905060175f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610976573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099a9190611ff8565b6109a590600a6120fb565b6109ad610bed565b6109b79190611fe1565b6004546109c49083611fe1565b6109ce9190612109565b949350505050565b6001600160a01b0381165f908152600860209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610a54575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a0d565b505050509050919050565b610a67611c2e565b600280545f9081526015602052604090200155565b610a84611c2e565b600554610a9a906001600160a01b031682611c88565b50565b610aa5611c2e565b60055460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af1158015610af5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b199190612128565b505050565b610b26611c2e565b6001600160a01b038116610b715760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b60448201526064016108a3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610b9b611c2e565b610ba45f611d5a565b565b5f5f600454600454610bb89190611fe1565b600354610bc3610bed565b610bcd9086611fe1565b610bd79190611fe1565b610be19190612109565b90506109ce8482611b60565b5f5f60135f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610c3f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c639190612160565b505050915050806402540be400610c7a91906121ae565b92915050565b610c88611c2e565b6001600160a01b038116610cd35760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b60448201526064016108a3565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b610cfd611c2e565b6002545f9081526014602052604090205460ff16610d4a5760405162461bcd60e51b815260206004820152600a602482015269139bdd081c185d5cd95960b21b60448201526064016108a3565b600280545f9081526014602052604090819020805460ff19169055905490517ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d906108fd9042815260200190565b610da0611c2e565b6002545f908152601560205260409020600601805460ff19166001179055600280545f90815260156020526040808220426001909101559154815220600601805460ff19169055565b610df1611c2e565b600a93909355600b91909155600c55600d55565b5f600d548310610e3057601154606490610e1f9084611fe1565b610e299190612109565b9050610c7a565b600c548310610e4957601054606490610e1f9084611fe1565b600b548310610e6257600f54606490610e1f9084611fe1565b600a548310610c7a57600e54606490610e7b9084611fe1565b610e859190612109565b9392505050565b5f600254610e9c60025485611b60565b5f828152601560205260409020544210801590610ece57505f8281526015602052604090206006015460ff1615156001145b610f145760405162461bcd60e51b8152602060048201526017602482015276496e76616c69642074696d6520666f7220627579696e6760481b60448201526064016108a3565b5f81118015610f4457505f8281526015602052604090206003810154600490910154610f4091906121dd565b8111155b610f865760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b60448201526064016108a3565b5f610f9360025487611b60565b6002545f9081526014602052604090205490915060ff1615610fe85760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b60448201526064016108a3565b6002545f9081526015602052604090206006015460ff16151560011461104c5760405162461bcd60e51b8152602060048201526019602482015278141c995cd85b19481a5cc81b9bdd081858dd1a5d99481e595d603a1b60448201526064016108a3565b6002545f90815260156020526040902060048101546003909101546110729083906121f0565b11156110905760405162461bcd60e51b81526004016108a390612203565b6002545f90815260156020526040812060050180548892906110b39084906121f0565b90915550506001600160a01b038516158015906110d957506001600160a01b0385163314155b80156110fb57506001600160a01b0385165f9081526016602052604090205415155b156111b5575f6064600654836111119190611fe1565b61111b9190612109565b9050611128863383611dab565b60175460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611178573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119c9190612128565b508060075f8282546111ae91906121f0565b9091555050505b5f6111c08783610e05565b90506111cc81836121f0565b91508160155f60025481526020019081526020015f206003015f8282546111f391906121f0565b9091555050335f908152601660205260409020541561123557335f908152601660205260408120805484929061122a9084906121f0565b909155506112569050565b6040805160208082018352848252335f908152601690915291909120905190555b6012545f906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa1580156112b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d69190612256565b9050808811156113325760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e636044820152606560f81b60648201526084016108a3565b6012545f906001600160a01b0316336005546040516001600160a01b03928316602482015291166044820152606481018b905260840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b1790525161139d919061226d565b5f604051808303815f865af19150503d805f81146113d6576040519150601f19603f3d011682016040523d82523d5f602084013e6113db565b606091505b50509050806114235760405162461bcd60e51b8152602060048201526014602482015273151bdad95b881c185e5b595b9d0819985a5b195960621b60448201526064016108a3565b60175460405163a9059cbb60e01b8152336004820152602481018690525f916001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611471573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114959190612128565b9050806114dc5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b60448201526064016108a3565b60125460408051878152602081018d9052428183015290516001600160a01b039092169133917f4a179a798aae7b667a57d4131a74ac237388c46efd74875a1fa82f5bc9e4a6d5919081900360600190a35060019998505050505050505050565b5f60025461154d60025434610ba6565b5f82815260156020526040902054421080159061157f57505f8281526015602052604090206006015460ff1615156001145b6115c55760405162461bcd60e51b8152602060048201526017602482015276496e76616c69642074696d6520666f7220627579696e6760481b60448201526064016108a3565b5f811180156115f557505f82815260156020526040902060038101546004909101546115f191906121dd565b8111155b6116375760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b60448201526064016108a3565b61163f611e33565b6004545f9061164e9080611fe1565b600354611659610bed565b6116639034611fe1565b61166d9190611fe1565b6116779190612109565b90505f61168660025483611b60565b6002545f9081526015602052604090206004810154600390910154919250906116b09083906121f0565b11156116ce5760405162461bcd60e51b81526004016108a390612203565b6002545f9081526014602052604090205460ff16156117205760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b60448201526064016108a3565b6002545f9081526015602052604090206006015460ff1615156001146117845760405162461bcd60e51b8152602060048201526019602482015278141c995cd85b19481a5cc81b9bdd081858dd1a5d99481e595d603a1b60448201526064016108a3565b6001600160a01b038616158015906117a557506001600160a01b0386163314155b80156117c757506001600160a01b0386165f9081526016602052604090205415155b156118a9575f6064600654836117dd9190611fe1565b6117e79190612109565b90506117f4873383611dab565b60175460405163a9059cbb60e01b81526001600160a01b038981166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611844573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118689190612128565b508060075f82825461187a91906121f0565b90915550506002545f90815260156020526040812060030180548392906118a29084906121f0565b9091555050505b5f6118b48383610e05565b90506118c081836121f0565b91508160155f60025481526020019081526020015f206003015f8282546118e791906121f0565b90915550506002545f908152601560205260408120600501805485929061190f9084906121f0565b9091555050335f908152601660205260409020541561195157335f90815260166020526040812080548492906119469084906121f0565b909155506119729050565b6040805160208082018352848252335f908152601690915291909120905190555b600554611988906001600160a01b031634611c88565b60175460405163a9059cbb60e01b8152336004820152602481018490525f916001600160a01b03169063a9059cbb906044016020604051808303815f875af11580156119d6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119fa9190612128565b905080611a415760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b60448201526064016108a3565b60408051848152346020820152428183015290515f9133917f4a179a798aae7b667a57d4131a74ac237388c46efd74875a1fa82f5bc9e4a6d59181900360600190a36001965050505050611a9460015f55565b5050919050565b611aa3611c2e565b600655565b6008602052815f5260405f208181548110611ac1575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b039091169250905082565b611af2611c2e565b6001600160a01b038116611b575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a3565b610a9a81611d5a565b6003545f83815260156020526040812060020154909190610e7b9084611fe1565b6017546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015611bc8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bec9190611ff8565b611bf790600a6120fb565b5f84815260156020526040902060020154610e7b9084611fe1565b611c1a611c2e565b600e93909355600f91909155601055601155565b6001546001600160a01b03163314610ba45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a3565b80471015611cc65760405162461bcd60e51b815260206004820152600b60248201526a4c6f772062616c616e636560a81b60448201526064016108a3565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611d0f576040519150601f19603f3d011682016040523d82523d5f602084013e611d14565b606091505b5050905080610b195760405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b60448201526064016108a3565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038381165f8181526008602090815260408083208151808301835288871681528084018881528254600180820185559387528587209251600290910290920180546001600160a01b031916929098169190911787555195019490945591815260099091529081208054839290611e299084906121f0565b9091555050505050565b60025f5403611e845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108a3565b60025f55565b5f60208284031215611e9a575f5ffd5b5035919050565b5f5f60408385031215611eb2575f5ffd5b50508035926020909101359150565b80356001600160a01b0381168114611ed7575f5ffd5b919050565b5f60208284031215611eec575f5ffd5b610e8582611ec1565b602080825282518282018190525f918401906040840190835b81811015611f4157835180516001600160a01b031684526020908101518185015290930192604090920191600101611f0e565b509095945050505050565b5f5f60408385031215611f5d575f5ffd5b611f6683611ec1565b946020939093013593505050565b5f5f5f5f60808587031215611f87575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f5f60408385031215611fb4575f5ffd5b82359150611fc460208401611ec1565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c7a57610c7a611fcd565b5f60208284031215612008575f5ffd5b815160ff81168114610e85575f5ffd5b6001815b60018411156120535780850481111561203757612037611fcd565b600184161561204557908102905b60019390931c92800261201c565b935093915050565b5f8261206957506001610c7a565b8161207557505f610c7a565b816001811461208b5760028114612095576120b1565b6001915050610c7a565b60ff8411156120a6576120a6611fcd565b50506001821b610c7a565b5060208310610133831016604e8410600b84101617156120d4575081810a610c7a565b6120e05f198484612018565b805f19048211156120f3576120f3611fcd565b029392505050565b5f610e8560ff84168361205b565b5f8261212357634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612138575f5ffd5b81518015158114610e85575f5ffd5b805169ffffffffffffffffffff81168114611ed7575f5ffd5b5f5f5f5f5f60a08688031215612174575f5ffd5b61217d86612147565b602087015160408801516060890151929750909550935091506121a260808701612147565b90509295509295909350565b8082025f8212600160ff1b841416156121c9576121c9611fcd565b8181058314821517610c7a57610c7a611fcd565b81810381811115610c7a57610c7a611fcd565b80820180821115610c7a57610c7a611fcd565b60208082526033908201527f416d6f756e742073686f756c64206265206c657373207468616e20746f74616c604082015272081d1bdad95b9cc81cd95b1b08185b5bdd5b9d606a1b606082015260800190565b5f60208284031215612266575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fea2646970667358221220b11410a891b70cfc06aa9f0fa6f0673d6f6f574e3531dddc05d22480242ee88664736f6c634300081c003300000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000cecb8f27f4200f3a0000000000000000000000000000000d294d9066c3f1997f21fc3114f8876c1c1344b6d000000000000000000000000e4c516a536a177d7a4f42ac6a84070f8c9820248
Deployed Bytecode
0x608060405260043610610253575f3560e01c8063833cde521161013f578063d8eaa36d116100b3578063f2fde38b11610078578063f2fde38b14610761578063f309fed914610780578063f597573f1461079f578063fb4aa0a1146107be578063fe9f676e146107dd578063ff6221bf146107fc575f5ffd5b8063d8eaa36d1461064c578063e18e84f91461065f578063e554e1ad14610674578063e697b5d814610693578063e6ab1434146106d1575f5ffd5b8063a9991bf311610104578063a9991bf314610583578063b08c7e6b146105a2578063b31ee5ae146105b7578063c2a0fb04146105d6578063cf13d91b146105eb578063d095362f1461062d575f5ffd5b8063833cde52146104e85780638561c3151461051f5780638da5cb5b1461053e5780639f9742c81461055b578063a43be57b1461056f575f5ffd5b80634b1da4a5116101d65780637010e3251161019b5780637010e3251461042d578063715018a614610442578063718a196214610456578063727f034214610475578063777e0d86146104a0578063813d4453146104b4575f5ffd5b80634b1da4a51461039c5780634d683674146103bb578063582b5723146103d0578063680f2e4f146103ef5780636fb4adff1461040e575f5ffd5b8063397643631161021c578063397643631461030657806341a0894d1461031b578063446d49da1461034757806346b6ef411461035c57806348bf4fcf14610387575f5ffd5b8062dde10e1461025757806304c98b2b1461029a578063070f5c09146102b0578063200dc0f6146102c45780632127fe04146102e7575b5f5ffd5b348015610262575f5ffd5b50610285610271366004611e8a565b60146020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156102a5575f5ffd5b506102ae61081b565b005b3480156102bb575f5ffd5b506102ae61084d565b3480156102cf575f5ffd5b506102d9600a5481565b604051908152602001610291565b3480156102f2575f5ffd5b506102d9610301366004611ea1565b610907565b348015610311575f5ffd5b506102d960045481565b348015610326575f5ffd5b5061033a610335366004611edc565b6109d6565b6040516102919190611ef5565b348015610352575f5ffd5b506102d960075481565b348015610367575f5ffd5b506102d9610376366004611edc565b60096020525f908152604090205481565b348015610392575f5ffd5b506102d960035481565b3480156103a7575f5ffd5b506102ae6103b6366004611e8a565b610a5f565b3480156103c6575f5ffd5b506102d960065481565b3480156103db575f5ffd5b506102ae6103ea366004611e8a565b610a7c565b3480156103fa575f5ffd5b506102ae610409366004611f4c565b610a9d565b348015610419575f5ffd5b506102ae610428366004611edc565b610b1e565b348015610438575f5ffd5b506102d9600d5481565b34801561044d575f5ffd5b506102ae610b93565b348015610461575f5ffd5b506102d9610470366004611ea1565b610ba6565b348015610480575f5ffd5b506102d961048f366004611edc565b60166020525f908152604090205481565b3480156104ab575f5ffd5b506102d9610bed565b3480156104bf575f5ffd5b506102d96104ce366004611edc565b6001600160a01b03165f9081526009602052604090205490565b3480156104f3575f5ffd5b50601754610507906001600160a01b031681565b6040516001600160a01b039091168152602001610291565b34801561052a575f5ffd5b506102ae610539366004611edc565b610c80565b348015610549575f5ffd5b506001546001600160a01b0316610507565b348015610566575f5ffd5b506102ae610cf5565b34801561057a575f5ffd5b506102ae610d98565b34801561058e575f5ffd5b506102ae61059d366004611f74565b610de9565b3480156105ad575f5ffd5b506102d9600b5481565b3480156105c2575f5ffd5b506102d96105d1366004611ea1565b610e05565b3480156105e1575f5ffd5b506102d9600c5481565b3480156105f6575f5ffd5b50600e54600f5460105460115461060d9392919084565b604080519485526020850193909352918301526060820152608001610291565b348015610638575f5ffd5b50610285610647366004611fa3565b610e8c565b61028561065a366004611edc565b61153d565b34801561066a575f5ffd5b506102d960025481565b34801561067f575f5ffd5b506102ae61068e366004611e8a565b611a9b565b34801561069e575f5ffd5b506106b26106ad366004611f4c565b611aa8565b604080516001600160a01b039093168352602083019190915201610291565b3480156106dc575f5ffd5b5061072a6106eb366004611e8a565b60156020525f90815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919060ff1687565b604080519788526020880196909652948601939093526060850191909152608084015260a0830152151560c082015260e001610291565b34801561076c575f5ffd5b506102ae61077b366004611edc565b611aea565b34801561078b575f5ffd5b506102d961079a366004611ea1565b611b60565b3480156107aa575f5ffd5b50601254610507906001600160a01b031681565b3480156107c9575f5ffd5b50600554610507906001600160a01b031681565b3480156107e8575f5ffd5b506102d96107f7366004611ea1565b611b81565b348015610807575f5ffd5b506102ae610816366004611f74565b611c12565b610823611c2e565b600280545f908152601560205260408082204290559154815220600601805460ff19166001179055565b610855611c2e565b6002545f9081526014602052604090205460ff16156108ac5760405162461bcd60e51b815260206004820152600e60248201526d105b1c9958591e481c185d5cd95960921b60448201526064015b60405180910390fd5b600280545f9081526014602052604090819020805460ff19166001179055905490517f927e6cd2dce24f32508868820cdc35f09d9de0f4b44e945114110125196fba9f906108fd9042815260200190565b60405180910390a2565b5f8281526015602052604081206002015481906109249084611fe1565b905060175f9054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610976573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061099a9190611ff8565b6109a590600a6120fb565b6109ad610bed565b6109b79190611fe1565b6004546109c49083611fe1565b6109ce9190612109565b949350505050565b6001600160a01b0381165f908152600860209081526040808320805482518185028101850190935280835260609492939192909184015b82821015610a54575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a0d565b505050509050919050565b610a67611c2e565b600280545f9081526015602052604090200155565b610a84611c2e565b600554610a9a906001600160a01b031682611c88565b50565b610aa5611c2e565b60055460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303815f875af1158015610af5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b199190612128565b505050565b610b26611c2e565b6001600160a01b038116610b715760405162461bcd60e51b8152602060048201526012602482015271496e76616c696420706172616d657465727360701b60448201526064016108a3565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b610b9b611c2e565b610ba45f611d5a565b565b5f5f600454600454610bb89190611fe1565b600354610bc3610bed565b610bcd9086611fe1565b610bd79190611fe1565b610be19190612109565b90506109ce8482611b60565b5f5f60135f9054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610c3f573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c639190612160565b505050915050806402540be400610c7a91906121ae565b92915050565b610c88611c2e565b6001600160a01b038116610cd35760405162461bcd60e51b81526020600482015260126024820152715a65726f20746f6b656e206164647265737360701b60448201526064016108a3565b601280546001600160a01b0319166001600160a01b0392909216919091179055565b610cfd611c2e565b6002545f9081526014602052604090205460ff16610d4a5760405162461bcd60e51b815260206004820152600a602482015269139bdd081c185d5cd95960b21b60448201526064016108a3565b600280545f9081526014602052604090819020805460ff19169055905490517ff608654a6d8e1785594639dd55babb61d7ae157382015f904a24224e50333b1d906108fd9042815260200190565b610da0611c2e565b6002545f908152601560205260409020600601805460ff19166001179055600280545f90815260156020526040808220426001909101559154815220600601805460ff19169055565b610df1611c2e565b600a93909355600b91909155600c55600d55565b5f600d548310610e3057601154606490610e1f9084611fe1565b610e299190612109565b9050610c7a565b600c548310610e4957601054606490610e1f9084611fe1565b600b548310610e6257600f54606490610e1f9084611fe1565b600a548310610c7a57600e54606490610e7b9084611fe1565b610e859190612109565b9392505050565b5f600254610e9c60025485611b60565b5f828152601560205260409020544210801590610ece57505f8281526015602052604090206006015460ff1615156001145b610f145760405162461bcd60e51b8152602060048201526017602482015276496e76616c69642074696d6520666f7220627579696e6760481b60448201526064016108a3565b5f81118015610f4457505f8281526015602052604090206003810154600490910154610f4091906121dd565b8111155b610f865760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b60448201526064016108a3565b5f610f9360025487611b60565b6002545f9081526014602052604090205490915060ff1615610fe85760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b60448201526064016108a3565b6002545f9081526015602052604090206006015460ff16151560011461104c5760405162461bcd60e51b8152602060048201526019602482015278141c995cd85b19481a5cc81b9bdd081858dd1a5d99481e595d603a1b60448201526064016108a3565b6002545f90815260156020526040902060048101546003909101546110729083906121f0565b11156110905760405162461bcd60e51b81526004016108a390612203565b6002545f90815260156020526040812060050180548892906110b39084906121f0565b90915550506001600160a01b038516158015906110d957506001600160a01b0385163314155b80156110fb57506001600160a01b0385165f9081526016602052604090205415155b156111b5575f6064600654836111119190611fe1565b61111b9190612109565b9050611128863383611dab565b60175460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611178573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119c9190612128565b508060075f8282546111ae91906121f0565b9091555050505b5f6111c08783610e05565b90506111cc81836121f0565b91508160155f60025481526020019081526020015f206003015f8282546111f391906121f0565b9091555050335f908152601660205260409020541561123557335f908152601660205260408120805484929061122a9084906121f0565b909155506112569050565b6040805160208082018352848252335f908152601690915291909120905190555b6012545f906001600160a01b031663dd62ed3e336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381865afa1580156112b2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112d69190612256565b9050808811156113325760405162461bcd60e51b815260206004820152602160248201527f4d616b65207375726520746f2061646420656e6f75676820616c6c6f77616e636044820152606560f81b60648201526084016108a3565b6012545f906001600160a01b0316336005546040516001600160a01b03928316602482015291166044820152606481018b905260840160408051601f198184030181529181526020820180516001600160e01b03166323b872dd60e01b1790525161139d919061226d565b5f604051808303815f865af19150503d805f81146113d6576040519150601f19603f3d011682016040523d82523d5f602084013e6113db565b606091505b50509050806114235760405162461bcd60e51b8152602060048201526014602482015273151bdad95b881c185e5b595b9d0819985a5b195960621b60448201526064016108a3565b60175460405163a9059cbb60e01b8152336004820152602481018690525f916001600160a01b03169063a9059cbb906044016020604051808303815f875af1158015611471573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114959190612128565b9050806114dc5760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b60448201526064016108a3565b60125460408051878152602081018d9052428183015290516001600160a01b039092169133917f4a179a798aae7b667a57d4131a74ac237388c46efd74875a1fa82f5bc9e4a6d5919081900360600190a35060019998505050505050505050565b5f60025461154d60025434610ba6565b5f82815260156020526040902054421080159061157f57505f8281526015602052604090206006015460ff1615156001145b6115c55760405162461bcd60e51b8152602060048201526017602482015276496e76616c69642074696d6520666f7220627579696e6760481b60448201526064016108a3565b5f811180156115f557505f82815260156020526040902060038101546004909101546115f191906121dd565b8111155b6116375760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081cd85b1948185b5bdd5b9d606a1b60448201526064016108a3565b61163f611e33565b6004545f9061164e9080611fe1565b600354611659610bed565b6116639034611fe1565b61166d9190611fe1565b6116779190612109565b90505f61168660025483611b60565b6002545f9081526015602052604090206004810154600390910154919250906116b09083906121f0565b11156116ce5760405162461bcd60e51b81526004016108a390612203565b6002545f9081526014602052604090205460ff16156117205760405162461bcd60e51b815260206004820152600e60248201526d141c995cd85b19481c185d5cd95960921b60448201526064016108a3565b6002545f9081526015602052604090206006015460ff1615156001146117845760405162461bcd60e51b8152602060048201526019602482015278141c995cd85b19481a5cc81b9bdd081858dd1a5d99481e595d603a1b60448201526064016108a3565b6001600160a01b038616158015906117a557506001600160a01b0386163314155b80156117c757506001600160a01b0386165f9081526016602052604090205415155b156118a9575f6064600654836117dd9190611fe1565b6117e79190612109565b90506117f4873383611dab565b60175460405163a9059cbb60e01b81526001600160a01b038981166004830152602482018490529091169063a9059cbb906044016020604051808303815f875af1158015611844573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118689190612128565b508060075f82825461187a91906121f0565b90915550506002545f90815260156020526040812060030180548392906118a29084906121f0565b9091555050505b5f6118b48383610e05565b90506118c081836121f0565b91508160155f60025481526020019081526020015f206003015f8282546118e791906121f0565b90915550506002545f908152601560205260408120600501805485929061190f9084906121f0565b9091555050335f908152601660205260409020541561195157335f90815260166020526040812080548492906119469084906121f0565b909155506119729050565b6040805160208082018352848252335f908152601690915291909120905190555b600554611988906001600160a01b031634611c88565b60175460405163a9059cbb60e01b8152336004820152602481018490525f916001600160a01b03169063a9059cbb906044016020604051808303815f875af11580156119d6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119fa9190612128565b905080611a415760405162461bcd60e51b8152602060048201526015602482015274151bdad95b881d1c985b9cd9995c8819985a5b1959605a1b60448201526064016108a3565b60408051848152346020820152428183015290515f9133917f4a179a798aae7b667a57d4131a74ac237388c46efd74875a1fa82f5bc9e4a6d59181900360600190a36001965050505050611a9460015f55565b5050919050565b611aa3611c2e565b600655565b6008602052815f5260405f208181548110611ac1575f80fd5b5f918252602090912060029091020180546001909101546001600160a01b039091169250905082565b611af2611c2e565b6001600160a01b038116611b575760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a3565b610a9a81611d5a565b6003545f83815260156020526040812060020154909190610e7b9084611fe1565b6017546040805163313ce56760e01b815290515f926001600160a01b03169163313ce5679160048083019260209291908290030181865afa158015611bc8573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bec9190611ff8565b611bf790600a6120fb565b5f84815260156020526040902060020154610e7b9084611fe1565b611c1a611c2e565b600e93909355600f91909155601055601155565b6001546001600160a01b03163314610ba45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016108a3565b80471015611cc65760405162461bcd60e51b815260206004820152600b60248201526a4c6f772062616c616e636560a81b60448201526064016108a3565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114611d0f576040519150601f19603f3d011682016040523d82523d5f602084013e611d14565b606091505b5050905080610b195760405162461bcd60e51b81526020600482015260126024820152711155120814185e5b595b9d0819985a5b195960721b60448201526064016108a3565b600180546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b038381165f8181526008602090815260408083208151808301835288871681528084018881528254600180820185559387528587209251600290910290920180546001600160a01b031916929098169190911787555195019490945591815260099091529081208054839290611e299084906121f0565b9091555050505050565b60025f5403611e845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016108a3565b60025f55565b5f60208284031215611e9a575f5ffd5b5035919050565b5f5f60408385031215611eb2575f5ffd5b50508035926020909101359150565b80356001600160a01b0381168114611ed7575f5ffd5b919050565b5f60208284031215611eec575f5ffd5b610e8582611ec1565b602080825282518282018190525f918401906040840190835b81811015611f4157835180516001600160a01b031684526020908101518185015290930192604090920191600101611f0e565b509095945050505050565b5f5f60408385031215611f5d575f5ffd5b611f6683611ec1565b946020939093013593505050565b5f5f5f5f60808587031215611f87575f5ffd5b5050823594602084013594506040840135936060013592509050565b5f5f60408385031215611fb4575f5ffd5b82359150611fc460208401611ec1565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610c7a57610c7a611fcd565b5f60208284031215612008575f5ffd5b815160ff81168114610e85575f5ffd5b6001815b60018411156120535780850481111561203757612037611fcd565b600184161561204557908102905b60019390931c92800261201c565b935093915050565b5f8261206957506001610c7a565b8161207557505f610c7a565b816001811461208b5760028114612095576120b1565b6001915050610c7a565b60ff8411156120a6576120a6611fcd565b50506001821b610c7a565b5060208310610133831016604e8410600b84101617156120d4575081810a610c7a565b6120e05f198484612018565b805f19048211156120f3576120f3611fcd565b029392505050565b5f610e8560ff84168361205b565b5f8261212357634e487b7160e01b5f52601260045260245ffd5b500490565b5f60208284031215612138575f5ffd5b81518015158114610e85575f5ffd5b805169ffffffffffffffffffff81168114611ed7575f5ffd5b5f5f5f5f5f60a08688031215612174575f5ffd5b61217d86612147565b602087015160408801516060890151929750909550935091506121a260808701612147565b90509295509295909350565b8082025f8212600160ff1b841416156121c9576121c9611fcd565b8181058314821517610c7a57610c7a611fcd565b81810381811115610c7a57610c7a611fcd565b80820180821115610c7a57610c7a611fcd565b60208082526033908201527f416d6f756e742073686f756c64206265206c657373207468616e20746f74616c604082015272081d1bdad95b9cc81cd95b1b08185b5bdd5b9d606a1b606082015260800190565b5f60208284031215612266575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fea2646970667358221220b11410a891b70cfc06aa9f0fa6f0673d6f6f574e3531dddc05d22480242ee88664736f6c634300081c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000003635c9adc5dea0000000000000000000000000000000000000000000000cecb8f27f4200f3a0000000000000000000000000000000d294d9066c3f1997f21fc3114f8876c1c1344b6d000000000000000000000000e4c516a536a177d7a4f42ac6a84070f8c9820248
-----Decoded View---------------
Arg [0] : _price (uint256): 1000000000000000000000
Arg [1] : _tokensToSell (uint256): 4000000000000000000000000000
Arg [2] : _fundReceiver (address): 0xd294D9066c3F1997F21FC3114f8876C1c1344b6d
Arg [3] : _saleToken (address): 0xe4C516A536A177d7A4F42ac6a84070f8C9820248
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000003635c9adc5dea00000
Arg [1] : 00000000000000000000000000000000000000000cecb8f27f4200f3a0000000
Arg [2] : 000000000000000000000000d294d9066c3f1997f21fc3114f8876c1c1344b6d
Arg [3] : 000000000000000000000000e4c516a536a177d7a4f42ac6a84070f8c9820248
Deployed Bytecode Sourcemap
19279:14772:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20918:38;;;;;;;;;;-1:-1:-1;20918:38:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;410:14:1;;403:22;385:41;;373:2;358:18;20918:38:0;;;;;;;;22209:149;;;;;;;;;;;;;:::i;:::-;;25064:199;;;;;;;;;;;;;:::i;20126:56::-;;;;;;;;;;;;;;;;;;;583:25:1;;;571:2;556:18;20126:56:0;437:177:1;32011:309:0;;;;;;;;;;-1:-1:-1;32011:309:0;;;;;:::i;:::-;;:::i;19409:40::-;;;;;;;;;;;;;;;;26486:127;;;;;;;;;;-1:-1:-1;26486:127:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19554:40::-;;;;;;;;;;;;;;;;19783:56;;;;;;;;;;-1:-1:-1;19783:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;19362:40;;;;;;;;;;;;;;;;22926:128;;;;;;;;;;-1:-1:-1;22926:128:0;;;;;:::i;:::-;;:::i;19492:33::-;;;;;;;;;;;;;;;;33923:125;;;;;;;;;;-1:-1:-1;33923:125:0;;;;;:::i;:::-;;:::i;33776:139::-;;;;;;;;;;-1:-1:-1;33776:139:0;;;;;:::i;:::-;;:::i;24526:166::-;;;;;;;;;;-1:-1:-1;24526:166:0;;;;;:::i;:::-;;:::i;20313:58::-;;;;;;;;;;;;;;;;5385:103;;;;;;;;;;;;;:::i;32857:290::-;;;;;;;;;;-1:-1:-1;32857:290:0;;;;;:::i;:::-;;:::i;21012:50::-;;;;;;;;;;-1:-1:-1;21012:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;25627:212;;;;;;;;;;;;;:::i;26621:141::-;;;;;;;;;;-1:-1:-1;26621:141:0;;;;;:::i;:::-;-1:-1:-1;;;;;26722:32:0;26695:7;26722:32;;;:21;:32;;;;;;;26621:141;21071:24;;;;;;;;;;-1:-1:-1;21071:24:0;;;;-1:-1:-1;;;;;21071:24:0;;;;;;-1:-1:-1;;;;;2585:32:1;;;2567:51;;2555:2;2540:18;21071:24:0;2421:203:1;24810:194:0;;;;;;;;;;-1:-1:-1;24810:194:0;;;;;:::i;:::-;;:::i;4737:87::-;;;;;;;;;;-1:-1:-1;4810:6:0;;-1:-1:-1;;;;;4810:6:0;4737:87;;25325:222;;;;;;;;;;;;;:::i;22366:271::-;;;;;;;;;;;;;:::i;23858:289::-;;;;;;;;;;-1:-1:-1;23858:289:0;;;;;:::i;:::-;;:::i;20188:54::-;;;;;;;;;;;;;;;;31271:580;;;;;;;;;;-1:-1:-1;31271:580:0;;;;;:::i;:::-;;:::i;20248:59::-;;;;;;;;;;;;;;;;20561:58;;;;;;;;;;-1:-1:-1;20561:58:0;;;;;;;;;;;;;;;;;;;3452:25:1;;;3508:2;3493:18;;3486:34;;;;3536:18;;;3529:34;3594:2;3579:18;;3572:34;3439:3;3424:19;20561:58:0;3221:391:1;26885:2224:0;;;;;;;;;;-1:-1:-1;26885:2224:0;;;;;:::i;:::-;;:::i;29180:1920::-;;;;;;:::i;:::-;;:::i;19331:24::-;;;;;;;;;;;;;;;;24261:137;;;;;;;;;;-1:-1:-1;24261:137:0;;;;;:::i;:::-;;:::i;19729:47::-;;;;;;;;;;-1:-1:-1;19729:47:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;4114:32:1;;;4096:51;;4178:2;4163:18;;4156:34;;;;4069:18;19729:47:0;3922:274:1;20963:42:0;;;;;;;;;;-1:-1:-1;20963:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4510:25:1;;;4566:2;4551:18;;4544:34;;;;4594:18;;;4587:34;;;;4652:2;4637:18;;4630:34;;;;4695:3;4680:19;;4673:35;4739:3;4724:19;;4717:35;4796:14;4789:22;4783:3;4768:19;;4761:51;4497:3;4482:19;20963:42:0;4201:617:1;5643:201:0;;;;;;;;;;-1:-1:-1;5643:201:0;;;;;:::i;:::-;;:::i;33300:197::-;;;;;;;;;;-1:-1:-1;33300:197:0;;;;;:::i;:::-;;:::i;20628:96::-;;;;;;;;;;-1:-1:-1;20628:96:0;;;;-1:-1:-1;;;;;20628:96:0;;;19456:27;;;;;;;;;;-1:-1:-1;19456:27:0;;;;-1:-1:-1;;;;;19456:27:0;;;32485:227;;;;;;;;;;-1:-1:-1;32485:227:0;;;;;:::i;:::-;;:::i;23295:299::-;;;;;;;;;;-1:-1:-1;23295:299:0;;;;;:::i;:::-;;:::i;22209:149::-;4623:13;:11;:13::i;:::-;22269:9:::1;::::0;;22261:18:::1;::::0;;;:7:::1;:18;::::0;;;;;22292:15:::1;22261:46:::0;;22326:9;;22318:18;;;:25:::1;;:32:::0;;-1:-1:-1;;22318:32:0::1;22346:4;22318:32;::::0;;22209:149::o;25064:199::-;4623:13;:11;:13::i;:::-;25134:9:::1;::::0;25127:17:::1;::::0;;;:6:::1;:17;::::0;;;;;::::1;;25126:18;25118:45;;;::::0;-1:-1:-1;;;25118:45:0;;5255:2:1;25118:45:0::1;::::0;::::1;5237:21:1::0;5294:2;5274:18;;;5267:30;-1:-1:-1;;;5313:18:1;;;5306:44;5367:18;;25118:45:0::1;;;;;;;;;25181:9;::::0;;25174:17:::1;::::0;;;:6:::1;:17;::::0;;;;;;:24;;-1:-1:-1;;25174:24:0::1;25194:4;25174:24;::::0;;25228:9;;25214:41;;::::1;::::0;::::1;::::0;25239:15:::1;583:25:1::0;;571:2;556:18;;437:177;25214:41:0::1;;;;;;;;25064:199::o:0;32011:309::-;32112:17;32176:12;;;:7;:12;;;;;:18;;;32112:17;;32167:27;;:6;:27;:::i;:::-;32147:48;;32290:9;;;;;;;;;-1:-1:-1;;;;;32290:9:0;-1:-1:-1;;;;;32275:34:0;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32271:40;;:2;:40;:::i;:::-;32249:19;:17;:19::i;:::-;:62;;;;:::i;:::-;32230:14;;32219:25;;:8;:25;:::i;:::-;32218:94;;;;:::i;:::-;32206:106;32011:309;-1:-1:-1;;;;32011:309:0:o;26486:127::-;-1:-1:-1;;;;;26585:20:0;;;;;;:9;:20;;;;;;;;26578:27;;;;;;;;;;;;;;;;;26548:17;;26578:27;;26585:20;;26578:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26578:27:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26486:127;;;:::o;22926:128::-;4623:13;:11;:13::i;:::-;23019:9:::1;::::0;;23011:18:::1;::::0;;;:7:::1;:18;::::0;;;;:24:::1;:33:::0;22926:128::o;33923:125::-;4623:13;:11;:13::i;:::-;34018:12:::1;::::0;34000:40:::1;::::0;-1:-1:-1;;;;;34018:12:0::1;34033:6:::0;34000:9:::1;:40::i;:::-;33923:125:::0;:::o;33776:139::-;4623:13;:11;:13::i;:::-;33886:12:::1;::::0;33862:45:::1;::::0;-1:-1:-1;;;33862:45:0;;-1:-1:-1;;;;;33886:12:0;;::::1;33862:45;::::0;::::1;4096:51:1::0;4163:18;;;4156:34;;;33862:23:0;;::::1;::::0;::::1;::::0;4069:18:1;;33862:45:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33776:139:::0;;:::o;24526:166::-;4623:13;:11;:13::i;:::-;-1:-1:-1;;;;;24607:21:0;::::1;24599:52;;;::::0;-1:-1:-1;;;24599:52:0;;8117:2:1;24599:52:0::1;::::0;::::1;8099:21:1::0;8156:2;8136:18;;;8129:30;-1:-1:-1;;;8175:18:1;;;8168:48;8233:18;;24599:52:0::1;7915:342:1::0;24599:52:0::1;24662:12;:22:::0;;-1:-1:-1;;;;;;24662:22:0::1;-1:-1:-1::0;;;;;24662:22:0;;;::::1;::::0;;;::::1;::::0;;24526:166::o;5385:103::-;4623:13;:11;:13::i;:::-;5450:30:::1;5477:1;5450:18;:30::i;:::-;5385:103::o:0;32857:290::-;32955:15;32988:17;33075:14;;33058;;:31;;;;:::i;:::-;33039:15;;33017:19;:17;:19::i;:::-;33008:28;;:6;:28;:::i;:::-;:46;;;;:::i;:::-;:82;;;;:::i;:::-;32988:102;;33111:28;33124:3;33129:9;33111:12;:28::i;25627:212::-;25677:7;25700:12;25722:22;;;;;;;;;-1:-1:-1;;;;;25722:22:0;-1:-1:-1;;;;;25722:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25697:65;;;;;;25782:5;25791:6;25782:16;;;;:::i;:::-;25773:26;25627:212;-1:-1:-1;;25627:212:0:o;24810:194::-;4623:13;:11;:13::i;:::-;-1:-1:-1;;;;;24894:25:0;::::1;24886:56;;;::::0;-1:-1:-1;;;24886:56:0;;9466:2:1;24886:56:0::1;::::0;::::1;9448:21:1::0;9505:2;9485:18;;;9478:30;-1:-1:-1;;;9524:18:1;;;9517:48;9582:18;;24886:56:0::1;9264:342:1::0;24886:56:0::1;24953:13;:43:::0;;-1:-1:-1;;;;;;24953:43:0::1;-1:-1:-1::0;;;;;24953:43:0;;;::::1;::::0;;;::::1;::::0;;24810:194::o;25325:222::-;4623:13;:11;:13::i;:::-;25419:9:::1;::::0;25412:17:::1;::::0;;;:6:::1;:17;::::0;;;;;::::1;;25404:40;;;::::0;-1:-1:-1;;;25404:40:0;;9813:2:1;25404:40:0::1;::::0;::::1;9795:21:1::0;9852:2;9832:18;;;9825:30;-1:-1:-1;;;9871:18:1;;;9864:40;9921:18;;25404:40:0::1;9611:334:1::0;25404:40:0::1;25462:9;::::0;;25475:5:::1;25455:17:::0;;;:6:::1;:17;::::0;;;;;;:25;;-1:-1:-1;;25455:25:0::1;::::0;;25512:9;;25496:43;;::::1;::::0;::::1;::::0;25523:15:::1;583:25:1::0;;571:2;556:18;;437:177;22366:271:0;4623:13;:11;:13::i;:::-;22446:9:::1;::::0;22438:18:::1;::::0;;;:7:::1;:18;::::0;;;;:25:::1;;:32:::0;;-1:-1:-1;;22438:32:0::1;22466:4;22438:32;::::0;;22549:9:::1;::::0;;22541:18:::1;::::0;;;:7:::1;:18;::::0;;;;;22570:15:::1;22541:26;::::0;;::::1;:44:::0;22604:9;;22596:18;;;:25:::1;;:33:::0;;-1:-1:-1;;22596:33:0::1;::::0;;22366:271::o;23858:289::-;4623:13;:11;:13::i;:::-;23986:17:::1;:27:::0;;;;24024:15:::1;:23:::0;;;;24058:19:::1;:31:::0;24100:18:::1;:29:::0;23858:289::o;31271:580::-;31360:14;31404:18;;31391:9;:31;31387:457;;31458:19;;31481:3;;31449:28;;:6;:28;:::i;:::-;31448:36;;;;:::i;:::-;31439:45;;31387:457;;;31528:19;;31515:9;:32;31511:333;;31583:20;;31607:3;;31574:29;;:6;:29;:::i;31511:333::-;31645:15;;31632:9;:28;31628:216;;31696:16;;31716:3;;31687:25;;:6;:25;:::i;31628:216::-;31754:17;;31741:9;:30;31737:107;;31807:11;:18;31829:3;;31798:27;;:6;:27;:::i;:::-;31797:35;;;;:::i;:::-;31788:44;31271:580;-1:-1:-1;;;31271:580:0:o;26885:2224::-;27050:4;26985:9;;26996:34;27009:9;;27020;26996:12;:34::i;:::-;25952:12;;;;:7;:12;;;;;:22;25933:15;:41;;;;:89;;-1:-1:-1;25995:12:0;;;;:7;:12;;;;;:19;;;;;:27;;:19;:27;25933:89;25911:162;;;;-1:-1:-1;;;25911:162:0;;10513:2:1;25911:162:0;;;10495:21:1;10552:2;10532:18;;;10525:30;-1:-1:-1;;;10571:18:1;;;10564:53;10634:18;;25911:162:0;10311:347:1;25911:162:0;26115:1;26106:6;:10;:67;;;;-1:-1:-1;26156:12:0;;;;:7;:12;;;;;:17;;;;26130:25;;;;;:43;;26156:17;26130:43;:::i;:::-;26120:6;:53;;26106:67;26084:136;;;;-1:-1:-1;;;26084:136:0;;10998:2:1;26084:136:0;;;10980:21:1;11037:2;11017:18;;;11010:30;-1:-1:-1;;;11056:18:1;;;11049:49;11115:18;;26084:136:0;10796:343:1;26084:136:0;27072:14:::1;27089:34;27102:9;;27113;27089:12;:34::i;:::-;27150:9;::::0;27143:17:::1;::::0;;;:6:::1;:17;::::0;;;;;27072:51;;-1:-1:-1;27143:17:0::1;;27142:18;27134:45;;;::::0;-1:-1:-1;;;27134:45:0;;11346:2:1;27134:45:0::1;::::0;::::1;11328:21:1::0;11385:2;11365:18;;;11358:30;-1:-1:-1;;;11404:18:1;;;11397:44;11458:18;;27134:45:0::1;11144:338:1::0;27134:45:0::1;27206:9;::::0;27198:18:::1;::::0;;;:7:::1;:18;::::0;;;;:25:::1;;::::0;::::1;;:33;;:25:::0;:33:::1;27190:71;;;::::0;-1:-1:-1;;;27190:71:0;;11689:2:1;27190:71:0::1;::::0;::::1;11671:21:1::0;11728:2;11708:18;;;11701:30;-1:-1:-1;;;11747:18:1;;;11740:55;11812:18;;27190:71:0::1;11487:349:1::0;27190:71:0::1;27324:9;::::0;27316:18:::1;::::0;;;:7:::1;:18;::::0;;;;:31:::1;::::0;::::1;::::0;27280:23:::1;::::0;;::::1;::::0;:32:::1;::::0;27306:6;;27280:32:::1;:::i;:::-;:67;;27272:140;;;;-1:-1:-1::0;;;27272:140:0::1;;;;;;;:::i;:::-;27435:9;::::0;27427:18:::1;::::0;;;:7:::1;:18;::::0;;;;:31:::1;;:44:::0;;27462:9;;27427:18;:44:::1;::::0;27462:9;;27427:44:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;27496:22:0;::::1;::::0;;::::1;::::0;:48:::1;;-1:-1:-1::0;;;;;;27522:22:0;::::1;27534:10;27522:22;;27496:48;:91;;;;-1:-1:-1::0;;;;;;27548:23:0;::::1;27586:1;27548:23:::0;;;:13:::1;:23;::::0;;;;:35;:39;;27496:91:::1;27492:350;;;27604:14;27649:3;27631:14;;27622:6;:23;;;;:::i;:::-;27621:31;;;;:::i;:::-;27604:48;;27667:41;27679:8;27689:10;27701:6;27667:11;:41::i;:::-;27730:9;::::0;27723:44:::1;::::0;-1:-1:-1;;;27723:44:0;;-1:-1:-1;;;;;4114:32:1;;;27723:44:0::1;::::0;::::1;4096:51:1::0;4163:18;;;4156:34;;;27730:9:0;;::::1;::::0;27723:26:::1;::::0;4069:18:1;;27723:44:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27811:6;27782:25;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;27492:350:0::1;27854:25;27882:42;27906:9;27917:6;27882:23;:42::i;:::-;27854:70:::0;-1:-1:-1;27956:26:0::1;27854:70:::0;27956:6;:26:::1;:::i;:::-;27947:35;;28020:6;27993:7;:18;28001:9;;27993:18;;;;;;;;;;;:23;;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;3471:10:0;28093:1:::1;28051:27:::0;;;:13:::1;:27;::::0;;;;:39;:43;28047:205:::1;;3471:10:::0;28111:27:::1;::::0;;;:13:::1;:27;::::0;;;;:49;;28154:6;;28111:27;:49:::1;::::0;28154:6;;28111:49:::1;:::i;:::-;::::0;;;-1:-1:-1;28047:205:0::1;::::0;-1:-1:-1;28047:205:0::1;;28223:17;::::0;;::::1;::::0;;::::1;::::0;;;;;3471:10;-1:-1:-1;28193:27:0;;;:13:::1;:27:::0;;;;;;;:47;;;;28047:205:::1;28286:13;::::0;28263:20:::1;::::0;-1:-1:-1;;;;;28286:13:0::1;:23;3471:10:::0;28286:89:::1;::::0;-1:-1:-1;;;;;;28286:89:0::1;::::0;;;;;;-1:-1:-1;;;;;12583:32:1;;;28286:89:0::1;::::0;::::1;12565:51:1::0;28359:4:0::1;12632:18:1::0;;;12625:60;12538:18;;28286:89:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28263:112;;28407:12;28394:9;:25;;28386:71;;;::::0;-1:-1:-1;;;28386:71:0;;13133:2:1;28386:71:0::1;::::0;::::1;13115:21:1::0;13172:2;13152:18;;;13145:30;13211:34;13191:18;;;13184:62;-1:-1:-1;;;13262:18:1;;;13255:31;13303:19;;28386:71:0::1;12931:397:1::0;28386:71:0::1;28495:13;::::0;28469:12:::1;::::0;-1:-1:-1;;;;;28495:13:0::1;3471:10:::0;28660:12:::1;::::0;28529:186:::1;::::0;-1:-1:-1;;;;;13553:32:1;;;28529:186:0::1;::::0;::::1;13535:51:1::0;28660:12:0;::::1;13602:18:1::0;;;13595:60;13671:18;;;13664:34;;;13508:18;;28529:186:0::1;::::0;;-1:-1:-1;;28529:186:0;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;28529:186:0::1;-1:-1:-1::0;;;28529:186:0::1;::::0;;28487:239;::::1;::::0;28529:186;28487:239:::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28468:258;;;28745:7;28737:40;;;::::0;-1:-1:-1;;;28737:40:0;;14217:2:1;28737:40:0::1;::::0;::::1;14199:21:1::0;14256:2;14236:18;;;14229:30;-1:-1:-1;;;14275:18:1;;;14268:50;14335:18;;28737:40:0::1;14015:344:1::0;28737:40:0::1;28809:9;::::0;28802:46:::1;::::0;-1:-1:-1;;;28802:46:0;;28829:10:::1;28802:46;::::0;::::1;4096:51:1::0;4163:18;;;4156:34;;;28788:11:0::1;::::0;-1:-1:-1;;;;;28809:9:0::1;::::0;28802:26:::1;::::0;4069:18:1;;28802:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28788:60;;28867:6;28859:40;;;::::0;-1:-1:-1;;;28859:40:0;;14566:2:1;28859:40:0::1;::::0;::::1;14548:21:1::0;14605:2;14585:18;;;14578:30;-1:-1:-1;;;14624:18:1;;;14617:51;14685:18;;28859:40:0::1;14364:345:1::0;28859:40:0::1;28979:13;::::0;28917:162:::1;::::0;;14916:25:1;;;14972:2;14957:18;;14950:34;;;29053:15:0::1;15000:18:1::0;;;14993:34;28917:162:0;;-1:-1:-1;;;;;28979:13:0;;::::1;::::0;3471:10;;28917:162:::1;::::0;;;;;14904:2:1;28917:162:0;;::::1;-1:-1:-1::0;29097:4:0::1;::::0;26885:2224;-1:-1:-1;;;;;;;;;26885:2224:0:o;29180:1920::-;29363:4;29277:9;;29288:33;29300:9;;29311;29288:11;:33::i;:::-;25952:12;;;;:7;:12;;;;;:22;25933:15;:41;;;;:89;;-1:-1:-1;25995:12:0;;;;:7;:12;;;;;:19;;;;;:27;;:19;:27;25933:89;25911:162;;;;-1:-1:-1;;;25911:162:0;;10513:2:1;25911:162:0;;;10495:21:1;10552:2;10532:18;;;10525:30;-1:-1:-1;;;10571:18:1;;;10564:53;10634:18;;25911:162:0;10311:347:1;25911:162:0;26115:1;26106:6;:10;:67;;;;-1:-1:-1;26156:12:0;;;;:7;:12;;;;;:17;;;;26130:25;;;;;:43;;26156:17;26130:43;:::i;:::-;26120:6;:53;;26106:67;26084:136;;;;-1:-1:-1;;;26084:136:0;;10998:2:1;26084:136:0;;;10980:21:1;11037:2;11017:18;;;11010:30;-1:-1:-1;;;11056:18:1;;;11049:49;11115:18;;26084:136:0;10796:343:1;26084:136:0;2196:21:::1;:19;:21::i;:::-;29487:14:::2;::::0;29395:17:::2;::::0;29470:31:::2;::::0;29487:14;29470:31:::2;:::i;:::-;29450:15;;29428:19;:17;:19::i;:::-;29416:31;::::0;:9:::2;:31;:::i;:::-;:49;;;;:::i;:::-;29415:87;;;;:::i;:::-;29395:107;;29513:14;29530:34;29543:9;;29554;29530:12;:34::i;:::-;29627:9;::::0;29619:18:::2;::::0;;;:7:::2;:18;::::0;;;;:31:::2;::::0;::::2;::::0;29583:23:::2;::::0;;::::2;::::0;29513:51;;-1:-1:-1;29619:31:0;29583:32:::2;::::0;29513:51;;29583:32:::2;:::i;:::-;:67;;29575:140;;;;-1:-1:-1::0;;;29575:140:0::2;;;;;;;:::i;:::-;29744:9;::::0;29737:17:::2;::::0;;;:6:::2;:17;::::0;;;;;::::2;;29736:18;29728:45;;;::::0;-1:-1:-1;;;29728:45:0;;11346:2:1;29728:45:0::2;::::0;::::2;11328:21:1::0;11385:2;11365:18;;;11358:30;-1:-1:-1;;;11404:18:1;;;11397:44;11458:18;;29728:45:0::2;11144:338:1::0;29728:45:0::2;29800:9;::::0;29792:18:::2;::::0;;;:7:::2;:18;::::0;;;;:25:::2;;::::0;::::2;;:33;;:25:::0;:33:::2;29784:71;;;::::0;-1:-1:-1;;;29784:71:0;;11689:2:1;29784:71:0::2;::::0;::::2;11671:21:1::0;11728:2;11708:18;;;11701:30;-1:-1:-1;;;11747:18:1;;;11740:55;11812:18;;29784:71:0::2;11487:349:1::0;29784:71:0::2;-1:-1:-1::0;;;;;29872:22:0;::::2;::::0;;::::2;::::0;:48:::2;;-1:-1:-1::0;;;;;;29898:22:0;::::2;29910:10;29898:22;;29872:48;:91;;;;-1:-1:-1::0;;;;;;29924:23:0;::::2;29962:1;29924:23:::0;;;:13:::2;:23;::::0;;;;:35;:39;;29872:91:::2;29868:396;;;29980:14;30025:3;30007:14;;29998:6;:23;;;;:::i;:::-;29997:31;;;;:::i;:::-;29980:48;;30043:41;30055:8;30065:10;30077:6;30043:11;:41::i;:::-;30106:9;::::0;30099:44:::2;::::0;-1:-1:-1;;;30099:44:0;;-1:-1:-1;;;;;4114:32:1;;;30099:44:0::2;::::0;::::2;4096:51:1::0;4163:18;;;4156:34;;;30106:9:0;;::::2;::::0;30099:26:::2;::::0;4069:18:1;;30099:44:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30187:6;30158:25;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;30227:9:0::2;::::0;30219:18:::2;::::0;;;:7:::2;:18;::::0;;;;:23:::2;;:33:::0;;30246:6;;30219:18;:33:::2;::::0;30246:6;;30219:33:::2;:::i;:::-;::::0;;;-1:-1:-1;;;29868:396:0::2;30276:25;30304:42;30328:9;30339:6;30304:23;:42::i;:::-;30276:70:::0;-1:-1:-1;30378:26:0::2;30276:70:::0;30378:6;:26:::2;:::i;:::-;30369:35;;30444:6;30417:7;:18;30425:9;;30417:18;;;;;;;;;;;:23;;;:33;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;30469:9:0::2;::::0;30461:18:::2;::::0;;;:7:::2;:18;::::0;;;;:31:::2;;:44:::0;;30496:9;;30461:18;:44:::2;::::0;30496:9;;30461:44:::2;:::i;:::-;::::0;;;-1:-1:-1;;3471:10:0;30564:1:::2;30522:27:::0;;;:13:::2;:27;::::0;;;;:39;:43;30518:205:::2;;3471:10:::0;30582:27:::2;::::0;;;:13:::2;:27;::::0;;;;:49;;30625:6;;30582:27;:49:::2;::::0;30625:6;;30582:49:::2;:::i;:::-;::::0;;;-1:-1:-1;30518:205:0::2;::::0;-1:-1:-1;30518:205:0::2;;30694:17;::::0;;::::2;::::0;;::::2;::::0;;;;;3471:10;-1:-1:-1;30664:27:0;;;:13:::2;:27:::0;;;;;;;:47;;;;30518:205:::2;30753:12;::::0;30735:43:::2;::::0;-1:-1:-1;;;;;30753:12:0::2;30768:9;30735;:43::i;:::-;30812:9;::::0;30805:46:::2;::::0;-1:-1:-1;;;30805:46:0;;30832:10:::2;30805:46;::::0;::::2;4096:51:1::0;4163:18;;;4156:34;;;30791:11:0::2;::::0;-1:-1:-1;;;;;30812:9:0::2;::::0;30805:26:::2;::::0;4069:18:1;;30805:46:0::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30791:60;;30870:6;30862:40;;;::::0;-1:-1:-1;;;30862:40:0;;14566:2:1;30862:40:0::2;::::0;::::2;14548:21:1::0;14605:2;14585:18;;;14578:30;-1:-1:-1;;;14624:18:1;;;14617:51;14685:18;;30862:40:0::2;14364:345:1::0;30862:40:0::2;30920:150;::::0;;14916:25:1;;;31020:9:0::2;14972:2:1::0;14957:18;;14950:34;31044:15:0::2;15000:18:1::0;;;14993:34;30920:150:0;;-1:-1:-1;;3471:10:0;;30920:150:::2;::::0;;;;14904:2:1;30920:150:0;;::::2;31088:4;31081:11;;;;;;2240:20:::1;1634:1:::0;2760:7;:22;2577:213;2240:20:::1;29180:1920:::0;;;;;:::o;24261:137::-;4623:13;:11;:13::i;:::-;24348:14:::1;:32:::0;24261:137::o;19729:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19729:47:0;;;;-1:-1:-1;19729:47:0;-1:-1:-1;19729:47:0;:::o;5643:201::-;4623:13;:11;:13::i;:::-;-1:-1:-1;;;;;5732:22:0;::::1;5724:73;;;::::0;-1:-1:-1;;;5724:73:0;;15240:2:1;5724:73:0::1;::::0;::::1;15222:21:1::0;15279:2;15259:18;;;15252:30;15318:34;15298:18;;;15291:62;-1:-1:-1;;;15369:18:1;;;15362:36;15415:19;;5724:73:0::1;15038:402:1::0;5724:73:0::1;5808:28;5827:8;5808:18;:28::i;33300:197::-:0;33474:15;;33399;33452:12;;;:7;:12;;;;;:18;;;33399:15;;33474;33443:27;;:6;:27;:::i;32485:227::-;32683:9;;32668:36;;;-1:-1:-1;;;32668:36:0;;;;32587:16;;-1:-1:-1;;;;;32683:9:0;;32668:34;;:36;;;;;;;;;;;;;;32683:9;32668:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32664:40;;:2;:40;:::i;:::-;32642:12;;;;:7;:12;;;;;:18;;;32633:27;;:6;:27;:::i;23295:299::-;4623:13;:11;:13::i;:::-;23429:11:::1;:28:::0;;;;23468:16;:24;;;;23503:20;:32;23546:19;:30;23295:299::o;4902:132::-;4810:6;;-1:-1:-1;;;;;4810:6:0;3471:10;4966:23;4958:68;;;;-1:-1:-1;;;4958:68:0;;15647:2:1;4958:68:0;;;15629:21:1;;;15666:18;;;15659:30;15725:34;15705:18;;;15698:62;15777:18;;4958:68:0;15445:356:1;33505:257:0;33620:6;33595:21;:31;;33587:55;;;;-1:-1:-1;;;33587:55:0;;16008:2:1;33587:55:0;;;15990:21:1;16047:2;16027:18;;;16020:30;-1:-1:-1;;;16066:18:1;;;16059:41;16117:18;;33587:55:0;15806:335:1;33587:55:0;33654:12;33672:9;-1:-1:-1;;;;;33672:14:0;33694:6;33672:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33653:52;;;33724:7;33716:38;;;;-1:-1:-1;;;33716:38:0;;16558:2:1;33716:38:0;;;16540:21:1;16597:2;16577:18;;;16570:30;-1:-1:-1;;;16616:18:1;;;16609:48;16674:18;;33716:38:0;16356:342:1;6004:191:0;6097:6;;;-1:-1:-1;;;;;6114:17:0;;;-1:-1:-1;;;;;;6114:17:0;;;;;;;6147:40;;6097:6;;;6114:17;6097:6;;6147:40;;6078:16;;6147:40;6067:128;6004:191;:::o;26248:230::-;-1:-1:-1;;;;;26350:20:0;;;;;;;:9;:20;;;;;;;;26376:33;;;;;;;;;;;;;;;;;;26350:60;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;26350:60:0;;;;;;;;;;;;;;;;;;26421:32;;;:21;:32;;;;;;:49;;26376:33;;26350:20;26421:49;;26376:33;;26421:49;:::i;:::-;;;;-1:-1:-1;;;;;26248:230:0:o;2276:293::-;1678:1;2410:7;;:19;2402:63;;;;-1:-1:-1;;;2402:63:0;;16905:2:1;2402:63:0;;;16887:21:1;16944:2;16924:18;;;16917:30;16983:33;16963:18;;;16956:61;17034:18;;2402:63:0;16703:355:1;2402:63:0;1678:1;2543:7;:18;2276:293::o;14:226:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;187:23:1;;14:226;-1:-1:-1;14:226:1:o;619:346::-;687:6;695;748:2;736:9;727:7;723:23;719:32;716:52;;;764:1;761;754:12;716:52;-1:-1:-1;;809:23:1;;;929:2;914:18;;;901:32;;-1:-1:-1;619:346:1:o;970:173::-;1038:20;;-1:-1:-1;;;;;1087:31:1;;1077:42;;1067:70;;1133:1;1130;1123:12;1067:70;970:173;;;:::o;1148:186::-;1207:6;1260:2;1248:9;1239:7;1235:23;1231:32;1228:52;;;1276:1;1273;1266:12;1228:52;1299:29;1318:9;1299:29;:::i;1339:772::-;1579:2;1591:21;;;1661:13;;1564:18;;;1683:22;;;1531:4;;1762:15;;;1736:2;1721:18;;;1531:4;1805:280;1819:6;1816:1;1813:13;1805:280;;;1878:13;;1920:9;;-1:-1:-1;;;;;1916:35:1;1904:48;;2000:2;1992:11;;;1986:18;1972:12;;;1965:40;2060:15;;;;2034:2;2025:12;;;;1948:1;1834:9;1805:280;;;-1:-1:-1;2102:3:1;;1339:772;-1:-1:-1;;;;;1339:772:1:o;2116:300::-;2184:6;2192;2245:2;2233:9;2224:7;2220:23;2216:32;2213:52;;;2261:1;2258;2251:12;2213:52;2284:29;2303:9;2284:29;:::i;:::-;2274:39;2382:2;2367:18;;;;2354:32;;-1:-1:-1;;;2116:300:1:o;2629:587::-;2715:6;2723;2731;2739;2792:3;2780:9;2771:7;2767:23;2763:33;2760:53;;;2809:1;2806;2799:12;2760:53;-1:-1:-1;;2854:23:1;;;2974:2;2959:18;;2946:32;;-1:-1:-1;3077:2:1;3062:18;;3049:32;;3180:2;3165:18;3152:32;;-1:-1:-1;2629:587:1;-1:-1:-1;2629:587:1:o;3617:300::-;3685:6;3693;3746:2;3734:9;3725:7;3721:23;3717:32;3714:52;;;3762:1;3759;3752:12;3714:52;3807:23;;;-1:-1:-1;3873:38:1;3907:2;3892:18;;3873:38;:::i;:::-;3863:48;;3617:300;;;;;:::o;5396:127::-;5457:10;5452:3;5448:20;5445:1;5438:31;5488:4;5485:1;5478:15;5512:4;5509:1;5502:15;5528:168;5601:9;;;5632;;5649:15;;;5643:22;;5629:37;5619:71;;5670:18;;:::i;5701:273::-;5769:6;5822:2;5810:9;5801:7;5797:23;5793:32;5790:52;;;5838:1;5835;5828:12;5790:52;5870:9;5864:16;5920:4;5913:5;5909:16;5902:5;5899:27;5889:55;;5940:1;5937;5930:12;5979:375;6067:1;6085:5;6099:249;6120:1;6110:8;6107:15;6099:249;;;6170:4;6165:3;6161:14;6155:4;6152:24;6149:50;;;6179:18;;:::i;:::-;6229:1;6219:8;6215:16;6212:49;;;6243:16;;;;6212:49;6326:1;6322:16;;;;;6282:15;;6099:249;;;5979:375;;;;;;:::o;6359:902::-;6408:5;6438:8;6428:80;;-1:-1:-1;6479:1:1;6493:5;;6428:80;6527:4;6517:76;;-1:-1:-1;6564:1:1;6578:5;;6517:76;6609:4;6627:1;6622:59;;;;6695:1;6690:174;;;;6602:262;;6622:59;6652:1;6643:10;;6666:5;;;6690:174;6727:3;6717:8;6714:17;6711:43;;;6734:18;;:::i;:::-;-1:-1:-1;;6790:1:1;6776:16;;6849:5;;6602:262;;6948:2;6938:8;6935:16;6929:3;6923:4;6920:13;6916:36;6910:2;6900:8;6897:16;6892:2;6886:4;6883:12;6879:35;6876:77;6873:203;;;-1:-1:-1;6985:19:1;;;7061:5;;6873:203;7108:42;-1:-1:-1;;7133:8:1;7127:4;7108:42;:::i;:::-;7186:6;7182:1;7178:6;7174:19;7165:7;7162:32;7159:58;;;7197:18;;:::i;:::-;7235:20;;6359:902;-1:-1:-1;;;6359:902:1:o;7266:140::-;7324:5;7353:47;7394:4;7384:8;7380:19;7374:4;7353:47;:::i;7411:217::-;7451:1;7477;7467:132;;7521:10;7516:3;7512:20;7509:1;7502:31;7556:4;7553:1;7546:15;7584:4;7581:1;7574:15;7467:132;-1:-1:-1;7613:9:1;;7411:217::o;7633:277::-;7700:6;7753:2;7741:9;7732:7;7728:23;7724:32;7721:52;;;7769:1;7766;7759:12;7721:52;7801:9;7795:16;7854:5;7847:13;7840:21;7833:5;7830:32;7820:60;;7876:1;7873;7866:12;8262:179;8340:13;;8393:22;8382:34;;8372:45;;8362:73;;8431:1;8428;8421:12;8446:571;8549:6;8557;8565;8573;8581;8634:3;8622:9;8613:7;8609:23;8605:33;8602:53;;;8651:1;8648;8641:12;8602:53;8674:39;8703:9;8674:39;:::i;:::-;8753:2;8738:18;;8732:25;8819:2;8804:18;;8798:25;8913:2;8898:18;;8892:25;8664:49;;-1:-1:-1;8732:25:1;;-1:-1:-1;8798:25:1;-1:-1:-1;8892:25:1;-1:-1:-1;8962:49:1;9006:3;8991:19;;8962:49;:::i;:::-;8952:59;;8446:571;;;;;;;;:::o;9022:237::-;9094:9;;;9061:7;9119:9;;-1:-1:-1;;;9130:18:1;;9115:34;9112:60;;;9152:18;;:::i;:::-;9225:1;9216:7;9211:16;9208:1;9205:23;9201:1;9194:9;9191:38;9181:72;;9233:18;;:::i;10663:128::-;10730:9;;;10751:11;;;10748:37;;;10765:18;;:::i;11841:125::-;11906:9;;;11927:10;;;11924:36;;;11940:18;;:::i;11971:415::-;12173:2;12155:21;;;12212:2;12192:18;;;12185:30;12251:34;12246:2;12231:18;;12224:62;-1:-1:-1;;;12317:2:1;12302:18;;12295:49;12376:3;12361:19;;11971:415::o;12696:230::-;12766:6;12819:2;12807:9;12798:7;12794:23;12790:32;12787:52;;;12835:1;12832;12825:12;12787:52;-1:-1:-1;12880:16:1;;12696:230;-1:-1:-1;12696:230:1:o;13709:301::-;13838:3;13876:6;13870:13;13922:6;13915:4;13907:6;13903:17;13898:3;13892:37;13984:1;13948:16;;13973:13;;;-1:-1:-1;13948:16:1;13709:301;-1:-1:-1;13709:301:1:o
Swarm Source
ipfs://b11410a891b70cfc06aa9f0fa6f0673d6f6f574e3531dddc05d22480242ee886
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.