Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 66 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 9951430 | 1691 days ago | IN | 105.97149366 ETH | 0.00105838 | ||||
Set Cap And Pric... | 9948551 | 1691 days ago | IN | 0 ETH | 0.0018586 | ||||
Transfer | 9948507 | 1691 days ago | IN | 22.43638774 ETH | 0.00246955 | ||||
Transfer | 9948338 | 1692 days ago | IN | 34.16449951 ETH | 0.00238135 | ||||
Transfer | 9947977 | 1692 days ago | IN | 22.43638774 ETH | 0.00158757 | ||||
Transfer | 9947851 | 1692 days ago | IN | 22.43638774 ETH | 0.00176397 | ||||
Transfer | 9946717 | 1692 days ago | IN | 34.16449951 ETH | 0.00264595 | ||||
Transfer | 9946709 | 1692 days ago | IN | 34.16449951 ETH | 0.0001869 | ||||
Transfer | 9946709 | 1692 days ago | IN | 34.16449951 ETH | 0.000105 | ||||
Transfer | 9946622 | 1692 days ago | IN | 34.16449951 ETH | 0.00040571 | ||||
Transfer | 9946600 | 1692 days ago | IN | 34.16449951 ETH | 0.00141117 | ||||
Set Cap And Pric... | 9946585 | 1692 days ago | IN | 0 ETH | 0.00092906 | ||||
Set Cap And Pric... | 9946583 | 1692 days ago | IN | 0 ETH | 0.00092894 | ||||
Set Cap And Pric... | 9946579 | 1692 days ago | IN | 0 ETH | 0.00092906 | ||||
Set Cap And Pric... | 9946571 | 1692 days ago | IN | 0 ETH | 0.00092918 | ||||
Set Cap And Pric... | 9946567 | 1692 days ago | IN | 0 ETH | 0.00092906 | ||||
Set Cap And Pric... | 9946548 | 1692 days ago | IN | 0 ETH | 0.00092918 | ||||
Set Cap And Pric... | 9946531 | 1692 days ago | IN | 0 ETH | 0.00092918 | ||||
Transfer | 9934205 | 1694 days ago | IN | 105.97149366 ETH | 0.0032016 | ||||
Transfer | 9934192 | 1694 days ago | IN | 164.25581518 ETH | 0.01058382 | ||||
Transfer | 9934144 | 1694 days ago | IN | 100.67291898 ETH | 0.00158757 | ||||
Transfer | 9934127 | 1694 days ago | IN | 529.85746834 ETH | 0.01058382 | ||||
Transfer | 9934112 | 1694 days ago | IN | 529.85746834 ETH | 0.00696432 | ||||
Set Cap And Pric... | 9933665 | 1694 days ago | IN | 0 ETH | 0.0009293 | ||||
Set Cap And Pric... | 9933659 | 1694 days ago | IN | 0 ETH | 0.00092918 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|
9951430 | 1691 days ago | 105.97149366 ETH | ||||
9948507 | 1691 days ago | 22.43638774 ETH | ||||
9948338 | 1692 days ago | 34.16449951 ETH | ||||
9947977 | 1692 days ago | 22.43638774 ETH | ||||
9947851 | 1692 days ago | 22.43638774 ETH | ||||
9946717 | 1692 days ago | 34.16449951 ETH | ||||
9946622 | 1692 days ago | 34.16449951 ETH | ||||
9946600 | 1692 days ago | 34.16449951 ETH | ||||
9934205 | 1694 days ago | 105.97149366 ETH | ||||
9934192 | 1694 days ago | 164.25581518 ETH | ||||
9934144 | 1694 days ago | 100.67291898 ETH | ||||
9934127 | 1694 days ago | 529.85746834 ETH | ||||
9316992 | 1789 days ago | 301.95707495 ETH | ||||
9316984 | 1789 days ago | 0.03 ETH | ||||
9244981 | 1800 days ago | 697.41734272 ETH | ||||
9244865 | 1800 days ago | 0.03 ETH | ||||
9033046 | 1838 days ago | 328.34252692 ETH | ||||
9003681 | 1844 days ago | 675.33418586 ETH | ||||
8943185 | 1854 days ago | 783.30072223 ETH | ||||
8943173 | 1854 days ago | 0.03 ETH | ||||
8918664 | 1858 days ago | 317.32333192 ETH | ||||
8918553 | 1858 days ago | 740.43 ETH | ||||
8846408 | 1870 days ago | 717.38 ETH | ||||
8846406 | 1870 days ago | 500 ETH | ||||
8846400 | 1870 days ago | 500 ETH |
Loading...
Loading
Contract Name:
Privatesale
Compiler Version
v0.5.8+commit.23d335f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2019-10-31 */ // File: contracts/openzeppelin-solidity/token/ERC20/IERC20.sol pragma solidity ^0.5.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. Does not include * the optional functions; to access them see `ERC20Detailed`. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through `transferFrom`. This is * zero by default. * * This value changes when `approve` or `transferFrom` are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * > Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an `Approval` event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a `Transfer` event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to `approve`. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/openzeppelin-solidity/math/SafeMath.sol pragma solidity ^0.5.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // Solidity only automatically asserts when dividing by 0 require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } // File: contracts/openzeppelin-solidity/utils/Address.sol pragma solidity ^0.5.0; /** * @dev Collection of functions related to the address type, */ library Address { /** * @dev Returns true if `account` is a contract. * * This test is non-exhaustive, and there may be false-negatives: during the * execution of a contract's constructor, its address will be reported as * not containing a contract. * * > It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. */ function isContract(address account) internal view returns (bool) { // This method relies in extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } } // File: contracts/openzeppelin-solidity/token/ERC20/SafeERC20.sol pragma solidity ^0.5.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using SafeMath for uint256; using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' // solhint-disable-next-line max-line-length require((value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).add(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 newAllowance = token.allowance(address(this), spender).sub(value); callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. // A Solidity high level call has three parts: // 1. The target address is checked to verify it contains contract code // 2. The call itself is made, and success asserted // 3. The return value is decoded, which in turn checks the size of the returned data. // solhint-disable-next-line max-line-length require(address(token).isContract(), "SafeERC20: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = address(token).call(data); require(success, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional // solhint-disable-next-line max-line-length require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/openzeppelin-solidity/utils/ReentrancyGuard.sol pragma solidity ^0.5.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the `nonReentrant` modifier * available, which can be aplied 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. */ contract ReentrancyGuard { /// @dev counter to allow mutex lock with only one SSTORE operation uint256 private _guardCounter; constructor () internal { // The counter starts at one to prevent changing it from zero to a non-zero // value, which is a more expensive operation. _guardCounter = 1; } /** * @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 make it call a * `private` function that does the actual work. */ modifier nonReentrant() { _guardCounter += 1; uint256 localCounter = _guardCounter; _; require(localCounter == _guardCounter, "ReentrancyGuard: reentrant call"); } } // File: contracts/openzeppelin-solidity/crowdsale/Crowdsale.sol pragma solidity ^0.5.0; /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale, * allowing investors to purchase tokens with ether. This contract implements * such functionality in its most fundamental form and can be extended to provide additional * functionality and/or custom behavior. * The external interface represents the basic interface for purchasing tokens, and conforms * the base architecture for crowdsales. It is *not* intended to be modified / overridden. * The internal interface conforms the extensible and modifiable surface of crowdsales. Override * the methods to add functionality. Consider using 'super' where appropriate to concatenate * behavior. */ contract Crowdsale is ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; // The token being sold IERC20 private _token; // Address where funds are collected address payable private _wallet; // How many token units a buyer gets per wei. // The rate is the conversion between wei and the smallest and indivisible token unit. // So, if you are using a rate of 1 with a ERC20Detailed token with 3 decimals called TOK // 1 wei will give you 1 unit, or 0.001 TOK. uint256 private _rate; // Amount of wei raised uint256 private _weiRaised; /** * Event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokensPurchased(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); /** * @param rate Number of token units a buyer gets per wei * @dev The rate is the conversion between wei and the smallest and indivisible * token unit. So, if you are using a rate of 1 with a ERC20Detailed token * with 3 decimals called TOK, 1 wei will give you 1 unit, or 0.001 TOK. * @param wallet Address where collected funds will be forwarded to * @param token Address of the token being sold */ constructor (uint256 rate, address payable wallet, IERC20 token) public { require(rate > 0, "Crowdsale: rate is 0"); require(wallet != address(0), "Crowdsale: wallet is the zero address"); require(address(token) != address(0), "Crowdsale: token is the zero address"); _rate = rate; _wallet = wallet; _token = token; } /** * @dev fallback function ***DO NOT OVERRIDE*** * Note that other contracts will transfer funds with a base gas stipend * of 2300, which is not enough to call buyTokens. Consider calling * buyTokens directly when purchasing tokens from a contract. */ function () external payable { buyTokens(msg.sender); } /** * @return the token being sold. */ function token() public view returns (IERC20) { return _token; } /** * @return the address where funds are collected. */ function wallet() public view returns (address payable) { return _wallet; } /** * @return the number of token units a buyer gets per wei. */ function rate() public view returns (uint256) { return _rate; } /** * @return the amount of wei raised. */ function weiRaised() public view returns (uint256) { return _weiRaised; } /** * @notice This is modified to update purchase amount. * @dev low level token purchase ***DO NOT OVERRIDE*** * This function has a non-reentrancy guard, so it shouldn't be called by * another `nonReentrant` function. * @param beneficiary Recipient of the token purchase */ function buyTokens(address beneficiary) public nonReentrant payable { uint256 weiAmount = msg.value; // adjust weiAmount with respect to cap and individual cap. weiAmount = _updatePurchaseAmount(beneficiary, weiAmount); _preValidatePurchase(beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount); // update state _weiRaised = _weiRaised.add(weiAmount); _processPurchase(beneficiary, tokens); emit TokensPurchased(msg.sender, beneficiary, weiAmount, tokens); _updatePurchasingState(beneficiary, weiAmount); _forwardFunds(weiAmount); _postValidatePurchase(beneficiary, weiAmount); } /** * @dev Update of an incoming purchase amount. * @param beneficiary Address performing the token purchase * @param weiAmount Value in wei involved in the purchase */ function _updatePurchaseAmount(address beneficiary, uint weiAmount) internal returns (uint) { return weiAmount; } /** * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. * Use `super` in contracts that inherit from Crowdsale to extend their validations. * Example from CappedCrowdsale.sol's _preValidatePurchase method: * super._preValidatePurchase(beneficiary, weiAmount); * require(weiRaised().add(weiAmount) <= cap); * @param beneficiary Address performing the token purchase * @param weiAmount Value in wei involved in the purchase */ function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view { require(beneficiary != address(0), "Crowdsale: beneficiary is the zero address"); require(weiAmount != 0, "Crowdsale: weiAmount is 0"); } /** * @dev Validation of an executed purchase. Observe state and use revert statements to undo rollback when valid * conditions are not met. * @param beneficiary Address performing the token purchase * @param weiAmount Value in wei involved in the purchase */ function _postValidatePurchase(address beneficiary, uint256 weiAmount) internal view { // solhint-disable-previous-line no-empty-blocks } /** * @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends * its tokens. * @param beneficiary Address performing the token purchase * @param tokenAmount Number of tokens to be emitted */ function _deliverTokens(address beneficiary, uint256 tokenAmount) internal { _token.safeTransfer(beneficiary, tokenAmount); } /** * @dev Executed when a purchase has been validated and is ready to be executed. Doesn't necessarily emit/send * tokens. * @param beneficiary Address receiving the tokens * @param tokenAmount Number of tokens to be purchased */ function _processPurchase(address beneficiary, uint256 tokenAmount) internal { _deliverTokens(beneficiary, tokenAmount); } /** * @dev Override for extensions that require an internal state to check for validity (current user contributions, * etc.) * @param beneficiary Address receiving the tokens * @param weiAmount Value in wei involved in the purchase */ function _updatePurchasingState(address beneficiary, uint256 weiAmount) internal { // solhint-disable-previous-line no-empty-blocks } /** * @dev Override to extend the way in which ether is converted to tokens. * @param weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 weiAmount) internal view returns (uint256) { return weiAmount.mul(_rate); } /** * @dev Determines how ETH is stored/forwarded on purchases. */ function _forwardFunds(uint256 amount) internal { _wallet.transfer(amount); } } // File: contracts/openzeppelin-solidity/access/Roles.sol pragma solidity ^0.5.0; /** * @title Roles * @dev Library for managing addresses assigned to a Role. */ library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev Give an account access to this role. */ function add(Role storage role, address account) internal { require(!has(role, account), "Roles: account already has role"); role.bearer[account] = true; } /** * @dev Remove an account's access to this role. */ function remove(Role storage role, address account) internal { require(has(role, account), "Roles: account does not have role"); role.bearer[account] = false; } /** * @dev Check if an account has this role. * @return bool */ function has(Role storage role, address account) internal view returns (bool) { require(account != address(0), "Roles: account is the zero address"); return role.bearer[account]; } } // File: contracts/openzeppelin-solidity/access/roles/CapperRole.sol pragma solidity ^0.5.0; contract CapperRole { using Roles for Roles.Role; event CapperAdded(address indexed account); event CapperRemoved(address indexed account); Roles.Role private _cappers; constructor () internal { _addCapper(msg.sender); } modifier onlyCapper() { require(isCapper(msg.sender), "CapperRole: caller does not have the Capper role"); _; } function isCapper(address account) public view returns (bool) { return _cappers.has(account); } function addCapper(address account) public onlyCapper { _addCapper(account); } function renounceCapper() public { _removeCapper(msg.sender); } function _addCapper(address account) internal { _cappers.add(account); emit CapperAdded(account); } function _removeCapper(address account) internal { _cappers.remove(account); emit CapperRemoved(account); } } // File: contracts/ds/ds-math.sol // https://github.com/dapphub/ds-math/blob/master/src/math.sol /// math.sol -- mixin for inline numerical wizardry // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. pragma solidity >0.4.13; contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x, "ds-math-add-overflow"); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x, "ds-math-sub-underflow"); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x, "ds-math-mul-overflow"); } function min(uint x, uint y) internal pure returns (uint z) { return x <= y ? x : y; } function max(uint x, uint y) internal pure returns (uint z) { return x >= y ? x : y; } function imin(int x, int y) internal pure returns (int z) { return x <= y ? x : y; } function imax(int x, int y) internal pure returns (int z) { return x >= y ? x : y; } uint constant WAD = 10 ** 18; uint constant RAY = 10 ** 27; function wmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), WAD / 2) / WAD; } function rmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), RAY / 2) / RAY; } function wdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, WAD), y / 2) / y; } function rdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, RAY), y / 2) / y; } // This famous algorithm is called "exponentiation by squaring" // and calculates x^n with x as fixed-point and n as regular unsigned. // // It's O(log n), instead of O(n) for naive repeated multiplication. // // These facts are why it works: // // If n is even, then x^n = (x^2)^(n/2). // If n is odd, then x^n = x * x^(n-1), // and applying the equation for even x gives // x^n = x * (x^2)^((n-1) / 2). // // Also, EVM division is flooring and // floor[(n-1) / 2] = floor[n / 2]. // function rpow(uint x, uint n) internal pure returns (uint z) { z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } } // File: contracts/openzeppelin-solidity/crowdsale/validation/IndividuallyPricedCrowdsale.sol pragma solidity ^0.5.0; // import "../../math/SafeMath.sol"; /** * @title IndividuallyPricedCrowdsale * @dev Crowdsale with per-purchaser prices. */ contract IndividuallyPricedCrowdsale is Crowdsale, CapperRole, DSMath { // using SafeMath for uint256; // _prices should be a RAY value. mapping(address => uint256) private _prices; event PriceSet(address indexed purchaser, uint256 price); /** * @dev Sets a specific purchaser's price parameters. * @param purchaser Address to be priced * @param price Price value in RAY */ function setPrice(address purchaser, uint256 price) public onlyCapper { require(_prices[purchaser] == 0, "IndividuallyPricedCrowdsale: price was already set"); require(price != 0, "IndividuallyPricedCrowdsale: price cannot be zero"); _prices[purchaser] = price; emit PriceSet(purchaser, price); } function getPrice(address purchaser) public view returns (uint256) { return _prices[purchaser]; } /** * @dev Validation of purchase. * @param beneficiary Address whose cap is to be checked * @param weiAmount Value in wei to be converted into tokens */ function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view { // solhint-disable-next-line max-line-length require(_prices[msg.sender] != 0, "IndividuallyPricedCrowdsale: the price of purchaser must be set"); super._preValidatePurchase(beneficiary, weiAmount); } /** * @dev Calculate the amount of tokens, given numerator and denominator for the purchaser. * @param weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 weiAmount) internal view returns (uint256) { uint256 price = _prices[msg.sender]; uint256 pricedWeiAmount = wmul(price, weiAmount); // uint256 pricedWeiAmount = ray2wad(rmul(price, wad2ray(weiAmount))); return super._getTokenAmount(pricedWeiAmount); } } // File: contracts/openzeppelin-solidity/crowdsale/validation/CappedCrowdsale.sol pragma solidity ^0.5.0; /** * @title CappedCrowdsale * @dev Crowdsale with a limit for total contributions. */ contract CappedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 private _cap; /** * @dev Constructor, takes maximum amount of wei accepted in the crowdsale. * @param cap Max amount of wei to be contributed */ constructor (uint256 cap) public { require(cap > 0, "CappedCrowdsale: cap is 0"); _cap = cap; } /** * @return the cap of the crowdsale. */ function cap() public view returns (uint256) { return _cap; } /** * @dev Checks whether the cap has been reached. * @return Whether the cap was reached */ function capReached() public view returns (bool) { return weiRaised() >= _cap; } /** * @dev Extend parent behavior requiring purchase to respect the funding cap. * @param beneficiary Token purchaser * @param weiAmount Amount of wei contributed */ function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view { super._preValidatePurchase(beneficiary, weiAmount); require(weiRaised().add(weiAmount) <= _cap, "CappedCrowdsale: cap exceeded"); } } // File: contracts/openzeppelin-solidity/crowdsale/validation/IndividuallyCappedCrowdsale.sol pragma solidity ^0.5.0; /** * @title IndividuallyCappedCrowdsale * @dev Crowdsale with per-beneficiary caps. */ contract IndividuallyCappedCrowdsale is Crowdsale, CapperRole { using SafeMath for uint256; mapping(address => uint256) private _contributions; mapping(address => uint256) private _caps; event CapSet(address indexed beneficiary, uint256 cap); /** * @dev Sets a specific beneficiary's maximum contribution. * @param beneficiary Address to be capped * @param cap Wei limit for individual contribution */ function setCap(address beneficiary, uint256 cap) public onlyCapper { _caps[beneficiary] = cap; emit CapSet(beneficiary, cap); } /** * @dev Returns the cap of a specific beneficiary. * @param beneficiary Address whose cap is to be checked * @return Current cap for individual beneficiary */ function getCap(address beneficiary) public view returns (uint256) { return _caps[beneficiary]; } /** * @dev Returns the amount contributed so far by a specific beneficiary. * @param beneficiary Address of contributor * @return Beneficiary contribution so far */ function getContribution(address beneficiary) public view returns (uint256) { return _contributions[beneficiary]; } /** * @dev Extend parent behavior requiring purchase to respect the beneficiary's funding cap. * @param beneficiary Token purchaser * @param weiAmount Amount of wei contributed */ function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view { super._preValidatePurchase(beneficiary, weiAmount); // solhint-disable-next-line max-line-length require(_contributions[beneficiary].add(weiAmount) <= _caps[beneficiary], "IndividuallyCappedCrowdsale: beneficiary's cap exceeded"); } /** * @dev Extend parent behavior to update beneficiary contributions. * @param beneficiary Token purchaser * @param weiAmount Amount of wei contributed */ function _updatePurchasingState(address beneficiary, uint256 weiAmount) internal { super._updatePurchasingState(beneficiary, weiAmount); _contributions[beneficiary] = _contributions[beneficiary].add(weiAmount); } } // File: contracts/openzeppelin-solidity/access/roles/WhitelistAdminRole.sol pragma solidity ^0.5.0; /** * @title WhitelistAdminRole * @dev WhitelistAdmins are responsible for assigning and removing Whitelisted accounts. */ contract WhitelistAdminRole { using Roles for Roles.Role; event WhitelistAdminAdded(address indexed account); event WhitelistAdminRemoved(address indexed account); Roles.Role private _whitelistAdmins; constructor () internal { _addWhitelistAdmin(msg.sender); } modifier onlyWhitelistAdmin() { require(isWhitelistAdmin(msg.sender), "WhitelistAdminRole: caller does not have the WhitelistAdmin role"); _; } function isWhitelistAdmin(address account) public view returns (bool) { return _whitelistAdmins.has(account); } function addWhitelistAdmin(address account) public onlyWhitelistAdmin { _addWhitelistAdmin(account); } function renounceWhitelistAdmin() public { _removeWhitelistAdmin(msg.sender); } function _addWhitelistAdmin(address account) internal { _whitelistAdmins.add(account); emit WhitelistAdminAdded(account); } function _removeWhitelistAdmin(address account) internal { _whitelistAdmins.remove(account); emit WhitelistAdminRemoved(account); } } // File: contracts/openzeppelin-solidity/access/roles/WhitelistedRole.sol pragma solidity ^0.5.0; /** * @title WhitelistedRole * @dev Whitelisted accounts have been approved by a WhitelistAdmin to perform certain actions (e.g. participate in a * crowdsale). This role is special in that the only accounts that can add it are WhitelistAdmins (who can also remove * it), and not Whitelisteds themselves. */ contract WhitelistedRole is WhitelistAdminRole { using Roles for Roles.Role; event WhitelistedAdded(address indexed account); event WhitelistedRemoved(address indexed account); Roles.Role private _whitelisteds; modifier onlyWhitelisted() { require(isWhitelisted(msg.sender), "WhitelistedRole: caller does not have the Whitelisted role"); _; } function isWhitelisted(address account) public view returns (bool) { return _whitelisteds.has(account); } function addWhitelisted(address account) public onlyWhitelistAdmin { _addWhitelisted(account); } function removeWhitelisted(address account) public onlyWhitelistAdmin { _removeWhitelisted(account); } function renounceWhitelisted() public { _removeWhitelisted(msg.sender); } function _addWhitelisted(address account) internal { _whitelisteds.add(account); emit WhitelistedAdded(account); } function _removeWhitelisted(address account) internal { _whitelisteds.remove(account); emit WhitelistedRemoved(account); } } // File: contracts/openzeppelin-solidity/crowdsale/validation/WhitelistCrowdsale.sol pragma solidity ^0.5.0; /** * @title WhitelistCrowdsale * @dev Crowdsale in which only whitelisted users can contribute. */ contract WhitelistCrowdsale is WhitelistedRole, Crowdsale { /** * @dev Extend parent behavior requiring beneficiary to be whitelisted. Note that no * restriction is imposed on the account sending the transaction. * @param _beneficiary Token beneficiary * @param _weiAmount Amount of wei contributed */ function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal view { require(isWhitelisted(_beneficiary), "WhitelistCrowdsale: beneficiary doesn't have the Whitelisted role"); super._preValidatePurchase(_beneficiary, _weiAmount); } } // File: contracts/Privatesale.sol pragma solidity ^0.5.0; contract Privatesale is WhitelistCrowdsale, IndividuallyCappedCrowdsale, IndividuallyPricedCrowdsale { uint256 public smallPayment = 3e16; // 0.03 ether constructor (address payable wallet, IERC20 token) public Crowdsale(1, wallet, token) {} function setCapAndPrice( address purchaser, uint256 cap, uint256 price ) public { addWhitelisted(purchaser); setCap(purchaser, cap); setPrice(purchaser, price); } /** * @dev Only accept payment if wei amount is equal to 0.03 ether or the purchaser cap * @param beneficiary Token purchaser * @param weiAmount Amount of wei contributed */ function _preValidatePurchase(address beneficiary, uint256 weiAmount) internal view { super._preValidatePurchase(beneficiary, weiAmount); require(msg.sender == beneficiary, "Privatesale: beneficiary must be msg sender"); uint256 amount = getContribution(beneficiary).add(weiAmount); require(amount == smallPayment || amount == getCap(beneficiary), "Privatesale: wei amount should be equal to purchaser cap or equal to 0.03 ether"); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":false,"inputs":[{"name":"purchaser","type":"address"},{"name":"price","type":"uint256"}],"name":"setPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"smallPayment","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"purchaser","type":"address"},{"name":"cap","type":"uint256"},{"name":"price","type":"uint256"}],"name":"setCapAndPrice","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"beneficiary","type":"address"}],"name":"getContribution","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"removeWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"rate","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isCapper","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelisted","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"weiRaised","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"purchaser","type":"address"}],"name":"getPrice","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"wallet","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceCapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addWhitelistAdmin","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"},{"name":"cap","type":"uint256"}],"name":"setCap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"account","type":"address"}],"name":"addCapper","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"beneficiary","type":"address"}],"name":"getCap","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"isWhitelistAdmin","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceWhitelisted","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"beneficiary","type":"address"}],"name":"buyTokens","outputs":[],"payable":true,"stateMutability":"payable","type":"function"},{"constant":true,"inputs":[],"name":"token","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"inputs":[{"name":"wallet","type":"address"},{"name":"token","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"payable":true,"stateMutability":"payable","type":"fallback"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":false,"name":"price","type":"uint256"}],"name":"PriceSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"cap","type":"uint256"}],"name":"CapSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"CapperAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"CapperRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"purchaser","type":"address"},{"indexed":true,"name":"beneficiary","type":"address"},{"indexed":false,"name":"value","type":"uint256"},{"indexed":false,"name":"amount","type":"uint256"}],"name":"TokensPurchased","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistedRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"account","type":"address"}],"name":"WhitelistAdminRemoved","type":"event"}]
Contract Creation Code
6080604052666a94d74f430000600b553480156200001c57600080fd5b5060405160408062002870833981018060405260408110156200003e57600080fd5b810190808051906020019092919080519060200190929190505050600182826200006e33620002a260201b60201c565b600160028190555060008311620000ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f43726f776473616c653a2072617465206973203000000000000000000000000081525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000175576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806200284b6025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001fd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180620028056024913960400191505060405180910390fd5b8260058190555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050506200029a336200030360201b60201c565b505062000528565b620002bd8160006200036460201b6200171c1790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b6200031e8160076200036460201b6200171c1790919060201c565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b6200037682826200044860201b60201c565b15620003ea576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180620028296022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6122cd80620005386000396000f3fe6080604052600436106101345760003560e01c80634c5a628c116100ab5780638dfbcf361161006f5780638dfbcf36146105ef578063b3aefb7514610640578063bb5f747b146106a5578063d6cd94731461070e578063ec8ac4d814610725578063fc0c546a1461076957610134565b80634c5a628c146104be578063521eb273146104d55780635d5576f81461052c5780637362d9c81461054357806380ad2cf31461059457610134565b8063291d9549116100fd578063291d9549146102e05780632c4e722e14610331578063395645611461035c5780633af32abf146103c55780634042b66f1461042e57806341976e091461045957610134565b8062e4768b1461013f578063100dd9e91461019a57806310154bad146101c557806310cbdb591461021657806321eff7fc1461027b575b61013d336107c0565b005b34801561014b57600080fd5b506101986004803603604081101561016257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061092c565b005b3480156101a657600080fd5b506101af610b12565b6040518082815260200191505060405180910390f35b3480156101d157600080fd5b50610214600480360360208110156101e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b18565b005b34801561022257600080fd5b506102796004803603606081101561023957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610b82565b005b34801561028757600080fd5b506102ca6004803603602081101561029e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ba4565b6040518082815260200191505060405180910390f35b3480156102ec57600080fd5b5061032f6004803603602081101561030357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bed565b005b34801561033d57600080fd5b50610346610c57565b6040518082815260200191505060405180910390f35b34801561036857600080fd5b506103ab6004803603602081101561037f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c61565b604051808215151515815260200191505060405180910390f35b3480156103d157600080fd5b50610414600480360360208110156103e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c7e565b604051808215151515815260200191505060405180910390f35b34801561043a57600080fd5b50610443610c9b565b6040518082815260200191505060405180910390f35b34801561046557600080fd5b506104a86004803603602081101561047c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ca5565b6040518082815260200191505060405180910390f35b3480156104ca57600080fd5b506104d3610cee565b005b3480156104e157600080fd5b506104ea610cf9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053857600080fd5b50610541610d23565b005b34801561054f57600080fd5b506105926004803603602081101561056657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d2e565b005b3480156105a057600080fd5b506105ed600480360360408110156105b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d98565b005b3480156105fb57600080fd5b5061063e6004803603602081101561061257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e8c565b005b34801561064c57600080fd5b5061068f6004803603602081101561066357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ef6565b6040518082815260200191505060405180910390f35b3480156106b157600080fd5b506106f4600480360360208110156106c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f3f565b604051808215151515815260200191505060405180910390f35b34801561071a57600080fd5b50610723610f5c565b005b6107676004803603602081101561073b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107c0565b005b34801561077557600080fd5b5061077e610f67565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60016002600082825401925050819055506000600254905060003490506107e78382610f91565b90506107f38382610f9c565b60006107fe826110ba565b90506108158260065461111f90919063ffffffff16565b60068190555061082584826111a7565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b8484604051808381526020018281526020019250505060405180910390a361089c84836111b5565b6108a582611258565b6108af84836112c4565b50506002548114610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5050565b61093533610c61565b61098a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122406030913960400191505060405180910390fd5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806122706032913960400191505060405180910390fd5b6000811415610a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806120276031913960400191505060405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167ff9a09e2869a1f88523f00504328d7965866201bafe501573db2e114e3375a086826040518082815260200191505060405180910390a25050565b600b5481565b610b2133610f3f565b610b76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806121366040913960400191505060405180910390fd5b610b7f816112c8565b50565b610b8b83610b18565b610b958383610d98565b610b9f838261092c565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bf633610f3f565b610c4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806121366040913960400191505060405180910390fd5b610c5481611322565b50565b6000600554905090565b6000610c7782600761137c90919063ffffffff16565b9050919050565b6000610c9482600161137c90919063ffffffff16565b9050919050565b6000600654905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf73361145a565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d2c336114b4565b565b610d3733610f3f565b610d8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806121366040913960400191505060405180910390fd5b610d958161150e565b50565b610da133610c61565b610df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122406030913960400191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f1c9182333abe71fddddd188f90cabb1c34182de0b0ac74c87944a196460a2d6c826040518082815260200191505060405180910390a25050565b610e9533610c61565b610eea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122406030913960400191505060405180910390fd5b610ef381611568565b50565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610f5582600061137c90919063ffffffff16565b9050919050565b610f6533611322565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081905092915050565b610fa682826115c2565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806120a7602b913960400191505060405180910390fd5b60006110478261103985610ba4565b61111f90919063ffffffff16565b9050600b54811480611060575061105d83610ef6565b81145b6110b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604f815260200180612058604f913960600191505060405180910390fd5b505050565b600080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061110b8285611669565b9050611116816116a9565b92505050919050565b60008082840190508381101561119d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6111b182826116c7565b5050565b6111bf8282611718565b61121181600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111f90919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112c0573d6000803e3d6000fd5b5050565b5050565b6112dc81600161171c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f60405160405180910390a250565b6113368160016117f790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b660405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121146022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61146e8160006117f790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b6114c88160076117f790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b60405160405180910390a250565b61152281600061171c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b61157c81600761171c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806121a0603f913960400191505060405180910390fd5b61166582826118b4565b5050565b6000670de0b6b3a764000061169961168185856119ab565b6002670de0b6b3a76400008161169357fe5b04611a40565b816116a057fe5b04905092915050565b60006116c060055483611ac390919063ffffffff16565b9050919050565b6117148282600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b499092919063ffffffff16565b5050565b5050565b611726828261137c565b15611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611801828261137c565b611856576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120d26021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118be8282611c1a565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461195082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111f90919063ffffffff16565b11156119a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806121df6037913960400191505060405180910390fd5b5050565b6000808214806119c857508282838502925082816119c557fe5b04145b611a3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284019150811015611abd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b600080831415611ad65760009050611b43565b6000828402905082848281611ae757fe5b0414611b3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120f36021913960400191505060405180910390fd5b809150505b92915050565b611c15838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c86565b505050565b611c2382610c7e565b611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180611fe66041913960600191505060405180910390fd5b611c828282611ed1565b5050565b611ca58273ffffffffffffffffffffffffffffffffffffffff16611fd2565b611d17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310611d665780518252602082019150602081019050602083039250611d43565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611dc8576040519150601f19603f3d011682016040523d82523d6000602084013e611dcd565b606091505b509150915081611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115611ecb57808060200190516020811015611e6457600080fd5b8101908080519060200190929190505050611eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612216602a913960400191505060405180910390fd5b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612176602a913960400191505060405180910390fd5b6000811415611fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43726f776473616c653a20776569416d6f756e7420697320300000000000000081525060200191505060405180910390fd5b5050565b600080823b90506000811191505091905056fe57686974656c69737443726f776473616c653a2062656e656669636961727920646f65736e27742068617665207468652057686974656c697374656420726f6c65496e646976696475616c6c7950726963656443726f776473616c653a2070726963652063616e6e6f74206265207a65726f5072697661746573616c653a2077656920616d6f756e742073686f756c6420626520657175616c20746f2070757263686173657220636170206f7220657175616c20746f20302e30332065746865725072697661746573616c653a2062656e6566696369617279206d757374206265206d73672073656e646572526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737357686974656c69737441646d696e526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c69737441646d696e20726f6c6543726f776473616c653a2062656e656669636961727920697320746865207a65726f2061646472657373496e646976696475616c6c7950726963656443726f776473616c653a20746865207072696365206f6620707572636861736572206d75737420626520736574496e646976696475616c6c7943617070656443726f776473616c653a2062656e65666963696172792773206361702065786365656465645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436170706572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652043617070657220726f6c65496e646976696475616c6c7950726963656443726f776473616c653a2070726963652077617320616c726561647920736574a165627a7a7230582060013b02eb6cd9cf4372b209113cf7d224f0b453096ee22de66737888f850753002943726f776473616c653a20746f6b656e20697320746865207a65726f2061646472657373526f6c65733a206163636f756e7420697320746865207a65726f206164647265737343726f776473616c653a2077616c6c657420697320746865207a65726f2061646472657373000000000000000000000000f35a0c48c970d5abfbc1b33096a83bfc87a4a82e0000000000000000000000002c0f8e85ad3dcbec1561f6ce632dff86294e479f
Deployed Bytecode
0x6080604052600436106101345760003560e01c80634c5a628c116100ab5780638dfbcf361161006f5780638dfbcf36146105ef578063b3aefb7514610640578063bb5f747b146106a5578063d6cd94731461070e578063ec8ac4d814610725578063fc0c546a1461076957610134565b80634c5a628c146104be578063521eb273146104d55780635d5576f81461052c5780637362d9c81461054357806380ad2cf31461059457610134565b8063291d9549116100fd578063291d9549146102e05780632c4e722e14610331578063395645611461035c5780633af32abf146103c55780634042b66f1461042e57806341976e091461045957610134565b8062e4768b1461013f578063100dd9e91461019a57806310154bad146101c557806310cbdb591461021657806321eff7fc1461027b575b61013d336107c0565b005b34801561014b57600080fd5b506101986004803603604081101561016257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061092c565b005b3480156101a657600080fd5b506101af610b12565b6040518082815260200191505060405180910390f35b3480156101d157600080fd5b50610214600480360360208110156101e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610b18565b005b34801561022257600080fd5b506102796004803603606081101561023957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190505050610b82565b005b34801561028757600080fd5b506102ca6004803603602081101561029e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ba4565b6040518082815260200191505060405180910390f35b3480156102ec57600080fd5b5061032f6004803603602081101561030357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610bed565b005b34801561033d57600080fd5b50610346610c57565b6040518082815260200191505060405180910390f35b34801561036857600080fd5b506103ab6004803603602081101561037f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c61565b604051808215151515815260200191505060405180910390f35b3480156103d157600080fd5b50610414600480360360208110156103e857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610c7e565b604051808215151515815260200191505060405180910390f35b34801561043a57600080fd5b50610443610c9b565b6040518082815260200191505060405180910390f35b34801561046557600080fd5b506104a86004803603602081101561047c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ca5565b6040518082815260200191505060405180910390f35b3480156104ca57600080fd5b506104d3610cee565b005b3480156104e157600080fd5b506104ea610cf9565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561053857600080fd5b50610541610d23565b005b34801561054f57600080fd5b506105926004803603602081101561056657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610d2e565b005b3480156105a057600080fd5b506105ed600480360360408110156105b757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610d98565b005b3480156105fb57600080fd5b5061063e6004803603602081101561061257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610e8c565b005b34801561064c57600080fd5b5061068f6004803603602081101561066357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610ef6565b6040518082815260200191505060405180910390f35b3480156106b157600080fd5b506106f4600480360360208110156106c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050610f3f565b604051808215151515815260200191505060405180910390f35b34801561071a57600080fd5b50610723610f5c565b005b6107676004803603602081101561073b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506107c0565b005b34801561077557600080fd5b5061077e610f67565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60016002600082825401925050819055506000600254905060003490506107e78382610f91565b90506107f38382610f9c565b60006107fe826110ba565b90506108158260065461111f90919063ffffffff16565b60068190555061082584826111a7565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f6faf93231a456e552dbc9961f58d9713ee4f2e69d15f1975b050ef0911053a7b8484604051808381526020018281526020019250505060405180910390a361089c84836111b5565b6108a582611258565b6108af84836112c4565b50506002548114610928576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0081525060200191505060405180910390fd5b5050565b61093533610c61565b61098a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122406030913960400191505060405180910390fd5b6000600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610a22576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260328152602001806122706032913960400191505060405180910390fd5b6000811415610a7c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260318152602001806120276031913960400191505060405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167ff9a09e2869a1f88523f00504328d7965866201bafe501573db2e114e3375a086826040518082815260200191505060405180910390a25050565b600b5481565b610b2133610f3f565b610b76576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806121366040913960400191505060405180910390fd5b610b7f816112c8565b50565b610b8b83610b18565b610b958383610d98565b610b9f838261092c565b505050565b6000600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610bf633610f3f565b610c4b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806121366040913960400191505060405180910390fd5b610c5481611322565b50565b6000600554905090565b6000610c7782600761137c90919063ffffffff16565b9050919050565b6000610c9482600161137c90919063ffffffff16565b9050919050565b6000600654905090565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610cf73361145a565b565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610d2c336114b4565b565b610d3733610f3f565b610d8c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260408152602001806121366040913960400191505060405180910390fd5b610d958161150e565b50565b610da133610c61565b610df6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122406030913960400191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff167f1c9182333abe71fddddd188f90cabb1c34182de0b0ac74c87944a196460a2d6c826040518082815260200191505060405180910390a25050565b610e9533610c61565b610eea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260308152602001806122406030913960400191505060405180910390fd5b610ef381611568565b50565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000610f5582600061137c90919063ffffffff16565b9050919050565b610f6533611322565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081905092915050565b610fa682826115c2565b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461102a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806120a7602b913960400191505060405180910390fd5b60006110478261103985610ba4565b61111f90919063ffffffff16565b9050600b54811480611060575061105d83610ef6565b81145b6110b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252604f815260200180612058604f913960600191505060405180910390fd5b505050565b600080600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600061110b8285611669565b9050611116816116a9565b92505050919050565b60008082840190508381101561119d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6111b182826116c7565b5050565b6111bf8282611718565b61121181600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111f90919063ffffffff16565b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156112c0573d6000803e3d6000fd5b5050565b5050565b6112dc81600161171c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fee1504a83b6d4a361f4c1dc78ab59bfa30d6a3b6612c403e86bb01ef2984295f60405160405180910390a250565b6113368160016117f790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f270d9b30cf5b0793bbfd54c9d5b94aeb49462b8148399000265144a8722da6b660405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611403576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806121146022913960400191505060405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61146e8160006117f790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f0a8eb35e5ca14b3d6f28e4abf2f128dbab231a58b56e89beb5d636115001e16560405160405180910390a250565b6114c88160076117f790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f427400d279c506df610224b22ecce89b693fc1865864113f21c8d19c1f0c2a3b60405160405180910390a250565b61152281600061171c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f22380c05984257a1cb900161c713dd71d39e74820f1aea43bd3f1bdd2096129960405160405180910390a250565b61157c81600761171c90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fa7555c95b69d4f5cc847881feb4ab2883a1921319e34fa2043747b793d65b36e60405160405180910390a250565b6000600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561165b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603f8152602001806121a0603f913960400191505060405180910390fd5b61166582826118b4565b5050565b6000670de0b6b3a764000061169961168185856119ab565b6002670de0b6b3a76400008161169357fe5b04611a40565b816116a057fe5b04905092915050565b60006116c060055483611ac390919063ffffffff16565b9050919050565b6117148282600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b499092919063ffffffff16565b5050565b5050565b611726828261137c565b15611799576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f526f6c65733a206163636f756e7420616c72656164792068617320726f6c650081525060200191505060405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611801828261137c565b611856576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120d26021913960400191505060405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6118be8282611c1a565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461195082600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461111f90919063ffffffff16565b11156119a7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260378152602001806121df6037913960400191505060405180910390fd5b5050565b6000808214806119c857508282838502925082816119c557fe5b04145b611a3a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284019150811015611abd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b600080831415611ad65760009050611b43565b6000828402905082848281611ae757fe5b0414611b3e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806120f36021913960400191505060405180910390fd5b809150505b92915050565b611c15838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611c86565b505050565b611c2382610c7e565b611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526041815260200180611fe66041913960600191505060405180910390fd5b611c828282611ed1565b5050565b611ca58273ffffffffffffffffffffffffffffffffffffffff16611fd2565b611d17576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310611d665780518252602082019150602081019050602083039250611d43565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611dc8576040519150601f19603f3d011682016040523d82523d6000602084013e611dcd565b606091505b509150915081611e45576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115611ecb57808060200190516020811015611e6457600080fd5b8101908080519060200190929190505050611eca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612216602a913960400191505060405180910390fd5b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f57576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612176602a913960400191505060405180910390fd5b6000811415611fce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f43726f776473616c653a20776569416d6f756e7420697320300000000000000081525060200191505060405180910390fd5b5050565b600080823b90506000811191505091905056fe57686974656c69737443726f776473616c653a2062656e656669636961727920646f65736e27742068617665207468652057686974656c697374656420726f6c65496e646976696475616c6c7950726963656443726f776473616c653a2070726963652063616e6e6f74206265207a65726f5072697661746573616c653a2077656920616d6f756e742073686f756c6420626520657175616c20746f2070757263686173657220636170206f7220657175616c20746f20302e30332065746865725072697661746573616c653a2062656e6566696369617279206d757374206265206d73672073656e646572526f6c65733a206163636f756e7420646f6573206e6f74206861766520726f6c65536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77526f6c65733a206163636f756e7420697320746865207a65726f206164647265737357686974656c69737441646d696e526f6c653a2063616c6c657220646f6573206e6f742068617665207468652057686974656c69737441646d696e20726f6c6543726f776473616c653a2062656e656669636961727920697320746865207a65726f2061646472657373496e646976696475616c6c7950726963656443726f776473616c653a20746865207072696365206f6620707572636861736572206d75737420626520736574496e646976696475616c6c7943617070656443726f776473616c653a2062656e65666963696172792773206361702065786365656465645361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564436170706572526f6c653a2063616c6c657220646f6573206e6f742068617665207468652043617070657220726f6c65496e646976696475616c6c7950726963656443726f776473616c653a2070726963652077617320616c726561647920736574a165627a7a7230582060013b02eb6cd9cf4372b209113cf7d224f0b453096ee22de66737888f8507530029
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f35a0c48c970d5abfbc1b33096a83bfc87a4a82e0000000000000000000000002c0f8e85ad3dcbec1561f6ce632dff86294e479f
-----Decoded View---------------
Arg [0] : wallet (address): 0xf35A0c48c970d5abFBC1B33096A83bFc87A4a82E
Arg [1] : token (address): 0x2C0F8e85ad3DCbEc1561f6cE632DFF86294e479f
-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000f35a0c48c970d5abfbc1b33096a83bfc87a4a82e
Arg [1] : 0000000000000000000000002c0f8e85ad3dcbec1561f6ce632dff86294e479f
Deployed Bytecode Sourcemap
36469:1204:0:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15958:21;15968:10;15958:9;:21::i;:::-;36469:1204;27095:341;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27095:341:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27095:341:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36577:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36577:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34910:110;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34910:110:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34910:110:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;36753:226;;8:9:-1;5:2;;;30:1;27;20:12;5:2;36753:226:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;36753:226:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31423:129;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31423:129:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31423:129:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;35028:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35028:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;35028:116:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16389:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16389:77:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22731:109;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22731:109:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22731:109:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34783:119;;8:9:-1;5:2;;;30:1;27;20:12;5:2;34783:119:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;34783:119:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16534:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16534:87:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27444:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;27444:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;27444:111:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33537:93;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33537:93:0;;;:::i;:::-;;16210:89;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16210:89:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;22948:77;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22948:77:0;;;:::i;:::-;;33413:116;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33413:116:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33413:116:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;30760:151;;8:9:-1;5:2;;;30:1;27;20:12;5:2;30760:151:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;30760:151:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22848:92;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22848:92:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;22848:92:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;31110:111;;8:9:-1;5:2;;;30:1;27;20:12;5:2;31110:111:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;31110:111:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33280:125;;8:9:-1;5:2;;;30:1;27;20:12;5:2;33280:125:0;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;33280:125:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;35152:87;;8:9:-1;5:2;;;30:1;27;20:12;5:2;35152:87:0;;;:::i;:::-;;16946:770;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16946:770:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;16051:78;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16051:78:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;16946:770;12823:1;12806:13;;:18;;;;;;;;;;;12835:20;12858:13;;12835:36;;17025:17;17045:9;17025:29;;17148:45;17170:11;17183:9;17148:21;:45::i;:::-;17136:57;;17206:44;17227:11;17240:9;17206:20;:44::i;:::-;17312:14;17329:26;17345:9;17329:15;:26::i;:::-;17312:43;;17406:25;17421:9;17406:10;;:14;;:25;;;;:::i;:::-;17393:10;:38;;;;17444:37;17461:11;17474:6;17444:16;:37::i;:::-;17525:11;17497:59;;17513:10;17497:59;;;17538:9;17549:6;17497:59;;;;;;;;;;;;;;;;;;;;;;;;17569:46;17592:11;17605:9;17569:22;:46::i;:::-;17628:24;17642:9;17628:13;:24::i;:::-;17663:45;17685:11;17698:9;17663:21;:45::i;:::-;12882:1;;12918:13;;12902:12;:29;12894:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16946:770;;:::o;27095:341::-;22630:20;22639:10;22630:8;:20::i;:::-;22622:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27206:1;27184:7;:18;27192:9;27184:18;;;;;;;;;;;;;;;;:23;27176:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27290:1;27281:5;:10;;27273:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27379:5;27358:7;:18;27366:9;27358:18;;;;;;;;;;;;;;;:26;;;;27411:9;27402:26;;;27422:5;27402:26;;;;;;;;;;;;;;;;;;27095:341;;:::o;36577:34::-;;;;:::o;34910:110::-;33155:28;33172:10;33155:16;:28::i;:::-;33147:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34988:24;35004:7;34988:15;:24::i;:::-;34910:110;:::o;36753:226::-;36876:25;36891:9;36876:14;:25::i;:::-;36912:22;36919:9;36930:3;36912:6;:22::i;:::-;36945:26;36954:9;36965:5;36945:8;:26::i;:::-;36753:226;;;:::o;31423:129::-;31490:7;31517:14;:27;31532:11;31517:27;;;;;;;;;;;;;;;;31510:34;;31423:129;;;:::o;35028:116::-;33155:28;33172:10;33155:16;:28::i;:::-;33147:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35109:27;35128:7;35109:18;:27::i;:::-;35028:116;:::o;16389:77::-;16426:7;16453:5;;16446:12;;16389:77;:::o;22731:109::-;22787:4;22811:21;22824:7;22811:8;:12;;:21;;;;:::i;:::-;22804:28;;22731:109;;;:::o;34783:119::-;34844:4;34868:26;34886:7;34868:13;:17;;:26;;;;:::i;:::-;34861:33;;34783:119;;;:::o;16534:87::-;16576:7;16603:10;;16596:17;;16534:87;:::o;27444:111::-;27502:7;27529;:18;27537:9;27529:18;;;;;;;;;;;;;;;;27522:25;;27444:111;;;:::o;33537:93::-;33589:33;33611:10;33589:21;:33::i;:::-;33537:93::o;16210:89::-;16249:15;16284:7;;;;;;;;;;;16277:14;;16210:89;:::o;22948:77::-;22992:25;23006:10;22992:13;:25::i;:::-;22948:77::o;33413:116::-;33155:28;33172:10;33155:16;:28::i;:::-;33147:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33494:27;33513:7;33494:18;:27::i;:::-;33413:116;:::o;30760:151::-;22630:20;22639:10;22630:8;:20::i;:::-;22622:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30860:3;30839:5;:18;30845:11;30839:18;;;;;;;;;;;;;;;:24;;;;30886:11;30879:24;;;30899:3;30879:24;;;;;;;;;;;;;;;;;;30760:151;;:::o;22848:92::-;22630:20;22639:10;22630:8;:20::i;:::-;22622:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22913:19;22924:7;22913:10;:19::i;:::-;22848:92;:::o;31110:111::-;31168:7;31195:5;:18;31201:11;31195:18;;;;;;;;;;;;;;;;31188:25;;31110:111;;;:::o;33280:125::-;33344:4;33368:29;33389:7;33368:16;:20;;:29;;;;:::i;:::-;33361:36;;33280:125;;;:::o;35152:87::-;35201:30;35220:10;35201:18;:30::i;:::-;35152:87::o;16051:78::-;16089:6;16115;;;;;;;;;;;16108:13;;16051:78;:::o;17922:127::-;18008:4;18032:9;18025:16;;17922:127;;;;:::o;37190:480::-;37285:50;37312:11;37325:9;37285:26;:50::i;:::-;37370:11;37356:25;;:10;:25;;;37348:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37442:14;37459:43;37492:9;37459:28;37475:11;37459:15;:28::i;:::-;:32;;:43;;;;:::i;:::-;37442:60;;37531:12;;37521:6;:22;:55;;;;37557:19;37564:11;37557:6;:19::i;:::-;37547:6;:29;37521:55;37513:147;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37190:480;;;:::o;28339:325::-;28406:7;28426:13;28442:7;:19;28450:10;28442:19;;;;;;;;;;;;;;;;28426:35;;28472:23;28498:22;28503:5;28510:9;28498:4;:22::i;:::-;28472:48;;28618:38;28640:15;28618:21;:38::i;:::-;28611:45;;;;28339:325;;;:::o;3800:181::-;3858:7;3878:9;3894:1;3890;:5;3878:17;;3919:1;3914;:6;;3906:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3972:1;3965:8;;;3800:181;;;;:::o;20005:136::-;20093:40;20108:11;20121;20093:14;:40::i;:::-;20005:136;;:::o;32312:235::-;32404:52;32433:11;32446:9;32404:28;:52::i;:::-;32497:42;32529:9;32497:14;:27;32512:11;32497:27;;;;;;;;;;;;;;;;:31;;:42;;;;:::i;:::-;32467:14;:27;32482:11;32467:27;;;;;;;;;;;;;;;:72;;;;32312:235;;:::o;21036:91::-;21095:7;;;;;;;;;;;:16;;:24;21112:6;21095:24;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21095:24:0;21036:91;:::o;19153:151::-;;;:::o;35247:137::-;35309:26;35327:7;35309:13;:17;;:26;;;;:::i;:::-;35368:7;35351:25;;;;;;;;;;;;35247:137;:::o;35392:145::-;35457:29;35478:7;35457:13;:20;;:29;;;;:::i;:::-;35521:7;35502:27;;;;;;;;;;;;35392:145;:::o;22005:203::-;22077:4;22121:1;22102:21;;:7;:21;;;;22094:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22180:4;:11;;:20;22192:7;22180:20;;;;;;;;;;;;;;;;;;;;;;;;;22173:27;;22005:203;;;;:::o;33792:154::-;33860:32;33884:7;33860:16;:23;;:32;;;;:::i;:::-;33930:7;33908:30;;;;;;;;;;;;33792:154;:::o;23163:130::-;23223:24;23239:7;23223:8;:15;;:24;;;;:::i;:::-;23277:7;23263:22;;;;;;;;;;;;23163:130;:::o;33638:146::-;33703:29;33724:7;33703:16;:20;;:29;;;;:::i;:::-;33768:7;33748:28;;;;;;;;;;;;33638:146;:::o;23033:122::-;23090:21;23103:7;23090:8;:12;;:21;;;;:::i;:::-;23139:7;23127:20;;;;;;;;;;;;23033:122;:::o;27746:320::-;27926:1;27903:7;:19;27911:10;27903:19;;;;;;;;;;;;;;;;:24;;27895:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28008:50;28035:11;28048:9;28008:26;:50::i;:::-;27746:320;;:::o;25076:113::-;25129:6;25024:8;25152:23;25156:9;25160:1;25163;25156:3;:9::i;:::-;25173:1;25024:8;25167:7;;;;;;25152:3;:23::i;:::-;:29;;;;;;25148:33;;25076:113;;;;:::o;20822:122::-;20889:7;20916:20;20930:5;;20916:9;:13;;:20;;;;:::i;:::-;20909:27;;20822:122;;;:::o;19592:139::-;19678:45;19698:11;19711;19678:6;;;;;;;;;;;:19;;;;:45;;;;;:::i;:::-;19592:139;;:::o;20419:147::-;;;:::o;21469:178::-;21547:18;21551:4;21557:7;21547:3;:18::i;:::-;21546:19;21538:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21635:4;21612;:11;;:20;21624:7;21612:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21469:178;;:::o;21727:183::-;21807:18;21811:4;21817:7;21807:3;:18::i;:::-;21799:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21897:5;21874:4;:11;;:20;21886:7;21874:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;21727:183;;:::o;31769:350::-;31864:50;31891:11;31904:9;31864:26;:50::i;:::-;32033:5;:18;32039:11;32033:18;;;;;;;;;;;;;;;;31987:42;32019:9;31987:14;:27;32002:11;31987:27;;;;;;;;;;;;;;;;:31;;:42;;;;:::i;:::-;:64;;31979:132;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31769:350;;:::o;24432:142::-;24484:6;24516:1;24511;:6;:30;;;;24540:1;24535;24530;24526;:5;24522:9;;;24521:15;;;;;;:20;24511:30;24503:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24432:142;;;;:::o;24163:128::-;24215:6;24257:1;24251;24247;:5;24243:9;;;24242:16;;24234:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24163:128;;;;:::o;4691:470::-;4749:7;4998:1;4993;:6;4989:47;;;5023:1;5016:8;;;;4989:47;5048:9;5064:1;5060;:5;5048:17;;5093:1;5088;5084;:5;;;;;;:10;5076:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5152:1;5145:8;;;4691:470;;;;;:::o;8288:176::-;8371:85;8390:5;8420;:14;;;:23;;;;8445:2;8449:5;8397:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;8397:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;8397:58:0;8371:18;:85::i;:::-;8288:176;;;:::o;36114:273::-;36219:27;36233:12;36219:13;:27::i;:::-;36211:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36327:52;36354:12;36368:10;36327:26;:52::i;:::-;36114:273;;:::o;10282:1114::-;10886:27;10894:5;10886:25;;;:27::i;:::-;10878:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11023:12;11037:23;11072:5;11064:19;;11084:4;11064:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11064:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11022:67:0;;;;11108:7;11100:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11189:1;11169:10;:17;:21;11165:224;;;11311:10;11300:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11300:30:0;;;;;;;;;;;;;;;;11292:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11165:224;10282:1114;;;;:::o;18604:246::-;18730:1;18707:25;;:11;:25;;;;18699:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18811:1;18798:9;:14;;18790:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18604:246;;:::o;7198:422::-;7258:4;7466:12;7577:7;7565:20;7557:28;;7611:1;7604:4;:8;7597:15;;;7198:422;;;:::o
Swarm Source
bzzr://60013b02eb6cd9cf4372b209113cf7d224f0b453096ee22de66737888f850753
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.