More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 169 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Update Time | 21336895 | 15 days ago | IN | 0 ETH | 0.00095812 | ||||
Set Stage | 21336894 | 15 days ago | IN | 0 ETH | 0.00111905 | ||||
Buy Tokens With ... | 21270366 | 24 days ago | IN | 0.05 ETH | 0.00107639 | ||||
Buy Tokens With ... | 21214709 | 32 days ago | IN | 0.0005 ETH | 0.00104528 | ||||
Buy Tokens With ... | 21214709 | 32 days ago | IN | 0.0005 ETH | 0.00160482 | ||||
Update Time | 21193691 | 35 days ago | IN | 0 ETH | 0.00094101 | ||||
Set Stage | 21193691 | 35 days ago | IN | 0 ETH | 0.00111093 | ||||
Buy Tokens With ... | 21115842 | 46 days ago | IN | 0.02 ETH | 0.00137054 | ||||
Update Time | 21050303 | 55 days ago | IN | 0 ETH | 0.00019694 | ||||
Set Stage | 21050302 | 55 days ago | IN | 0 ETH | 0.00023693 | ||||
Buy Tokens With ... | 20994249 | 63 days ago | IN | 0.12 ETH | 0.00291317 | ||||
Buy Tokens With ... | 20963205 | 67 days ago | IN | 0.00655 ETH | 0.00121593 | ||||
Buy Tokens With ... | 20963204 | 67 days ago | IN | 0.00655 ETH | 0.00154293 | ||||
Buy Tokens With ... | 20942974 | 70 days ago | IN | 0.1 ETH | 0.00678151 | ||||
Update Time | 20906981 | 75 days ago | IN | 0 ETH | 0.00032762 | ||||
Set Stage | 20906980 | 75 days ago | IN | 0 ETH | 0.00039144 | ||||
Buy Tokens With ... | 20901708 | 76 days ago | IN | 0.0095 ETH | 0.0004247 | ||||
Buy Tokens With ... | 20880135 | 79 days ago | IN | 0.0886 ETH | 0.00175713 | ||||
Buy Tokens With ... | 20880128 | 79 days ago | IN | 0.0886 ETH | 0.00237089 | ||||
Buy Tokens With ... | 20860759 | 82 days ago | IN | 0.018 ETH | 0.0008014 | ||||
Buy Tokens With ... | 20845034 | 84 days ago | IN | 0.01059 ETH | 0.00076116 | ||||
Buy Tokens With ... | 20817494 | 88 days ago | IN | 0.00428 ETH | 0.0014606 | ||||
Set Stage | 20763645 | 95 days ago | IN | 0 ETH | 0.00089509 | ||||
Update Time | 20763643 | 95 days ago | IN | 0 ETH | 0.00070382 | ||||
Set Stage | 20763641 | 95 days ago | IN | 0 ETH | 0.00085954 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
21270366 | 24 days ago | 0.05 ETH | ||||
21214709 | 32 days ago | 0.0005 ETH | ||||
21214709 | 32 days ago | 0.0005 ETH | ||||
21115842 | 46 days ago | 0.02 ETH | ||||
20994249 | 63 days ago | 0.12 ETH | ||||
20963205 | 67 days ago | 0.00655 ETH | ||||
20963204 | 67 days ago | 0.00655 ETH | ||||
20942974 | 70 days ago | 0.1 ETH | ||||
20901708 | 76 days ago | 0.0095 ETH | ||||
20880135 | 79 days ago | 0.0886 ETH | ||||
20880128 | 79 days ago | 0.0886 ETH | ||||
20860759 | 82 days ago | 0.018 ETH | ||||
20845034 | 84 days ago | 0.01059 ETH | ||||
20817494 | 88 days ago | 0.00428 ETH | ||||
20751198 | 97 days ago | 0.0074 ETH | ||||
20746194 | 98 days ago | 0.003 ETH | ||||
20746002 | 98 days ago | 0.038 ETH | ||||
20738955 | 99 days ago | 0.012 ETH | ||||
20721994 | 101 days ago | 0.003 ETH | ||||
20635425 | 113 days ago | 0.003 ETH | ||||
20537932 | 127 days ago | 0.008 ETH | ||||
20517228 | 130 days ago | 0.009 ETH | ||||
20517219 | 130 days ago | 0.007 ETH | ||||
20470180 | 136 days ago | 0.25 ETH | ||||
20441361 | 140 days ago | 0.0215 ETH |
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
Presale
Compiler Version
v0.8.24+commit.e11b9ed9
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-03-31 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.24; library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } contract Ownable is Context { using SafeMath for uint256; address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _transferOwnership(_msgSender()); } modifier onlyOwner() { _checkOwner(); _; } function owner() public view virtual returns (address) { return _owner; } function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address from, address to, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev The ETH balance of the account is not enough to perform the operation. */ error AddressInsufficientBalance(address account); /** * @dev There's no code at `target` (it is not a contract). */ error AddressEmptyCode(address target); /** * @dev A call to an address target failed. The target may have reverted. */ error FailedInnerCall(); /** * @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://consensys.net/diligence/blog/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.8.20/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { if (address(this).balance < amount) { revert AddressInsufficientBalance(address(this)); } (bool success, ) = recipient.call{value: amount}(""); if (!success) { revert FailedInnerCall(); } } /** * @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 or custom error, it is bubbled * up by this function (like regular Solidity function calls). However, if * the call reverted with no returned reason, this function reverts with a * {FailedInnerCall} error. * * 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. */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0); } /** * @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`. */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { if (address(this).balance < value) { revert AddressInsufficientBalance(address(this)); } (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and reverts if the target * was not a contract or bubbling up the revert reason (falling back to {FailedInnerCall}) in case of an * unsuccessful call. */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata ) internal view returns (bytes memory) { if (!success) { _revert(returndata); } else { // only check if target is a contract if the call was successful and the return data is empty // otherwise we already know that it was a contract if (returndata.length == 0 && target.code.length == 0) { revert AddressEmptyCode(target); } return returndata; } } /** * @dev Tool to verify that a low level call was successful, and reverts if it wasn't, either by bubbling the * revert reason or with a default {FailedInnerCall} error. */ function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) { if (!success) { _revert(returndata); } else { return returndata; } } /** * @dev Reverts with returndata if present. Otherwise reverts with {FailedInnerCall}. */ function _revert(bytes memory returndata) 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 FailedInnerCall(); } } } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; /** * @dev An operation with an ERC20 token failed. */ error SafeERC20FailedOperation(address token); /** * @dev Indicates a failed `decreaseAllowance` request. */ error SafeERC20FailedDecreaseAllowance( address spender, uint256 currentAllowance, uint256 requestedDecrease ); /** * @dev Transfer `value` amount of `token` from the calling contract to `to`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value))); } /** * @dev Transfer `value` amount of `token` from `from` to `to`, spending the approval given by `from` to the * calling contract. If `token` returns no value, non-reverting calls are assumed to be successful. */ function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn( token, abi.encodeCall(token.transferFrom, (from, to, value)) ); } /** * @dev Increase the calling contract's allowance toward `spender` by `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. */ function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 oldAllowance = token.allowance(address(this), spender); forceApprove(token, spender, oldAllowance + value); } /** * @dev Decrease the calling contract's allowance toward `spender` by `requestedDecrease`. If `token` returns no * value, non-reverting calls are assumed to be successful. */ function safeDecreaseAllowance( IERC20 token, address spender, uint256 requestedDecrease ) internal { unchecked { uint256 currentAllowance = token.allowance(address(this), spender); if (currentAllowance < requestedDecrease) { revert SafeERC20FailedDecreaseAllowance( spender, currentAllowance, requestedDecrease ); } forceApprove(token, spender, currentAllowance - requestedDecrease); } } /** * @dev Set the calling contract's allowance toward `spender` to `value`. If `token` returns no value, * non-reverting calls are assumed to be successful. Meant to be used with tokens that require the approval * to be set to zero before setting it to a non-zero value, such as USDT. */ function forceApprove( IERC20 token, address spender, uint256 value ) internal { bytes memory approvalCall = abi.encodeCall( token.approve, (spender, value) ); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn( token, abi.encodeCall(token.approve, (spender, 0)) ); _callOptionalReturn(token, approvalCall); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address-functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data); if (returndata.length != 0 && !abi.decode(returndata, (bool))) { revert SafeERC20FailedOperation(address(token)); } } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). * * This is a variant of {_callOptionalReturn} that silents catches all reverts and returns a bool instead. */ function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We cannot use {Address-functionCall} here since this should return false // and not revert is the subcall reverts. (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0; } } /** * @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; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); 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 if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // 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; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } interface AggregatorV3Interface { function latestRoundData() external view returns ( uint80 roundId, int256 answer, uint256 startedAt, uint256 updatedAt, uint80 answeredInRound ); } contract Presale is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; uint256 public currentStage; uint256 public startTimeSale; uint256 public endTimeSale; uint256 public tokenTotalSold; struct UserInfo { uint256 totalAmount; uint256 bonusAmount; } struct Stage { uint256 duration; uint256 usdRate; uint256 bonusRate; uint256 preSupply; uint256 tokenSold; } Stage[] public stages; IERC20 public token = IERC20(0x73315713981a49dcA31af9Eda98EcFFD49E46724); IERC20 public usdtToken = IERC20(0xdAC17F958D2ee523a2206206994597C13D831ec7); IERC20 public usdcToken = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48); AggregatorV3Interface public priceFeedETH = AggregatorV3Interface(0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419); AggregatorV3Interface public priceFeedUSDT = AggregatorV3Interface(0x3E7d1eAB13ad0104d2750B8863b489D65364e32D); AggregatorV3Interface public priceFeedUSDC = AggregatorV3Interface(0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6); mapping(address => UserInfo) public userInfo; event TokensPurchased(address indexed buyer, uint256 amount); event TokensClaimed(address indexed claimer, uint256 amount); event RateSet(uint256 newRate, address indexed owner); event SetStage(uint256 stage); event TokensRecovered(address indexed sender, address indexed tokenAddress, uint256 amount); constructor(uint256 _startTime, uint256 _endTime) { startTimeSale = _startTime; endTimeSale = _endTime; stages.push(Stage(22 days, 0.0103 * 10**18, 100, 48543689 * 10**18, 0)); stages.push(Stage(21 days, 0.0109 * 10**18, 50, 91743119 * 10**18, 0)); stages.push(Stage(25 days, 0.0132 * 10**18, 40, 113636363 * 10**18, 0)); stages.push(Stage(30 days, 0.0157 * 10**18, 40, 95541401 * 10**18, 0)); stages.push(Stage(35 days, 0.0179 * 10**18, 40, 83798882 * 10**18, 0)); stages.push(Stage(40 days, 0.0198 * 10**18, 30, 75757575 * 10**18, 0)); stages.push(Stage(45 days, 0.0210 * 10**18, 30, 71428571 * 10**18, 0)); stages.push(Stage(50 days, 0.0223 * 10**18, 30, 67264573 * 10**18, 0)); stages.push(Stage(55 days, 0.0237 * 10**18, 30, 63291139 * 10**18, 0)); stages.push(Stage(60 days, 0.0251 * 10**18, 30, 59760956 * 10**18, 0)); stages.push(Stage(65 days, 0.0262 * 10**18, 30, 57251908 * 10**18, 0)); } function buyTokensWithETH() external payable nonReentrant { Stage storage current = getStage(); require(block.timestamp >= startTimeSale, "Presale has not started yet"); require(block.timestamp <= startTimeSale + current.duration, "Presale has ended"); require(msg.value > 0, "Amount must be greater than zero"); uint256 ethAmount = msg.value; uint256 amount = getTokenAmountETH(ethAmount); require(amount > 0, "Amount must be greater than zero"); uint256 remainingTokens = stages[currentStage].preSupply - stages[currentStage].tokenSold; require(amount <= remainingTokens, "Not enough tokens available in this stage"); UserInfo storage user = userInfo[msg.sender]; (bool ethTransferSuccess, ) = payable(owner()).call{value: ethAmount}(""); require(ethTransferSuccess, "ETH transfer failed"); uint256 bonus = stages[currentStage].bonusRate; uint256 bonusAmount = amount.mul(bonus).div(100); user.totalAmount = user.totalAmount.add(amount); user.bonusAmount = user.bonusAmount.add(bonusAmount); current.tokenSold = current.tokenSold.add(amount); tokenTotalSold = tokenTotalSold.add(amount); emit TokensPurchased(msg.sender, amount); if (current.tokenSold >= current.preSupply) { if (currentStage < stages.length - 1) { currentStage++; startTimeSale = block.timestamp; emit SetStage(currentStage); } } } function buyTokensWithUSDT(uint256 usdtAmount) external nonReentrant { Stage storage current = getStage(); require(block.timestamp >= startTimeSale, "Presale has not started yet"); require(block.timestamp <= startTimeSale + current.duration, "Presale has ended"); require(usdtAmount > 0, "Amount must be greater than zero"); uint256 amount = getTokenAmountUSDT(usdtAmount); uint256 tokenAmount = amount.mul(1e18).div(1e6); require(tokenAmount > 0, "Amount must be greater than zero"); uint256 remainingTokens = stages[currentStage].preSupply - stages[currentStage].tokenSold; require(tokenAmount <= remainingTokens, "Not enough tokens available in this stage"); UserInfo storage user = userInfo[msg.sender]; usdtToken.safeTransferFrom(msg.sender, owner(), usdtAmount); uint256 bonus = stages[currentStage].bonusRate; uint256 bonusAmount = tokenAmount.mul(bonus).div(100); user.totalAmount = user.totalAmount.add(tokenAmount); user.bonusAmount = user.bonusAmount.add(bonusAmount); current.tokenSold = current.tokenSold.add(tokenAmount); tokenTotalSold = tokenTotalSold.add(tokenAmount); emit TokensPurchased(msg.sender, tokenAmount); if (current.tokenSold >= current.preSupply) { if (currentStage < stages.length - 1) { currentStage++; startTimeSale = block.timestamp; emit SetStage(currentStage); } } } function buyTokensWithUSDC(uint256 usdcAmount) external nonReentrant { Stage storage current = getStage(); require(block.timestamp >= startTimeSale, "Presale has not started yet"); require(block.timestamp <= startTimeSale + current.duration, "Presale has ended"); require(usdcAmount > 0, "Amount must be greater than zero"); uint256 amount = getTokenAmountUSDC(usdcAmount); uint256 tokenAmount = amount.mul(1e18).div(1e6); require(tokenAmount > 0, "Amount must be greater than zero"); uint256 remainingTokens = stages[currentStage].preSupply - stages[currentStage].tokenSold; require(tokenAmount <= remainingTokens, "Not enough tokens available in this stage"); UserInfo storage user = userInfo[msg.sender]; usdcToken.safeTransferFrom(msg.sender, owner(), usdcAmount); uint256 bonus = stages[currentStage].bonusRate; uint256 bonusAmount = tokenAmount.mul(bonus).div(100); user.totalAmount = user.totalAmount.add(tokenAmount); user.bonusAmount = user.bonusAmount.add(bonusAmount); current.tokenSold = current.tokenSold.add(tokenAmount); tokenTotalSold = tokenTotalSold.add(tokenAmount); emit TokensPurchased(msg.sender, tokenAmount); if (current.tokenSold >= current.preSupply) { if (currentStage < stages.length - 1) { currentStage++; startTimeSale = block.timestamp; emit SetStage(currentStage); } } } function claimTokens() external nonReentrant { require(block.timestamp > endTimeSale, "Presale is still active"); UserInfo storage user = userInfo[msg.sender]; uint256 claimableAmount = user.totalAmount.add(user.bonusAmount); require(claimableAmount > 0, "No tokens to claim"); token.safeTransfer(msg.sender, claimableAmount); user.totalAmount = 0; user.bonusAmount = 0; emit TokensClaimed(msg.sender, claimableAmount); } function getClaimableTokens(address _user) external view returns (uint256) { UserInfo storage user = userInfo[_user]; uint256 claimableAmount = user.totalAmount.add(user.bonusAmount); if (claimableAmount == 0) { return 0; } return claimableAmount; } function getTokenAmountETH(uint256 amountETH) public view returns (uint256) { uint256 lastETHPriceByUSD = getLatestPriceETHPerUSD(); return amountETH.mul(lastETHPriceByUSD).div(getPriceInUSD()); } function getTokenAmountUSDT(uint256 amountUSDT) public view returns (uint256) { uint256 lastUSDTPriceByUSD = getLatestPriceUSDTPerUSD(); return amountUSDT.mul(lastUSDTPriceByUSD).div(getPriceInUSD()); } function getTokenAmountUSDC(uint256 amountUSDC) public view returns (uint256) { uint256 lastUSDCPriceByUSD = getLatestPriceUSDCPerUSD(); return amountUSDC.mul(lastUSDCPriceByUSD).div(getPriceInUSD()); } function getLatestPriceETHPerUSD() public view returns (uint256) { (, int256 price, , , ) = priceFeedETH.latestRoundData(); price = (price * (10**10)); return uint256(price); } function getLatestPriceUSDTPerUSD() public view returns (uint256) { (, int256 price, , , ) = priceFeedUSDT.latestRoundData(); price = (price * (10**10)); return uint256(price); } function getLatestPriceUSDCPerUSD() public view returns (uint256) { (, int256 price, , , ) = priceFeedUSDC.latestRoundData(); price = (price * (10**10)); return uint256(price); } function getPriceInUSD() public view returns (uint256) { return stages[currentStage].usdRate; } function getCurrentStageEndTime() public view returns (uint256) { return startTimeSale + stages[currentStage].duration; } function updateContractAddresses(address _newPriceFeedETH, address _newPriceFeedUSDT, address _newPriceFeedUSDC) external onlyOwner { require(_newPriceFeedETH != address(0), "ETH price feed address cannot be zero"); require(_newPriceFeedUSDT != address(0), "USDT price feed address cannot be zero"); require(_newPriceFeedUSDC != address(0), "USDC price feed address cannot be zero"); priceFeedETH = AggregatorV3Interface(_newPriceFeedETH); priceFeedUSDT = AggregatorV3Interface(_newPriceFeedUSDT); priceFeedUSDC = AggregatorV3Interface(_newPriceFeedUSDC); } function updateTime(uint256 _stage, uint256 _duration) external onlyOwner { require(_stage < stages.length, "No more stage available"); Stage storage currentStageToUpdate = stages[_stage]; currentStageToUpdate.duration = _duration; } function updateBonusAndSupply(uint256 _stage, uint256 _bonus, uint256 _presupply) external onlyOwner { require(_stage < stages.length, "No more stage available"); Stage storage currentStageToUpdate = stages[_stage]; currentStageToUpdate.bonusRate = _bonus; currentStageToUpdate.preSupply = _presupply; } function updateUsdRate(uint256 _stage, uint256 usdRate) external onlyOwner { require(_stage < stages.length, "No more stage available"); require(usdRate > 0, "USD rate must be greater than zero"); Stage storage currentStageToUpdate = stages[_stage]; currentStageToUpdate.usdRate = usdRate; } function getTotalUSDRaised() external view returns (uint256) { uint256 totalUSDRaised = 0; for (uint256 i = 0; i < stages.length; i++) { uint256 stageUSD = stages[i].usdRate; uint256 stageTokensSold = stages[i].tokenSold; totalUSDRaised = totalUSDRaised.add(stageUSD.mul(stageTokensSold).div(1e18)); } return totalUSDRaised; } function setEndTime(uint256 _endTime) external onlyOwner { endTimeSale = _endTime; } function setStartTime(uint256 _startTime) external onlyOwner { startTimeSale = _startTime; } function setStage(uint256 _newStage) external onlyOwner { require(currentStage < stages.length, "No more stage available"); currentStage = _newStage; startTimeSale = block.timestamp; emit SetStage(_newStage); } function getStage() internal view returns (Stage storage) { require(currentStage < stages.length, "No more stage available"); return stages[currentStage]; } function withdrawETH() external onlyOwner { uint256 ethBalance = address(this).balance; (bool success, ) = payable(msg.sender).call{value: ethBalance}(""); require(success, "ETH withdrawal failed"); } function withdrawLeftToken() external onlyOwner { uint256 balance = token.balanceOf(address(this)); require(balance > 0, "No tokens"); token.safeTransfer(owner(), balance); } function recoverWrongTokens(address _tokenAddress) external onlyOwner { IERC20 wrongToken = IERC20(_tokenAddress); uint256 balance = wrongToken.balanceOf(address(this)); require(balance > 0, "No tokens to recover"); require(wrongToken.transfer(owner(), balance), "Token recovery failed"); emit TokensRecovered(msg.sender, _tokenAddress, balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"},{"internalType":"uint256","name":"_endTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newRate","type":"uint256"},{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"RateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"stage","type":"uint256"}],"name":"SetStage","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"claimer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"buyer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokensRecovered","type":"event"},{"inputs":[],"name":"buyTokensWithETH","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdcAmount","type":"uint256"}],"name":"buyTokensWithUSDC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"usdtAmount","type":"uint256"}],"name":"buyTokensWithUSDT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentStage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"endTimeSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"getClaimableTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentStageEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPriceETHPerUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPriceUSDCPerUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLatestPriceUSDTPerUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPriceInUSD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"name":"getTokenAmountETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountUSDC","type":"uint256"}],"name":"getTokenAmountUSDC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountUSDT","type":"uint256"}],"name":"getTokenAmountUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalUSDRaised","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":"priceFeedETH","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceFeedUSDC","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceFeedUSDT","outputs":[{"internalType":"contract AggregatorV3Interface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"}],"name":"recoverWrongTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_endTime","type":"uint256"}],"name":"setEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newStage","type":"uint256"}],"name":"setStage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_startTime","type":"uint256"}],"name":"setStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"stages","outputs":[{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"usdRate","type":"uint256"},{"internalType":"uint256","name":"bonusRate","type":"uint256"},{"internalType":"uint256","name":"preSupply","type":"uint256"},{"internalType":"uint256","name":"tokenSold","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTimeSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenTotalSold","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":[{"internalType":"uint256","name":"_stage","type":"uint256"},{"internalType":"uint256","name":"_bonus","type":"uint256"},{"internalType":"uint256","name":"_presupply","type":"uint256"}],"name":"updateBonusAndSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPriceFeedETH","type":"address"},{"internalType":"address","name":"_newPriceFeedUSDT","type":"address"},{"internalType":"address","name":"_newPriceFeedUSDC","type":"address"}],"name":"updateContractAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stage","type":"uint256"},{"internalType":"uint256","name":"_duration","type":"uint256"}],"name":"updateTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stage","type":"uint256"},{"internalType":"uint256","name":"usdRate","type":"uint256"}],"name":"updateUsdRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"usdcToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"usdtToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"totalAmount","type":"uint256"},{"internalType":"uint256","name":"bonusAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLeftToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600780546001600160a01b03199081167373315713981a49dca31af9eda98ecffd49e467241790915560088054821673dac17f958d2ee523a2206206994597c13d831ec717905560098054821673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48179055600a80548216735f4ec3df9cbd43714fe2740f5e3616155c5b8419179055600b80548216733e7d1eab13ad0104d2750b8863b489d65364e32d179055600c8054909116738fffffd4afb6115b954bd326cbe7b4ba576818f6179055348015620000d157600080fd5b50604051620034b2380380620034b2833981016040819052620000f4916200082b565b620000ff33620007db565b60018081905550816003819055508060048190555060066040518060a00160405280621d01008152602001662497cba12fc0008152602001606481526020016a282786a759bcc6e98400008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a00160405280621baf8081526020016626b97e040d40008152602001603281526020016a4be35c724f1f442cdc00008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a001604052806220f5808152602001662ee5547f0900008152602001602881526020016a5dff6f94f73d37814c00008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a0016040528062278d0081526020016637c7111af940008152602001602881526020016a4f07adb9f076bf6ac400008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a00160405280622e24808152602001663f97f4857ac0008152602001602881526020016a45511a7eed96cde04800008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a001604052806234bc008152602001664657febe8d80008152602001601e81526020016a3eaa4a5eaf413e73bc00008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a00160405280623b53808152602001664a9b63844880008152602001601e81526020016a3b159697c0df6e368c00008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a001604052806241eb008152602001664f39bb5a7dc0008152602001601e81526020016a37a3d3cf13c65c62d400008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a0016040528062488280815260200166543306412d40008152602001601e81526020016a345a6b852829f2922c00008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a00160405280624f1a00815260200166592c5127dcc0008152602001601e81526020016a316edfea8f65161f7000008152602001600081525090806001815401808255809150506001900390600052602060002090600502016000909190919091506000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155505060066040518060a001604052806255b1808152602001665d14c2dd1d80008152602001601e81526020016a2f5b9026d1071fd690000081526020016000815250908060018154018082558091505060019003906000526020600020906005020160009091909190915060008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401555050505062000850565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600080604083850312156200083f57600080fd5b505080516020909101519092909150565b612c5280620008606000396000f3fe60806040526004361061029f5760003560e01c8063715018a61161016e578063bbc0be69116100cb578063e1e851891161007f578063f2fde38b11610064578063f2fde38b14610758578063fc0c546a14610778578063fdb5d144146107a557600080fd5b8063e1e851891461070b578063eff691721461072b57600080fd5b8063d3d9d1e4116100b0578063d3d9d1e4146106b4578063e086e5ec146106e1578063e1aa6036146106f657600080fd5b8063bbc0be6914610674578063ccb98ffc1461069457600080fd5b80638da5cb5b116101225780639c0caad6116101075780639c0caad61461062a578063a98ad46c14610632578063b393f43f1461065f57600080fd5b80638da5cb5b146105e95780638da7878c1461061457600080fd5b806377e5d6d71161015357806377e5d6d71461056c5780637f287c121461058c578063845ddcb2146105a157600080fd5b8063715018a614610537578063746268cc1461054c57600080fd5b806323999fd21161021c5780635ef8086f116101d0578063652ee5e6116101b5578063652ee5e6146104f75780636c5e06111461050c5780636eb769d21461052157600080fd5b80635ef8086f146104aa57806362a469e9146104ca57600080fd5b80633eb1d777116102015780633eb1d7771461045f57806348c54b9d1461047f5780635bf5d54c1461049457600080fd5b806323999fd21461041f5780633e0a322d1461043f57600080fd5b80631832d8b6116102735780631b831ead116102585780631b831ead146103bf5780632071088a146103df57806321f1b677146103ff57600080fd5b80631832d8b6146103565780631959a0021461037657600080fd5b8062fe8edc146102a457806302a15c49146102c657806309ddaa97146102ee57806311eac85514610304575b600080fd5b3480156102b057600080fd5b506102c46102bf366004612900565b6107ba565b005b3480156102d257600080fd5b506102db610c3e565b6040519081526020015b60405180910390f35b3480156102fa57600080fd5b506102db60045481565b34801561031057600080fd5b506009546103319073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e5565b34801561036257600080fd5b506102db610371366004612900565b610cef565b34801561038257600080fd5b506103aa610391366004612942565b600d602052600090815260409020805460019091015482565b604080519283526020830191909152016102e5565b3480156103cb57600080fd5b506102db6103da366004612942565b610d18565b3480156103eb57600080fd5b506102c46103fa36600461295d565b610d64565b34801561040b57600080fd5b506102c461041a3660046129a0565b610fb9565b34801561042b57600080fd5b506102c461043a3660046129a0565b611059565b34801561044b57600080fd5b506102c461045a366004612900565b61118c565b34801561046b57600080fd5b506102c461047a366004612900565b611199565b34801561048b57600080fd5b506102c461124d565b3480156104a057600080fd5b506102db60025481565b3480156104b657600080fd5b506102c46104c5366004612900565b6113be565b3480156104d657600080fd5b50600b546103319073ffffffffffffffffffffffffffffffffffffffff1681565b34801561050357600080fd5b506102c46116f4565b34801561051857600080fd5b506102db61183d565b34801561052d57600080fd5b506102db60055481565b34801561054357600080fd5b506102c46118d9565b34801561055857600080fd5b506102c4610567366004612942565b6118eb565b34801561057857600080fd5b506102c46105873660046129c2565b611b7b565b34801561059857600080fd5b506102db611c25565b3480156105ad57600080fd5b506105c16105bc366004612900565b611c60565b604080519586526020860194909452928401919091526060830152608082015260a0016102e5565b3480156105f557600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610331565b34801561062057600080fd5b506102db60035481565b6102c4611ca1565b34801561063e57600080fd5b506008546103319073ffffffffffffffffffffffffffffffffffffffff1681565b34801561066b57600080fd5b506102db61219e565b34801561068057600080fd5b506102db61068f366004612900565b61220e565b3480156106a057600080fd5b506102c46106af366004612900565b612219565b3480156106c057600080fd5b50600c546103319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106ed57600080fd5b506102c4612226565b34801561070257600080fd5b506102db6122e6565b34801561071757600080fd5b506102db610726366004612900565b612314565b34801561073757600080fd5b50600a546103319073ffffffffffffffffffffffffffffffffffffffff1681565b34801561076457600080fd5b506102c4610773366004612942565b61231f565b34801561078457600080fd5b506007546103319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156107b157600080fd5b506102db6123d3565b6107c2612443565b60006107cc612486565b905060035442101561083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726573616c6520686173206e6f74207374617274656420796574000000000060448201526064015b60405180910390fd5b805460035461084e9190612a1d565b4211156108b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50726573616c652068617320656e6465640000000000000000000000000000006044820152606401610836565b60008211610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b600061092c8361220e565b9050600061094f620f424061094984670de0b6b3a764000061251e565b9061252a565b9050600081116109bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b60006006600254815481106109d2576109d2612a30565b9060005260206000209060050201600401546006600254815481106109f9576109f9612a30565b906000526020600020906005020160030154610a159190612a5f565b905080821115610aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6520696e207460448201527f68697320737461676500000000000000000000000000000000000000000000006064820152608401610836565b336000818152600d6020526040902090610afb90610ada60005473ffffffffffffffffffffffffffffffffffffffff1690565b60095473ffffffffffffffffffffffffffffffffffffffff16919089612536565b6000600660025481548110610b1257610b12612a30565b600091825260208220600260059092020101549150610b366064610949878561251e565b8354909150610b4590866125c5565b83556001830154610b5690826125c5565b60018401556004870154610b6a90866125c5565b6004880155600554610b7c90866125c5565b60055560405185815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2719060200160405180910390a28660030154876004015410610c2b57600654610bd290600190612a5f565b6002541015610c2b5760028054906000610beb83612a72565b9091555050426003556002546040519081527fda3b00eab6dfeb3b724579cd781a8980d29c9bbe97476d0c530049130d51a0d09060200160405180910390a15b50505050505050610c3b60018055565b50565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190612ac4565b505050915050806402540be400610ce99190612b14565b92915050565b600080610cfa6123d3565b9050610d11610d076122e6565b610949858461251e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d60205260408120600181015481548391610d5091906125c5565b905080600003610d11575060009392505050565b610d6c6125d1565b73ffffffffffffffffffffffffffffffffffffffff8316610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f455448207072696365206665656420616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610836565b73ffffffffffffffffffffffffffffffffffffffff8216610eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f55534454207072696365206665656420616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152608401610836565b73ffffffffffffffffffffffffffffffffffffffff8116610f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f55534443207072696365206665656420616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152608401610836565b600a805473ffffffffffffffffffffffffffffffffffffffff9485167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600b805493851693821693909317909255600c8054919093169116179055565b610fc16125d1565b600654821061102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b60006006838154811061104157611041612a30565b60009182526020909120600590910201919091555050565b6110616125d1565b60065482106110cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b6000811161115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f5553442072617465206d7573742062652067726561746572207468616e207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152608401610836565b60006006838154811061117157611171612a30565b60009182526020909120600160059092020101919091555050565b6111946125d1565b600355565b6111a16125d1565b6006546002541061120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b6002819055426003556040518181527fda3b00eab6dfeb3b724579cd781a8980d29c9bbe97476d0c530049130d51a0d09060200160405180910390a150565b611255612443565b60045442116112c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50726573616c65206973207374696c6c206163746976650000000000000000006044820152606401610836565b336000908152600d60205260408120600181015481549192916112e2916125c5565b90506000811161134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f20746f6b656e7320746f20636c61696d00000000000000000000000000006044820152606401610836565b6007546113729073ffffffffffffffffffffffffffffffffffffffff163383612652565b6000808355600183015560405181815233907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4309060200160405180910390a250506113bc60018055565b565b6113c6612443565b60006113d0612486565b905060035442101561143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726573616c6520686173206e6f7420737461727465642079657400000000006044820152606401610836565b805460035461144d9190612a1d565b4211156114b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50726573616c652068617320656e6465640000000000000000000000000000006044820152606401610836565b60008211611520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b600061152b83610cef565b90506000611548620f424061094984670de0b6b3a764000061251e565b9050600081116115b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b60006006600254815481106115cb576115cb612a30565b9060005260206000209060050201600401546006600254815481106115f2576115f2612a30565b90600052602060002090600502016003015461160e9190612a5f565b9050808211156116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6520696e207460448201527f68697320737461676500000000000000000000000000000000000000000000006064820152608401610836565b336000818152600d6020526040902090610afb906116d360005473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16919089612536565b6116fc6125d1565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190612b60565b9050600081116117fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20746f6b656e7300000000000000000000000000000000000000000000006044820152606401610836565b610c3b61181d60005473ffffffffffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff169083612652565b600080805b6006548110156118d35760006006828154811061186157611861612a30565b906000526020600020906005020160010154905060006006838154811061188a5761188a612a30565b90600052602060002090600502016004015490506118c76118c0670de0b6b3a7640000610949848661251e90919063ffffffff16565b85906125c5565b93505050600101611842565b50919050565b6118e16125d1565b6113bc6000612695565b6118f36125d1565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152819060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119869190612b60565b9050600081116119f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f20746f6b656e7320746f207265636f7665720000000000000000000000006044820152606401610836565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611a2d60005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303816000875af1158015611a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac39190612b79565b611b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e207265636f76657279206661696c656400000000000000000000006044820152606401610836565b60405181815273ffffffffffffffffffffffffffffffffffffffff84169033907f401f439d865a766757ec78675925bd67198d5e78805aa41691b34b5d6a6cbbe69060200160405180910390a3505050565b611b836125d1565b6006548310611bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b600060068481548110611c0357611c03612a30565b6000918252602090912060059091020160028101939093555060039091015550565b6000600660025481548110611c3c57611c3c612a30565b906000526020600020906005020160000154600354611c5b9190612a1d565b905090565b60068181548110611c7057600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909185565b611ca9612443565b6000611cb3612486565b9050600354421015611d21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726573616c6520686173206e6f7420737461727465642079657400000000006044820152606401610836565b8054600354611d309190612a1d565b421115611d99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50726573616c652068617320656e6465640000000000000000000000000000006044820152606401610836565b60003411611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b346000611e0f82612314565b905060008111611e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b6000600660025481548110611e9257611e92612a30565b906000526020600020906005020160040154600660025481548110611eb957611eb9612a30565b906000526020600020906005020160030154611ed59190612a5f565b905080821115611f67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6520696e207460448201527f68697320737461676500000000000000000000000000000000000000000000006064820152608401610836565b336000908152600d6020526040812090611f9660005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168560405160006040518083038185875af1925050503d8060008114611fed576040519150601f19603f3d011682016040523d82523d6000602084013e611ff2565b606091505b505090508061205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152606401610836565b600060066002548154811061207457612074612a30565b6000918252602082206002600590920201015491506120986064610949888561251e565b84549091506120a790876125c5565b845560018401546120b890826125c5565b600185015560048801546120cc90876125c5565b60048901556005546120de90876125c5565b60055560405186815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2719060200160405180910390a2876003015488600401541061218d5760065461213490600190612a5f565b600254101561218d576002805490600061214d83612a72565b9091555050426003556002546040519081527fda3b00eab6dfeb3b724579cd781a8980d29c9bbe97476d0c530049130d51a0d09060200160405180910390a15b50505050505050506113bc60018055565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cae573d6000803e3d6000fd5b600080610cfa610c3e565b6122216125d1565b600455565b61222e6125d1565b6040514790600090339083908381818185875af1925050503d8060008114612272576040519150601f19603f3d011682016040523d82523d6000602084013e612277565b606091505b50509050806122e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f455448207769746864726177616c206661696c656400000000000000000000006044820152606401610836565b5050565b60006006600254815481106122fd576122fd612a30565b906000526020600020906005020160010154905090565b600080610cfa61219e565b6123276125d1565b73ffffffffffffffffffffffffffffffffffffffff81166123ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610836565b610c3b81612695565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cae573d6000803e3d6000fd5b60026001540361247f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b600654600254600091116124f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b60066002548154811061250b5761250b612a30565b9060005260206000209060050201905090565b6000610d118284612b9b565b6000610d118284612bb2565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526125bf9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061270a565b50505050565b6000610d118284612a1d565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610836565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261269091859182169063a9059cbb90606401612578565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061272c73ffffffffffffffffffffffffffffffffffffffff8416836127a0565b9050805160001415801561275157508080602001905181019061274f9190612b79565b155b15612690576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610836565b6060610d1183836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516127d39190612bed565b60006040518083038185875af1925050503d8060008114612810576040519150601f19603f3d011682016040523d82523d6000602084013e612815565b606091505b509150915061282586838361282f565b9695505050505050565b6060826128445761283f826128be565b610d11565b8151158015612868575073ffffffffffffffffffffffffffffffffffffffff84163b155b156128b7576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610836565b5080610d11565b8051156128ce5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561291257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461293d57600080fd5b919050565b60006020828403121561295457600080fd5b610d1182612919565b60008060006060848603121561297257600080fd5b61297b84612919565b925061298960208501612919565b915061299760408501612919565b90509250925092565b600080604083850312156129b357600080fd5b50508035926020909101359150565b6000806000606084860312156129d757600080fd5b505081359360208301359350604090920135919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610ce957610ce96129ee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81810381811115610ce957610ce96129ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612aa357612aa36129ee565b5060010190565b805169ffffffffffffffffffff8116811461293d57600080fd5b600080600080600060a08688031215612adc57600080fd5b612ae586612aaa565b9450602086015193506040860151925060608601519150612b0860808701612aaa565b90509295509295909350565b808202600082127f800000000000000000000000000000000000000000000000000000000000000084141615612b4c57612b4c6129ee565b8181058314821517610ce957610ce96129ee565b600060208284031215612b7257600080fd5b5051919050565b600060208284031215612b8b57600080fd5b81518015158114610d1157600080fd5b8082028115828204841417610ce957610ce96129ee565b600082612be8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000825160005b81811015612c0e5760208186018101518583015201612bf4565b50600092019182525091905056fea26469706673582212200f546cc57f20d75a549ea04dfd4dc40dca5e5dcd025bf47c584fcfc644060be364736f6c63430008180033000000000000000000000000000000000000000000000000000000006609f8e700000000000000000000000000000000000000000000000000000000679e6107
Deployed Bytecode
0x60806040526004361061029f5760003560e01c8063715018a61161016e578063bbc0be69116100cb578063e1e851891161007f578063f2fde38b11610064578063f2fde38b14610758578063fc0c546a14610778578063fdb5d144146107a557600080fd5b8063e1e851891461070b578063eff691721461072b57600080fd5b8063d3d9d1e4116100b0578063d3d9d1e4146106b4578063e086e5ec146106e1578063e1aa6036146106f657600080fd5b8063bbc0be6914610674578063ccb98ffc1461069457600080fd5b80638da5cb5b116101225780639c0caad6116101075780639c0caad61461062a578063a98ad46c14610632578063b393f43f1461065f57600080fd5b80638da5cb5b146105e95780638da7878c1461061457600080fd5b806377e5d6d71161015357806377e5d6d71461056c5780637f287c121461058c578063845ddcb2146105a157600080fd5b8063715018a614610537578063746268cc1461054c57600080fd5b806323999fd21161021c5780635ef8086f116101d0578063652ee5e6116101b5578063652ee5e6146104f75780636c5e06111461050c5780636eb769d21461052157600080fd5b80635ef8086f146104aa57806362a469e9146104ca57600080fd5b80633eb1d777116102015780633eb1d7771461045f57806348c54b9d1461047f5780635bf5d54c1461049457600080fd5b806323999fd21461041f5780633e0a322d1461043f57600080fd5b80631832d8b6116102735780631b831ead116102585780631b831ead146103bf5780632071088a146103df57806321f1b677146103ff57600080fd5b80631832d8b6146103565780631959a0021461037657600080fd5b8062fe8edc146102a457806302a15c49146102c657806309ddaa97146102ee57806311eac85514610304575b600080fd5b3480156102b057600080fd5b506102c46102bf366004612900565b6107ba565b005b3480156102d257600080fd5b506102db610c3e565b6040519081526020015b60405180910390f35b3480156102fa57600080fd5b506102db60045481565b34801561031057600080fd5b506009546103319073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016102e5565b34801561036257600080fd5b506102db610371366004612900565b610cef565b34801561038257600080fd5b506103aa610391366004612942565b600d602052600090815260409020805460019091015482565b604080519283526020830191909152016102e5565b3480156103cb57600080fd5b506102db6103da366004612942565b610d18565b3480156103eb57600080fd5b506102c46103fa36600461295d565b610d64565b34801561040b57600080fd5b506102c461041a3660046129a0565b610fb9565b34801561042b57600080fd5b506102c461043a3660046129a0565b611059565b34801561044b57600080fd5b506102c461045a366004612900565b61118c565b34801561046b57600080fd5b506102c461047a366004612900565b611199565b34801561048b57600080fd5b506102c461124d565b3480156104a057600080fd5b506102db60025481565b3480156104b657600080fd5b506102c46104c5366004612900565b6113be565b3480156104d657600080fd5b50600b546103319073ffffffffffffffffffffffffffffffffffffffff1681565b34801561050357600080fd5b506102c46116f4565b34801561051857600080fd5b506102db61183d565b34801561052d57600080fd5b506102db60055481565b34801561054357600080fd5b506102c46118d9565b34801561055857600080fd5b506102c4610567366004612942565b6118eb565b34801561057857600080fd5b506102c46105873660046129c2565b611b7b565b34801561059857600080fd5b506102db611c25565b3480156105ad57600080fd5b506105c16105bc366004612900565b611c60565b604080519586526020860194909452928401919091526060830152608082015260a0016102e5565b3480156105f557600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610331565b34801561062057600080fd5b506102db60035481565b6102c4611ca1565b34801561063e57600080fd5b506008546103319073ffffffffffffffffffffffffffffffffffffffff1681565b34801561066b57600080fd5b506102db61219e565b34801561068057600080fd5b506102db61068f366004612900565b61220e565b3480156106a057600080fd5b506102c46106af366004612900565b612219565b3480156106c057600080fd5b50600c546103319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156106ed57600080fd5b506102c4612226565b34801561070257600080fd5b506102db6122e6565b34801561071757600080fd5b506102db610726366004612900565b612314565b34801561073757600080fd5b50600a546103319073ffffffffffffffffffffffffffffffffffffffff1681565b34801561076457600080fd5b506102c4610773366004612942565b61231f565b34801561078457600080fd5b506007546103319073ffffffffffffffffffffffffffffffffffffffff1681565b3480156107b157600080fd5b506102db6123d3565b6107c2612443565b60006107cc612486565b905060035442101561083f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726573616c6520686173206e6f74207374617274656420796574000000000060448201526064015b60405180910390fd5b805460035461084e9190612a1d565b4211156108b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50726573616c652068617320656e6465640000000000000000000000000000006044820152606401610836565b60008211610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b600061092c8361220e565b9050600061094f620f424061094984670de0b6b3a764000061251e565b9061252a565b9050600081116109bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b60006006600254815481106109d2576109d2612a30565b9060005260206000209060050201600401546006600254815481106109f9576109f9612a30565b906000526020600020906005020160030154610a159190612a5f565b905080821115610aa7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6520696e207460448201527f68697320737461676500000000000000000000000000000000000000000000006064820152608401610836565b336000818152600d6020526040902090610afb90610ada60005473ffffffffffffffffffffffffffffffffffffffff1690565b60095473ffffffffffffffffffffffffffffffffffffffff16919089612536565b6000600660025481548110610b1257610b12612a30565b600091825260208220600260059092020101549150610b366064610949878561251e565b8354909150610b4590866125c5565b83556001830154610b5690826125c5565b60018401556004870154610b6a90866125c5565b6004880155600554610b7c90866125c5565b60055560405185815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2719060200160405180910390a28660030154876004015410610c2b57600654610bd290600190612a5f565b6002541015610c2b5760028054906000610beb83612a72565b9091555050426003556002546040519081527fda3b00eab6dfeb3b724579cd781a8980d29c9bbe97476d0c530049130d51a0d09060200160405180910390a15b50505050505050610c3b60018055565b50565b600080600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190612ac4565b505050915050806402540be400610ce99190612b14565b92915050565b600080610cfa6123d3565b9050610d11610d076122e6565b610949858461251e565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600d60205260408120600181015481548391610d5091906125c5565b905080600003610d11575060009392505050565b610d6c6125d1565b73ffffffffffffffffffffffffffffffffffffffff8316610e0f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f455448207072696365206665656420616464726573732063616e6e6f7420626560448201527f207a65726f0000000000000000000000000000000000000000000000000000006064820152608401610836565b73ffffffffffffffffffffffffffffffffffffffff8216610eb2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f55534454207072696365206665656420616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152608401610836565b73ffffffffffffffffffffffffffffffffffffffff8116610f55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f55534443207072696365206665656420616464726573732063616e6e6f74206260448201527f65207a65726f00000000000000000000000000000000000000000000000000006064820152608401610836565b600a805473ffffffffffffffffffffffffffffffffffffffff9485167fffffffffffffffffffffffff000000000000000000000000000000000000000091821617909155600b805493851693821693909317909255600c8054919093169116179055565b610fc16125d1565b600654821061102c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b60006006838154811061104157611041612a30565b60009182526020909120600590910201919091555050565b6110616125d1565b60065482106110cc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b6000811161115c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f5553442072617465206d7573742062652067726561746572207468616e207a6560448201527f726f0000000000000000000000000000000000000000000000000000000000006064820152608401610836565b60006006838154811061117157611171612a30565b60009182526020909120600160059092020101919091555050565b6111946125d1565b600355565b6111a16125d1565b6006546002541061120e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b6002819055426003556040518181527fda3b00eab6dfeb3b724579cd781a8980d29c9bbe97476d0c530049130d51a0d09060200160405180910390a150565b611255612443565b60045442116112c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50726573616c65206973207374696c6c206163746976650000000000000000006044820152606401610836565b336000908152600d60205260408120600181015481549192916112e2916125c5565b90506000811161134e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f4e6f20746f6b656e7320746f20636c61696d00000000000000000000000000006044820152606401610836565b6007546113729073ffffffffffffffffffffffffffffffffffffffff163383612652565b6000808355600183015560405181815233907f896e034966eaaf1adc54acc0f257056febbd300c9e47182cf761982cf1f5e4309060200160405180910390a250506113bc60018055565b565b6113c6612443565b60006113d0612486565b905060035442101561143e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726573616c6520686173206e6f7420737461727465642079657400000000006044820152606401610836565b805460035461144d9190612a1d565b4211156114b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50726573616c652068617320656e6465640000000000000000000000000000006044820152606401610836565b60008211611520576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b600061152b83610cef565b90506000611548620f424061094984670de0b6b3a764000061251e565b9050600081116115b4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b60006006600254815481106115cb576115cb612a30565b9060005260206000209060050201600401546006600254815481106115f2576115f2612a30565b90600052602060002090600502016003015461160e9190612a5f565b9050808211156116a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6520696e207460448201527f68697320737461676500000000000000000000000000000000000000000000006064820152608401610836565b336000818152600d6020526040902090610afb906116d360005473ffffffffffffffffffffffffffffffffffffffff1690565b60085473ffffffffffffffffffffffffffffffffffffffff16919089612536565b6116fc6125d1565b6007546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009173ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa15801561176b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178f9190612b60565b9050600081116117fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f4e6f20746f6b656e7300000000000000000000000000000000000000000000006044820152606401610836565b610c3b61181d60005473ffffffffffffffffffffffffffffffffffffffff1690565b60075473ffffffffffffffffffffffffffffffffffffffff169083612652565b600080805b6006548110156118d35760006006828154811061186157611861612a30565b906000526020600020906005020160010154905060006006838154811061188a5761188a612a30565b90600052602060002090600502016004015490506118c76118c0670de0b6b3a7640000610949848661251e90919063ffffffff16565b85906125c5565b93505050600101611842565b50919050565b6118e16125d1565b6113bc6000612695565b6118f36125d1565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152819060009073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015611962573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119869190612b60565b9050600081116119f2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f20746f6b656e7320746f207265636f7665720000000000000000000000006044820152606401610836565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611a2d60005473ffffffffffffffffffffffffffffffffffffffff1690565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602481018490526044016020604051808303816000875af1158015611a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac39190612b79565b611b29576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f546f6b656e207265636f76657279206661696c656400000000000000000000006044820152606401610836565b60405181815273ffffffffffffffffffffffffffffffffffffffff84169033907f401f439d865a766757ec78675925bd67198d5e78805aa41691b34b5d6a6cbbe69060200160405180910390a3505050565b611b836125d1565b6006548310611bee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b600060068481548110611c0357611c03612a30565b6000918252602090912060059091020160028101939093555060039091015550565b6000600660025481548110611c3c57611c3c612a30565b906000526020600020906005020160000154600354611c5b9190612a1d565b905090565b60068181548110611c7057600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401549294509092909185565b611ca9612443565b6000611cb3612486565b9050600354421015611d21576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50726573616c6520686173206e6f7420737461727465642079657400000000006044820152606401610836565b8054600354611d309190612a1d565b421115611d99576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f50726573616c652068617320656e6465640000000000000000000000000000006044820152606401610836565b60003411611e03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b346000611e0f82612314565b905060008111611e7b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f416d6f756e74206d7573742062652067726561746572207468616e207a65726f6044820152606401610836565b6000600660025481548110611e9257611e92612a30565b906000526020600020906005020160040154600660025481548110611eb957611eb9612a30565b906000526020600020906005020160030154611ed59190612a5f565b905080821115611f67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4e6f7420656e6f75676820746f6b656e7320617661696c61626c6520696e207460448201527f68697320737461676500000000000000000000000000000000000000000000006064820152608401610836565b336000908152600d6020526040812090611f9660005473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff168560405160006040518083038185875af1925050503d8060008114611fed576040519150601f19603f3d011682016040523d82523d6000602084013e611ff2565b606091505b505090508061205d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f455448207472616e73666572206661696c6564000000000000000000000000006044820152606401610836565b600060066002548154811061207457612074612a30565b6000918252602082206002600590920201015491506120986064610949888561251e565b84549091506120a790876125c5565b845560018401546120b890826125c5565b600185015560048801546120cc90876125c5565b60048901556005546120de90876125c5565b60055560405186815233907f8f28852646c20cc973d3a8218f7eefed58c25c909f78f0265af4818c3d4dc2719060200160405180910390a2876003015488600401541061218d5760065461213490600190612a5f565b600254101561218d576002805490600061214d83612a72565b9091555050426003556002546040519081527fda3b00eab6dfeb3b724579cd781a8980d29c9bbe97476d0c530049130d51a0d09060200160405180910390a15b50505050505050506113bc60018055565b600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cae573d6000803e3d6000fd5b600080610cfa610c3e565b6122216125d1565b600455565b61222e6125d1565b6040514790600090339083908381818185875af1925050503d8060008114612272576040519150601f19603f3d011682016040523d82523d6000602084013e612277565b606091505b50509050806122e2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f455448207769746864726177616c206661696c656400000000000000000000006044820152606401610836565b5050565b60006006600254815481106122fd576122fd612a30565b906000526020600020906005020160010154905090565b600080610cfa61219e565b6123276125d1565b73ffffffffffffffffffffffffffffffffffffffff81166123ca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610836565b610c3b81612695565b600080600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cae573d6000803e3d6000fd5b60026001540361247f576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b600654600254600091116124f6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4e6f206d6f726520737461676520617661696c61626c650000000000000000006044820152606401610836565b60066002548154811061250b5761250b612a30565b9060005260206000209060050201905090565b6000610d118284612b9b565b6000610d118284612bb2565b60405173ffffffffffffffffffffffffffffffffffffffff84811660248301528381166044830152606482018390526125bf9186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061270a565b50505050565b6000610d118284612a1d565b60005473ffffffffffffffffffffffffffffffffffffffff1633146113bc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610836565b60405173ffffffffffffffffffffffffffffffffffffffff83811660248301526044820183905261269091859182169063a9059cbb90606401612578565b505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600061272c73ffffffffffffffffffffffffffffffffffffffff8416836127a0565b9050805160001415801561275157508080602001905181019061274f9190612b79565b155b15612690576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610836565b6060610d1183836000846000808573ffffffffffffffffffffffffffffffffffffffff1684866040516127d39190612bed565b60006040518083038185875af1925050503d8060008114612810576040519150601f19603f3d011682016040523d82523d6000602084013e612815565b606091505b509150915061282586838361282f565b9695505050505050565b6060826128445761283f826128be565b610d11565b8151158015612868575073ffffffffffffffffffffffffffffffffffffffff84163b155b156128b7576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610836565b5080610d11565b8051156128ce5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006020828403121561291257600080fd5b5035919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461293d57600080fd5b919050565b60006020828403121561295457600080fd5b610d1182612919565b60008060006060848603121561297257600080fd5b61297b84612919565b925061298960208501612919565b915061299760408501612919565b90509250925092565b600080604083850312156129b357600080fd5b50508035926020909101359150565b6000806000606084860312156129d757600080fd5b505081359360208301359350604090920135919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610ce957610ce96129ee565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81810381811115610ce957610ce96129ee565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612aa357612aa36129ee565b5060010190565b805169ffffffffffffffffffff8116811461293d57600080fd5b600080600080600060a08688031215612adc57600080fd5b612ae586612aaa565b9450602086015193506040860151925060608601519150612b0860808701612aaa565b90509295509295909350565b808202600082127f800000000000000000000000000000000000000000000000000000000000000084141615612b4c57612b4c6129ee565b8181058314821517610ce957610ce96129ee565b600060208284031215612b7257600080fd5b5051919050565b600060208284031215612b8b57600080fd5b81518015158114610d1157600080fd5b8082028115828204841417610ce957610ce96129ee565b600082612be8577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000825160005b81811015612c0e5760208186018101518583015201612bf4565b50600092019182525091905056fea26469706673582212200f546cc57f20d75a549ea04dfd4dc40dca5e5dcd025bf47c584fcfc644060be364736f6c63430008180033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000006609f8e700000000000000000000000000000000000000000000000000000000679e6107
-----Decoded View---------------
Arg [0] : _startTime (uint256): 1711929575
Arg [1] : _endTime (uint256): 1738432775
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000006609f8e7
Arg [1] : 00000000000000000000000000000000000000000000000000000000679e6107
Deployed Bytecode Sourcemap
20379:13315:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26137:1576;;;;;;;;;;-1:-1:-1;26137:1576:0;;;;;:::i;:::-;;:::i;:::-;;29682:210;;;;;;;;;;;;;:::i;:::-;;;345:25:1;;;333:2;318:18;29682:210:0;;;;;;;;20572:26;;;;;;;;;;;;;;;;21086:76;;;;;;;;;;-1:-1:-1;21086:76:0;;;;;;;;;;;571:42:1;559:55;;;541:74;;529:2;514:18;21086:76:0;381:240:1;28782:225:0;;;;;;;;;;-1:-1:-1;28782:225:0;;;;;:::i;:::-;;:::i;21523:44::-;;;;;;;;;;-1:-1:-1;21523:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;1192:25:1;;;1248:2;1233:18;;1226:34;;;;1165:18;21523:44:0;1018:248:1;28235:312:0;;;;;;;;;;-1:-1:-1;28235:312:0;;;;;:::i;:::-;;:::i;30160:616::-;;;;;;;;;;-1:-1:-1;30160:616:0;;;;;:::i;:::-;;:::i;30784:265::-;;;;;;;;;;-1:-1:-1;30784:265:0;;;;;:::i;:::-;;:::i;31409:332::-;;;;;;;;;;-1:-1:-1;31409:332:0;;;;;:::i;:::-;;:::i;32271:106::-;;;;;;;;;;-1:-1:-1;32271:106:0;;;;;:::i;:::-;;:::i;32385:251::-;;;;;;;;;;-1:-1:-1;32385:251:0;;;;;:::i;:::-;;:::i;27721:506::-;;;;;;;;;;;;;:::i;20503:27::-;;;;;;;;;;;;;;;;24553:1576;;;;;;;;;;-1:-1:-1;24553:1576:0;;;;;:::i;:::-;;:::i;21287:110::-;;;;;;;;;;-1:-1:-1;21287:110:0;;;;;;;;33071:206;;;;;;;;;;;;;:::i;31749:408::-;;;;;;;;;;;;;:::i;20605:29::-;;;;;;;;;;;;;;;;3193:103;;;;;;;;;;;;;:::i;33289:402::-;;;;;;;;;;-1:-1:-1;33289:402:0;;;;;:::i;:::-;;:::i;31057:344::-;;;;;;;;;;-1:-1:-1;31057:344:0;;;;;:::i;:::-;;:::i;30017:135::-;;;;;;;;;;;;;:::i;20894:21::-;;;;;;;;;;-1:-1:-1;20894:21:0;;;;;:::i;:::-;;:::i;:::-;;;;2704:25:1;;;2760:2;2745:18;;2738:34;;;;2788:18;;;2781:34;;;;2846:2;2831:18;;2824:34;2889:3;2874:19;;2867:35;2691:3;2676:19;20894:21:0;2445:463:1;2958:87:0;;;;;;;;;;-1:-1:-1;3004:7:0;3031:6;;;2958:87;;20537:28;;;;;;;;;;;;;;;;22959:1586;;;:::i;21003:76::-;;;;;;;;;;-1:-1:-1;21003:76:0;;;;;;;;29248:208;;;;;;;;;;;;;:::i;29015:225::-;;;;;;;;;;-1:-1:-1;29015:225:0;;;;;:::i;:::-;;:::i;32165:98::-;;;;;;;;;;-1:-1:-1;32165:98:0;;;;;:::i;:::-;;:::i;21404:110::-;;;;;;;;;;-1:-1:-1;21404:110:0;;;;;;;;32831:232;;;;;;;;;;;;;:::i;29900:109::-;;;;;;;;;;;;;:::i;28555:219::-;;;;;;;;;;-1:-1:-1;28555:219:0;;;;;:::i;:::-;;:::i;21171:109::-;;;;;;;;;;-1:-1:-1;21171:109:0;;;;;;;;3304:201;;;;;;;;;;-1:-1:-1;3304:201:0;;;;;:::i;:::-;;:::i;20924:72::-;;;;;;;;;;-1:-1:-1;20924:72:0;;;;;;;;29464:210;;;;;;;;;;;;;:::i;26137:1576::-;19172:21;:19;:21::i;:::-;26217::::1;26241:10;:8;:10::i;:::-;26217:34;;26289:13;;26270:15;:32;;26262:72;;;::::0;::::1;::::0;;3346:2:1;26262:72:0::1;::::0;::::1;3328:21:1::0;3385:2;3365:18;;;3358:30;3424:29;3404:18;;;3397:57;3471:18;;26262:72:0::1;;;;;;;;;26388:16:::0;;26372:13:::1;::::0;:32:::1;::::0;26388:16;26372:32:::1;:::i;:::-;26353:15;:51;;26345:81;;;::::0;::::1;::::0;;4021:2:1;26345:81:0::1;::::0;::::1;4003:21:1::0;4060:2;4040:18;;;4033:30;4099:19;4079:18;;;4072:47;4136:18;;26345:81:0::1;3819:341:1::0;26345:81:0::1;26458:1;26445:10;:14;26437:59;;;::::0;::::1;::::0;;4367:2:1;26437:59:0::1;::::0;::::1;4349:21:1::0;;;4386:18;;;4379:30;4445:34;4425:18;;;4418:62;4497:18;;26437:59:0::1;4165:356:1::0;26437:59:0::1;26509:14;26526:30;26545:10;26526:18;:30::i;:::-;26509:47:::0;-1:-1:-1;26567:19:0::1;26589:25;26610:3;26589:16;26509:47:::0;26600:4:::1;26589:10;:16::i;:::-;:20:::0;::::1;:25::i;:::-;26567:47;;26647:1;26633:11;:15;26625:60;;;::::0;::::1;::::0;;4367:2:1;26625:60:0::1;::::0;::::1;4349:21:1::0;;;4386:18;;;4379:30;4445:34;4425:18;;;4418:62;4497:18;;26625:60:0::1;4165:356:1::0;26625:60:0::1;26696:23;26755:6;26762:12;;26755:20;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;26722:6;26729:12;;26722:20;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;:63;;;;:::i;:::-;26696:89;;26819:15;26804:11;:30;;26796:84;;;::::0;::::1;::::0;;5050:2:1;26796:84:0::1;::::0;::::1;5032:21:1::0;5089:2;5069:18;;;5062:30;5128:34;5108:18;;;5101:62;5199:11;5179:18;;;5172:39;5228:19;;26796:84:0::1;4848:405:1::0;26796:84:0::1;26926:10;26893:21;26917:20:::0;;;:8:::1;:20;::::0;;;;;26950:59:::1;::::0;26989:7:::1;3004::::0;3031:6;;;;2958:87;26989:7:::1;26950:9;::::0;::::1;;::::0;:59;26998:10;26950:26:::1;:59::i;:::-;27022:13;27038:6;27045:12;;27038:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;:30:::1;:20;::::0;;::::1;;:30;::::0;;-1:-1:-1;27101:31:0::1;27128:3;27101:22;:11:::0;27038:30;27101:15:::1;:22::i;:31::-;27164:16:::0;;27079:53;;-1:-1:-1;27164:33:0::1;::::0;27185:11;27164:20:::1;:33::i;:::-;27145:52:::0;;27227:16:::1;::::0;::::1;::::0;:33:::1;::::0;27248:11;27227:20:::1;:33::i;:::-;27208:16;::::0;::::1;:52:::0;27291:17:::1;::::0;::::1;::::0;:34:::1;::::0;27313:11;27291:21:::1;:34::i;:::-;27271:17;::::0;::::1;:54:::0;27353:14:::1;::::0;:31:::1;::::0;27372:11;27353:18:::1;:31::i;:::-;27336:14;:48:::0;27402:40:::1;::::0;345:25:1;;;27418:10:0::1;::::0;27402:40:::1;::::0;333:2:1;318:18;27402:40:0::1;;;;;;;27478:7;:17;;;27457:7;:17;;;:38;27453:253;;27531:6;:13:::0;:17:::1;::::0;27547:1:::1;::::0;27531:17:::1;:::i;:::-;27516:12;;:32;27512:183;;;27569:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;27618:15:0::1;27602:13;:31:::0;27666:12:::1;::::0;27657:22:::1;::::0;345:25:1;;;27657:22:0::1;::::0;333:2:1;318:18;27657:22:0::1;;;;;;;27512:183;26206:1507;;;;;;;19216:20:::0;18507:1;19758:21;;19575:212;19216:20;26137:1576;:::o;29682:210::-;29739:7;29762:12;29784:13;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29759:56;;;;;;29835:5;29844:6;29835:16;;;;:::i;:::-;29826:26;29682:210;-1:-1:-1;;29682:210:0:o;28782:225::-;28851:7;28871:26;28900;:24;:26::i;:::-;28871:55;;28944;28983:15;:13;:15::i;:::-;28944:34;:10;28959:18;28944:14;:34::i;:55::-;28937:62;28782:225;-1:-1:-1;;;28782:225:0:o;28235:312::-;28345:15;;;28301:7;28345:15;;;:8;:15;;;;;28418:16;;;;28397;;28301:7;;28397:38;;:16;:20;:38::i;:::-;28371:64;;28450:15;28469:1;28450:20;28446:61;;-1:-1:-1;28494:1:0;;28235:312;-1:-1:-1;;;28235:312:0:o;30160:616::-;2917:13;:11;:13::i;:::-;30311:30:::1;::::0;::::1;30303:80;;;::::0;::::1;::::0;;6619:2:1;30303:80:0::1;::::0;::::1;6601:21:1::0;6658:2;6638:18;;;6631:30;6697:34;6677:18;;;6670:62;6768:7;6748:18;;;6741:35;6793:19;;30303:80:0::1;6417:401:1::0;30303:80:0::1;30402:31;::::0;::::1;30394:82;;;::::0;::::1;::::0;;7025:2:1;30394:82:0::1;::::0;::::1;7007:21:1::0;7064:2;7044:18;;;7037:30;7103:34;7083:18;;;7076:62;7174:8;7154:18;;;7147:36;7200:19;;30394:82:0::1;6823:402:1::0;30394:82:0::1;30495:31;::::0;::::1;30487:82;;;::::0;::::1;::::0;;7432:2:1;30487:82:0::1;::::0;::::1;7414:21:1::0;7471:2;7451:18;;;7444:30;7510:34;7490:18;;;7483:62;7581:8;7561:18;;;7554:36;7607:19;;30487:82:0::1;7230:402:1::0;30487:82:0::1;30580:12;:54:::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;;;30645:13:::1;:56:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;30712:13:::1;:56:::0;;;;;::::1;::::0;::::1;;::::0;;30160:616::o;30784:265::-;2917:13;:11;:13::i;:::-;30886:6:::1;:13:::0;30877:22;::::1;30869:58;;;::::0;::::1;::::0;;7839:2:1;30869:58:0::1;::::0;::::1;7821:21:1::0;7878:2;7858:18;;;7851:30;7917:25;7897:18;;;7890:53;7960:18;;30869:58:0::1;7637:347:1::0;30869:58:0::1;30938:34;30975:6;30982;30975:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;31000:41:::0;;;;-1:-1:-1;;30784:265:0:o;31409:332::-;2917:13;:11;:13::i;:::-;31512:6:::1;:13:::0;31503:22;::::1;31495:58;;;::::0;::::1;::::0;;7839:2:1;31495:58:0::1;::::0;::::1;7821:21:1::0;7878:2;7858:18;;;7851:30;7917:25;7897:18;;;7890:53;7960:18;;31495:58:0::1;7637:347:1::0;31495:58:0::1;31582:1;31572:7;:11;31564:58;;;::::0;::::1;::::0;;8191:2:1;31564:58:0::1;::::0;::::1;8173:21:1::0;8230:2;8210:18;;;8203:30;8269:34;8249:18;;;8242:62;8340:4;8320:18;;;8313:32;8362:19;;31564:58:0::1;7989:398:1::0;31564:58:0::1;31633:34;31670:6;31677;31670:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;31695:28:::1;31670:14;::::0;;::::1;;31695:28;:38:::0;;;;-1:-1:-1;;31409:332:0:o;32271:106::-;2917:13;:11;:13::i;:::-;32343::::1;:26:::0;32271:106::o;32385:251::-;2917:13;:11;:13::i;:::-;32475:6:::1;:13:::0;32460:12:::1;::::0;:28:::1;32452:64;;;::::0;::::1;::::0;;7839:2:1;32452:64:0::1;::::0;::::1;7821:21:1::0;7878:2;7858:18;;;7851:30;7917:25;7897:18;;;7890:53;7960:18;;32452:64:0::1;7637:347:1::0;32452:64:0::1;32527:12;:24:::0;;;32578:15:::1;32562:13;:31:::0;32609:19:::1;::::0;345:25:1;;;32609:19:0::1;::::0;333:2:1;318:18;32609:19:0::1;;;;;;;32385:251:::0;:::o;27721:506::-;19172:21;:19;:21::i;:::-;27803:11:::1;;27785:15;:29;27777:65;;;::::0;::::1;::::0;;8594:2:1;27777:65:0::1;::::0;::::1;8576:21:1::0;8633:2;8613:18;;;8606:30;8672:25;8652:18;;;8645:53;8715:18;;27777:65:0::1;8392:347:1::0;27777:65:0::1;27886:10;27853:21;27877:20:::0;;;:8:::1;:20;::::0;;;;27957:16:::1;::::0;::::1;::::0;27936;;27877:20;;27853:21;27936:38:::1;::::0;:20:::1;:38::i;:::-;27910:64;;28011:1;27993:15;:19;27985:50;;;::::0;::::1;::::0;;8946:2:1;27985:50:0::1;::::0;::::1;8928:21:1::0;8985:2;8965:18;;;8958:30;9024:20;9004:18;;;8997:48;9062:18;;27985:50:0::1;8744:342:1::0;27985:50:0::1;28048:5;::::0;:47:::1;::::0;:5:::1;;28067:10;28079:15:::0;28048:18:::1;:47::i;:::-;28127:1;28108:20:::0;;;28139:16:::1;::::0;::::1;:20:::0;28177:42:::1;::::0;345:25:1;;;28191:10:0::1;::::0;28177:42:::1;::::0;333:2:1;318:18;28177:42:0::1;;;;;;;27766:461;;19216:20:::0;18507:1;19758:21;;19575:212;19216:20;27721:506::o;24553:1576::-;19172:21;:19;:21::i;:::-;24633::::1;24657:10;:8;:10::i;:::-;24633:34;;24705:13;;24686:15;:32;;24678:72;;;::::0;::::1;::::0;;3346:2:1;24678:72:0::1;::::0;::::1;3328:21:1::0;3385:2;3365:18;;;3358:30;3424:29;3404:18;;;3397:57;3471:18;;24678:72:0::1;3144:351:1::0;24678:72:0::1;24804:16:::0;;24788:13:::1;::::0;:32:::1;::::0;24804:16;24788:32:::1;:::i;:::-;24769:15;:51;;24761:81;;;::::0;::::1;::::0;;4021:2:1;24761:81:0::1;::::0;::::1;4003:21:1::0;4060:2;4040:18;;;4033:30;4099:19;4079:18;;;4072:47;4136:18;;24761:81:0::1;3819:341:1::0;24761:81:0::1;24874:1;24861:10;:14;24853:59;;;::::0;::::1;::::0;;4367:2:1;24853:59:0::1;::::0;::::1;4349:21:1::0;;;4386:18;;;4379:30;4445:34;4425:18;;;4418:62;4497:18;;24853:59:0::1;4165:356:1::0;24853:59:0::1;24925:14;24942:30;24961:10;24942:18;:30::i;:::-;24925:47:::0;-1:-1:-1;24983:19:0::1;25005:25;25026:3;25005:16;24925:47:::0;25016:4:::1;25005:10;:16::i;:25::-;24983:47;;25063:1;25049:11;:15;25041:60;;;::::0;::::1;::::0;;4367:2:1;25041:60:0::1;::::0;::::1;4349:21:1::0;;;4386:18;;;4379:30;4445:34;4425:18;;;4418:62;4497:18;;25041:60:0::1;4165:356:1::0;25041:60:0::1;25112:23;25171:6;25178:12;;25171:20;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;25138:6;25145:12;;25138:20;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;:63;;;;:::i;:::-;25112:89;;25235:15;25220:11;:30;;25212:84;;;::::0;::::1;::::0;;5050:2:1;25212:84:0::1;::::0;::::1;5032:21:1::0;5089:2;5069:18;;;5062:30;5128:34;5108:18;;;5101:62;5199:11;5179:18;;;5172:39;5228:19;;25212:84:0::1;4848:405:1::0;25212:84:0::1;25342:10;25309:21;25333:20:::0;;;:8:::1;:20;::::0;;;;;25366:59:::1;::::0;25405:7:::1;3004::::0;3031:6;;;;2958:87;25405:7:::1;25366:9;::::0;::::1;;::::0;:59;25414:10;25366:26:::1;:59::i;33071:206::-:0;2917:13;:11;:13::i;:::-;33148:5:::1;::::0;:30:::1;::::0;;;;33172:4:::1;33148:30;::::0;::::1;541:74:1::0;33130:15:0::1;::::0;33148:5:::1;;::::0;:15:::1;::::0;514:18:1;;33148:30:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33130:48;;33207:1;33197:7;:11;33189:33;;;::::0;::::1;::::0;;9482:2:1;33189:33:0::1;::::0;::::1;9464:21:1::0;9521:1;9501:18;;;9494:29;9559:11;9539:18;;;9532:39;9588:18;;33189:33:0::1;9280:332:1::0;33189:33:0::1;33233:36;33252:7;3004::::0;3031:6;;;;2958:87;33252:7:::1;33233:5;::::0;::::1;;::::0;33261:7;33233:18:::1;:36::i;31749:408::-:0;31801:7;;;31860:257;31884:6;:13;31880:17;;31860:257;;;31918:16;31937:6;31944:1;31937:9;;;;;;;;:::i;:::-;;;;;;;;;;;:17;;;31918:36;;31968:23;31994:6;32001:1;31994:9;;;;;;;;:::i;:::-;;;;;;;;;;;:19;;;31968:45;;32046:59;32065:39;32099:4;32065:29;32078:15;32065:8;:12;;:29;;;;:::i;:39::-;32046:14;;:18;:59::i;:::-;32029:76;-1:-1:-1;;;31899:3:0;;31860:257;;;-1:-1:-1;32135:14:0;31749:408;-1:-1:-1;31749:408:0:o;3193:103::-;2917:13;:11;:13::i;:::-;3258:30:::1;3285:1;3258:18;:30::i;33289:402::-:0;2917:13;:11;:13::i;:::-;33440:35:::1;::::0;;;;33469:4:::1;33440:35;::::0;::::1;541:74:1::0;33397:13:0;;33370:17:::1;::::0;33440:20:::1;::::0;::::1;::::0;::::1;::::0;514:18:1;;33440:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33422:53;;33504:1;33494:7;:11;33486:44;;;::::0;::::1;::::0;;9819:2:1;33486:44:0::1;::::0;::::1;9801:21:1::0;9858:2;9838:18;;;9831:30;9897:22;9877:18;;;9870:50;9937:18;;33486:44:0::1;9617:344:1::0;33486:44:0::1;33551:10;:19;;;33571:7;3004::::0;3031:6;;;;2958:87;33571:7:::1;33551:37;::::0;;::::1;::::0;;;;;;10170:42:1;10158:55;;;33551:37:0::1;::::0;::::1;10140:74:1::0;10230:18;;;10223:34;;;10113:18;;33551:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33543:71;;;::::0;::::1;::::0;;10752:2:1;33543:71:0::1;::::0;::::1;10734:21:1::0;10791:2;10771:18;;;10764:30;10830:23;10810:18;;;10803:51;10871:18;;33543:71:0::1;10550:345:1::0;33543:71:0::1;33632:51;::::0;345:25:1;;;33632:51:0::1;::::0;::::1;::::0;33648:10:::1;::::0;33632:51:::1;::::0;333:2:1;318:18;33632:51:0::1;;;;;;;33359:332;;33289:402:::0;:::o;31057:344::-;2917:13;:11;:13::i;:::-;31186:6:::1;:13:::0;31177:22;::::1;31169:58;;;::::0;::::1;::::0;;7839:2:1;31169:58:0::1;::::0;::::1;7821:21:1::0;7878:2;7858:18;;;7851:30;7917:25;7897:18;;;7890:53;7960:18;;31169:58:0::1;7637:347:1::0;31169:58:0::1;31238:34;31275:6;31282;31275:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;31300:30;::::0;::::1;:39:::0;;;;-1:-1:-1;31350:30:0::1;::::0;;::::1;:43:::0;-1:-1:-1;31057:344:0:o;30017:135::-;30072:7;30115:6;30122:12;;30115:20;;;;;;;;:::i;:::-;;;;;;;;;;;:29;;;30099:13;;:45;;;;:::i;:::-;30092:52;;30017:135;:::o;20894:21::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20894:21:0;;;;;:::o;22959:1586::-;19172:21;:19;:21::i;:::-;23028::::1;23052:10;:8;:10::i;:::-;23028:34;;23100:13;;23081:15;:32;;23073:72;;;::::0;::::1;::::0;;3346:2:1;23073:72:0::1;::::0;::::1;3328:21:1::0;3385:2;3365:18;;;3358:30;3424:29;3404:18;;;3397:57;3471:18;;23073:72:0::1;3144:351:1::0;23073:72:0::1;23199:16:::0;;23183:13:::1;::::0;:32:::1;::::0;23199:16;23183:32:::1;:::i;:::-;23164:15;:51;;23156:81;;;::::0;::::1;::::0;;4021:2:1;23156:81:0::1;::::0;::::1;4003:21:1::0;4060:2;4040:18;;;4033:30;4099:19;4079:18;;;4072:47;4136:18;;23156:81:0::1;3819:341:1::0;23156:81:0::1;23268:1;23256:9;:13;23248:58;;;::::0;::::1;::::0;;4367:2:1;23248:58:0::1;::::0;::::1;4349:21:1::0;;;4386:18;;;4379:30;4445:34;4425:18;;;4418:62;4497:18;;23248:58:0::1;4165:356:1::0;23248:58:0::1;23339:9;23319:17;23376:28;23339:9:::0;23376:17:::1;:28::i;:::-;23359:45;;23432:1;23423:6;:10;23415:55;;;::::0;::::1;::::0;;4367:2:1;23415:55:0::1;::::0;::::1;4349:21:1::0;;;4386:18;;;4379:30;4445:34;4425:18;;;4418:62;4497:18;;23415:55:0::1;4165:356:1::0;23415:55:0::1;23481:23;23540:6;23547:12;;23540:20;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;23507:6;23514:12;;23507:20;;;;;;;;:::i;:::-;;;;;;;;;;;:30;;;:63;;;;:::i;:::-;23481:89;;23599:15;23589:6;:25;;23581:79;;;::::0;::::1;::::0;;5050:2:1;23581:79:0::1;::::0;::::1;5032:21:1::0;5089:2;5069:18;;;5062:30;5128:34;5108:18;;;5101:62;5199:11;5179:18;;;5172:39;5228:19;;23581:79:0::1;4848:405:1::0;23581:79:0::1;23706:10;23673:21;23697:20:::0;;;:8:::1;:20;::::0;;;;;23768:7:::1;3004::::0;3031:6;;;;2958:87;23768:7:::1;23760:21;;23789:9;23760:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23730:73;;;23822:18;23814:50;;;::::0;::::1;::::0;;11312:2:1;23814:50:0::1;::::0;::::1;11294:21:1::0;11351:2;11331:18;;;11324:30;11390:21;11370:18;;;11363:49;11429:18;;23814:50:0::1;11110:343:1::0;23814:50:0::1;23877:13;23893:6;23900:12;;23893:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;:30:::1;:20;::::0;;::::1;;:30;::::0;;-1:-1:-1;23956:26:0::1;23978:3;23956:17;:6:::0;23893:30;23956:10:::1;:17::i;:26::-;24014:16:::0;;23934:48;;-1:-1:-1;24014:28:0::1;::::0;24035:6;24014:20:::1;:28::i;:::-;23995:47:::0;;24072:16:::1;::::0;::::1;::::0;:33:::1;::::0;24093:11;24072:20:::1;:33::i;:::-;24053:16;::::0;::::1;:52:::0;24136:17:::1;::::0;::::1;::::0;:29:::1;::::0;24158:6;24136:21:::1;:29::i;:::-;24116:17;::::0;::::1;:49:::0;24193:14:::1;::::0;:26:::1;::::0;24212:6;24193:18:::1;:26::i;:::-;24176:14;:43:::0;24237:35:::1;::::0;345:25:1;;;24253:10:0::1;::::0;24237:35:::1;::::0;333:2:1;318:18;24237:35:0::1;;;;;;;24310:7;:17;;;24289:7;:17;;;:38;24285:253;;24363:6;:13:::0;:17:::1;::::0;24379:1:::1;::::0;24363:17:::1;:::i;:::-;24348:12;;:32;24344:183;;;24401:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;24450:15:0::1;24434:13;:31:::0;24498:12:::1;::::0;24489:22:::1;::::0;345:25:1;;;24489:22:0::1;::::0;333:2:1;318:18;24489:22:0::1;;;;;;;24344:183;23017:1528;;;;;;;;19216:20:::0;18507:1;19758:21;;19575:212;29248:208;29304:7;29327:12;29349;;;;;;;;;;;:28;;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29015:225;29084:7;29104:26;29133;:24;:26::i;32165:98::-;2917:13;:11;:13::i;:::-;32233:11:::1;:22:::0;32165:98::o;32831:232::-;2917:13;:11;:13::i;:::-;32956:47:::1;::::0;32905:21:::1;::::0;32884:18:::1;::::0;32964:10:::1;::::0;32905:21;;32884:18;32956:47;32884:18;32956:47;32905:21;32964:10;32956:47:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32937:66;;;33022:7;33014:41;;;::::0;::::1;::::0;;11660:2:1;33014:41:0::1;::::0;::::1;11642:21:1::0;11699:2;11679:18;;;11672:30;11738:23;11718:18;;;11711:51;11779:18;;33014:41:0::1;11458:345:1::0;33014:41:0::1;32873:190;;32831:232::o:0;29900:109::-;29946:7;29973:6;29980:12;;29973:20;;;;;;;;:::i;:::-;;;;;;;;;;;:28;;;29966:35;;29900:109;:::o;28555:219::-;28622:7;28642:25;28670;:23;:25::i;3304:201::-;2917:13;:11;:13::i;:::-;3393:22:::1;::::0;::::1;3385:73;;;::::0;::::1;::::0;;12010:2:1;3385:73:0::1;::::0;::::1;11992:21:1::0;12049:2;12029:18;;;12022:30;12088:34;12068:18;;;12061:62;12159:8;12139:18;;;12132:36;12185:19;;3385:73:0::1;11808:402:1::0;3385:73:0::1;3469:28;3488:8;3469:18;:28::i;29464:210::-:0;29521:7;29544:12;29566:13;;;;;;;;;;;:29;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19252:315;18550:1;19381:7;;:18;19377:88;;19423:30;;;;;;;;;;;;;;19377:88;18550:1;19542:7;:17;19252:315::o;32644:179::-;32736:6;:13;32721:12;;32687:13;;-1:-1:-1;32713:64:0;;;;;;;7839:2:1;32713:64:0;;;7821:21:1;7878:2;7858:18;;;7851:30;7917:25;7897:18;;;7890:53;7960:18;;32713:64:0;7637:347:1;32713:64:0;32795:6;32802:12;;32795:20;;;;;;;;:::i;:::-;;;;;;;;;;;32788:27;;32644:179;:::o;1415:98::-;1473:7;1500:5;1504:1;1500;:5;:::i;1521:98::-;1579:7;1606:5;1610:1;1606;:5;:::i;12344:270::-;12542:53;;12557:18;12948:15:1;;;12542:53:0;;;12930:34:1;13000:15;;;12980:18;;;12973:43;13032:18;;;13025:34;;;12488:118:0;;12522:5;;12557:18;;;;;12842::1;;12542:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12488:19;:118::i;:::-;12344:270;;;;:::o;1203:98::-;1261:7;1288:5;1292:1;1288;:5;:::i;3053:132::-;3004:7;3031:6;3117:23;3031:6;2485:10;3117:23;3109:68;;;;;;;13272:2:1;3109:68:0;;;13254:21:1;;;13291:18;;;13284:30;13350:34;13330:18;;;13323:62;13402:18;;3109:68:0;13070:356:1;11903:196:0;12047:43;;12062:14;10158:55:1;;;12047:43:0;;;10140:74:1;10230:18;;;10223:34;;;12020:71:0;;12040:5;;12062:14;;;;;10113:18:1;;12047:43:0;9966:297:1;12020:71:0;11903:196;;;:::o;3513:191::-;3587:16;3606:6;;;3623:17;;;;;;;;;;3656:40;;3606:6;;;;;;;3656:40;;3587:16;3656:40;3576:128;3513:191;:::o;15098:638::-;15522:23;15548:33;:27;;;15576:4;15548:27;:33::i;:::-;15522:59;;15596:10;:17;15617:1;15596:22;;:57;;;;;15634:10;15623:30;;;;;;;;;;;;:::i;:::-;15622:31;15596:57;15592:137;;;15677:40;;;;;571:42:1;559:55;;15677:40:0;;;541:74:1;514:18;;15677:40:0;381:240:1;7016:176:0;7109:12;7146:38;7168:6;7176:4;7182:1;7109:12;7806;7820:23;7847:6;:11;;7866:5;7887:4;7847:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7805:97;;;;7920:55;7947:6;7955:7;7964:10;7920:26;:55::i;:::-;7913:62;7527:456;-1:-1:-1;;;;;;7527:456:0:o;9116:597::-;9264:12;9294:7;9289:417;;9318:19;9326:10;9318:7;:19::i;:::-;9289:417;;;9546:17;;:22;:49;;;;-1:-1:-1;9572:18:0;;;;:23;9546:49;9542:121;;;9623:24;;;;;571:42:1;559:55;;9623:24:0;;;541:74:1;514:18;;9623:24:0;381:240:1;9542:121:0;-1:-1:-1;9684:10:0;9677:17;;10298:528;10431:17;;:21;10427:392;;10663:10;10657:17;10720:15;10707:10;10703:2;10699:19;10692:44;10427:392;10790:17;;;;;;;;;;;;;;14:180: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;165:23:1;;14:180;-1:-1:-1;14:180:1:o;626:196::-;694:20;;754:42;743:54;;733:65;;723:93;;812:1;809;802:12;723:93;626:196;;;:::o;827:186::-;886:6;939:2;927:9;918:7;914:23;910:32;907:52;;;955:1;952;945:12;907:52;978:29;997:9;978:29;:::i;1271:334::-;1348:6;1356;1364;1417:2;1405:9;1396:7;1392:23;1388:32;1385:52;;;1433:1;1430;1423:12;1385:52;1456:29;1475:9;1456:29;:::i;:::-;1446:39;;1504:38;1538:2;1527:9;1523:18;1504:38;:::i;:::-;1494:48;;1561:38;1595:2;1584:9;1580:18;1561:38;:::i;:::-;1551:48;;1271:334;;;;;:::o;1610:248::-;1678:6;1686;1739:2;1727:9;1718:7;1714:23;1710:32;1707:52;;;1755:1;1752;1745:12;1707:52;-1:-1:-1;;1778:23:1;;;1848:2;1833:18;;;1820:32;;-1:-1:-1;1610:248:1:o;2124:316::-;2201:6;2209;2217;2270:2;2258:9;2249:7;2245:23;2241:32;2238:52;;;2286:1;2283;2276:12;2238:52;-1:-1:-1;;2309:23:1;;;2379:2;2364:18;;2351:32;;-1:-1:-1;2430:2:1;2415:18;;;2402:32;;2124:316;-1:-1:-1;2124:316:1:o;3500:184::-;3552:77;3549:1;3542:88;3649:4;3646:1;3639:15;3673:4;3670:1;3663:15;3689:125;3754:9;;;3775:10;;;3772:36;;;3788:18;;:::i;4526:184::-;4578:77;4575:1;4568:88;4675:4;4672:1;4665:15;4699:4;4696:1;4689:15;4715:128;4782:9;;;4803:11;;;4800:37;;;4817:18;;:::i;5258:195::-;5297:3;5328:66;5321:5;5318:77;5315:103;;5398:18;;:::i;:::-;-1:-1:-1;5445:1:1;5434:13;;5258:195::o;5458:179::-;5536:13;;5589:22;5578:34;;5568:45;;5558:73;;5627:1;5624;5617:12;5642:473;5745:6;5753;5761;5769;5777;5830:3;5818:9;5809:7;5805:23;5801:33;5798:53;;;5847:1;5844;5837:12;5798:53;5870:39;5899:9;5870:39;:::i;:::-;5860:49;;5949:2;5938:9;5934:18;5928:25;5918:35;;5993:2;5982:9;5978:18;5972:25;5962:35;;6037:2;6026:9;6022:18;6016:25;6006:35;;6060:49;6104:3;6093:9;6089:19;6060:49;:::i;:::-;6050:59;;5642:473;;;;;;;;:::o;6120:292::-;6192:9;;;6159:7;6217:9;;6234:66;6228:73;;6213:89;6210:115;;;6305:18;;:::i;:::-;6378:1;6369:7;6364:16;6361:1;6358:23;6354:1;6347:9;6344:38;6334:72;;6386:18;;:::i;9091:184::-;9161:6;9214:2;9202:9;9193:7;9189:23;9185:32;9182:52;;;9230:1;9227;9220:12;9182:52;-1:-1:-1;9253:16:1;;9091:184;-1:-1:-1;9091:184:1:o;10268:277::-;10335:6;10388:2;10376:9;10367:7;10363:23;10359:32;10356:52;;;10404:1;10401;10394:12;10356:52;10436:9;10430:16;10489:5;10482:13;10475:21;10468:5;10465:32;10455:60;;10511:1;10508;10501:12;12215:168;12288:9;;;12319;;12336:15;;;12330:22;;12316:37;12306:71;;12357:18;;:::i;12388:274::-;12428:1;12454;12444:189;;12489:77;12486:1;12479:88;12590:4;12587:1;12580:15;12618:4;12615:1;12608:15;12444:189;-1:-1:-1;12647:9:1;;12388:274::o;13431:412::-;13560:3;13598:6;13592:13;13623:1;13633:129;13647:6;13644:1;13641:13;13633:129;;;13745:4;13729:14;;;13725:25;;13719:32;13706:11;;;13699:53;13662:12;13633:129;;;-1:-1:-1;13817:1:1;13781:16;;13806:13;;;-1:-1:-1;13781:16:1;13431:412;-1:-1:-1;13431:412:1:o
Swarm Source
ipfs://0f546cc57f20d75a549ea04dfd4dc40dca5e5dcd025bf47c584fcfc644060be3
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.