Overview
Max Total Supply
42,069 EEEE
Holders
128 (0.00%)
Market
Price
$0.10 @ 0.000028 ETH
Onchain Market Cap
$4,028.66
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
72.047557259296680805 EEEEValue
$6.90 ( ~0.0019829327037921 Eth) [0.1713%]Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
eeee
Compiler Version
v0.6.12+commit.27d51765
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
//SPDX-License-Identifier: MIT pragma solidity 0.6.12; import "@openzeppelin/contracts/token/ERC20/ERC20Capped.sol"; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/GSN/Context.sol"; import "@openzeppelin/contracts/utils/Address.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/math/SafeMath.sol"; import "@openzeppelin/contracts/math/Math.sol"; // Eeee! Welcome Dolphins! // ////////////////////////////////////////////////////////////////////// // __ // // _.-~ ) ____ eeee ____ // // _..--~~~~,' ,-/ _ // // .-'. . . .' ,-',' ,' ) // // ,'. . . _ ,--~,-'__..-' ,' // // ,'. . . (@)' ---~~~~ ,' // // /. . . . '~~ ,-' // // /. . . . . ,-' // // ; . . . . - . ,' // // : . . . . _ / // // . . . . . `-.: // // . . . ./ - . ) // // . . . | _____..---.._/ ____ dolphins.wtf ____ // //~---~~~~-~~---~~~~----~~~~-~~~~-~~---~~~~----~~~~~~---~~~~-~~---~~// // // ////////////////////////////////////////////////////////////////////// // // This code has not been audited, but has been reviewed. Hopefully it's bug free... // If you do find bugs, remember those were features and part of the game... Don't hate the player. // // Also, this token is a worthless game token. Don't buy it. Just farm it, and then play games. It will be fun. // // Eeee! Let the games begin! // eeee, hardcap set on deployment with minting to dev for subsequent deployment into DolphinPods (2x) & snatchFeeder contract eeee is ERC20Capped, Ownable { using SafeMath for uint256; bool public _isGameActive; uint256 public _lastUpdated; uint256 public _coolDownTime; uint256 public _snatchRate; uint256 public _snatchPool; uint256 public _devFoodBucket; bool public _devCanEat; bool public _isAnarchy; uint256 public _orca; uint256 public _river; uint256 public _bottlenose; uint256 public _flipper = 42069e17; uint256 public _peter = 210345e17; address public _owner; address public _UniLP; uint256 public _lpMin; uint256 public _feeLevel1; uint256 public _feeLevel2; event Snatched(address indexed user, uint256 amount); constructor() public ERC20("dolphins.wtf", "EEEE") ERC20Capped(42069e18) { _isGameActive = false; _coolDownTime = 3600; _devCanEat = false; _isAnarchy = false; _snatchRate = 1; _orca = 69e18; _river = 42069e16; _bottlenose = 210345e16; _lpMin = 1; _UniLP = address(0); _feeLevel1 = 1e18; _feeLevel2 = 5e18; _owner = msg.sender; mint(msg.sender, 42069e18); } // levels: checks caller's balance to determine if they can access a function function uniLPBalance() public view returns (uint256) { IERC20 lpToken = IERC20(_UniLP); return lpToken.balanceOf(msg.sender); } function amILP() public view returns(bool) { require(_UniLP != address(0), "Eeee! The LP contract has not been set"); return uniLPBalance() > _lpMin; } function amIOrca() public view returns(bool) { return balanceOf(msg.sender) >= _orca || amILP(); } // Orcas (are you even a dolphin?) - 69 (0.00164%); Can: Snatch tax base modifier onlyOrca() { require(amIOrca(), "Eeee! You're not even an orca"); _; } function amIRiver() public view returns(bool) { return balanceOf(msg.sender) >= _river; } // River Dolphin (what is wrong with your nose?) - 420.69 (1%); Can: turn game on/off modifier onlyRiver() { require(amIRiver(), "You're not even a river dolphin"); _; } function amIBottlenose() public view returns(bool) { return balanceOf(msg.sender) >= _bottlenose; } // Bottlenose Dolphin (now that's a dolphin) - 2103.45 (5%); Can: Change tax rate (up to 2.5%); Devs can eat (allows dev to withdraw from the dev food bucket) modifier onlyBottlenose() { require(amIBottlenose(), "You're not even a bottlenose dolphin"); _; } function amIFlipper() public view returns(bool) { return balanceOf(msg.sender) >= _flipper; } // Flipper (A based dolphin) - 4206.9 (10%); Can: Change levels thresholds (except Flipper and Peter); Change tax rate (up to 10%); Change cooldown time modifier onlyFlipper() { require(amIFlipper(), "You're not flipper"); _; } function amIPeter() public view returns(bool) { return balanceOf(msg.sender) >= _peter; } // Peter the Dolphin (ask Margaret Howe Lovatt) - 21034.5 (50%); Can: Burn the key and hand the world over to the dolphins, and stops feeding the devs modifier onlyPeter() { require(amIPeter(), "You're not peter the dolphin"); _; } // Are you the dev? modifier onlyDev() { require(address(msg.sender) == _owner, "You're not the dev, get out of here"); _; } modifier cooledDown() { require(now > _lastUpdated.add(_coolDownTime)); _; } // snatch - grab from snatch pool, requires min 0.01 EEEE in snatchpool -- always free function snatchFood() public onlyOrca cooledDown { require(_snatchPool >= 1 * 1e16, "snatchpool: min snatch amount (0.01 EEEE) not reached."); // check that the balance left in the contract is not less than the amount in the snatchPool, in case of rounding errors uint256 effectiveSnatched = balanceOf(address(this)) < _snatchPool ? balanceOf(address(this)) : _snatchPool; this.transfer(msg.sender, effectiveSnatched); _snatchPool = 0; emit Snatched(msg.sender, effectiveSnatched); } // Add directly to the snatchpool, if the caller is not the dev then set to cooldown function depositToSnatchPool(uint256 EEEEtoSnatchPool) public { transfer(address(this), EEEEtoSnatchPool); _snatchPool = _snatchPool.add(EEEEtoSnatchPool); if (address(msg.sender) != _owner) { _lastUpdated = now; } } function depositToDevFood(uint256 EEEEtoDevFood) public { transfer(address(this), EEEEtoDevFood); _devFoodBucket = _devFoodBucket.add(EEEEtoDevFood); } // startGame -- call fee level 1 function startGame() public onlyRiver cooledDown { require(!_isGameActive, "Eeee! The game has already started"); transfer(address(this), _feeLevel1); // because the game doesn't turn on until after this call completes we need to manually add to snatch callsAlwaysPaySnatch(_feeLevel1); _isGameActive = true; _lastUpdated = now; } // pauseGame -- call fee level 1 function pauseGame() public onlyRiver cooledDown { require(_isGameActive, "Eeee! The game has already been paused"); transfer(address(this), _feeLevel1); _isGameActive = false; _lastUpdated = now; } // all payed function calls should pay snatch, even if the game is off function callsAlwaysPaySnatch (uint256 amount) internal { if (!_isGameActive) { _snatch(amount); } } // allowDevToEat - can only be turned on once -- call fee level 1 function allowDevToEat() public onlyBottlenose { require(!_devCanEat, "Eeee! Too late sucker, dev's eating tonight"); transfer(address(this), _feeLevel1); callsAlwaysPaySnatch(_feeLevel1); _devCanEat = true; _lastUpdated = now; } // changeSnatchRate - with max of 3% if Bottlenose; with max of 10% if Flipper -- call fee level 2 function changeSnatchRate(uint256 newSnatchRate) public onlyBottlenose cooledDown { if (amIFlipper()) { require(newSnatchRate >= 1 && newSnatchRate <= 10, "Eeee! Minimum snatchRate is 1%, maximum is 10%."); } else { require(newSnatchRate >= 1 && newSnatchRate <= 3, "Eeee! Minimum snatchRate is 1%, maximum 10% for Flipper"); } transfer(address(this), _feeLevel2); callsAlwaysPaySnatch(_feeLevel2); _snatchRate = newSnatchRate; _lastUpdated = now; } // changeCoolDownTime - make the game go faster or slower, cooldown to be set in hours (min 1; max 24) -- call fee level 2 function updateCoolDown(uint256 newCoolDown) public onlyFlipper cooledDown { require(_isGameActive, "Eeee! You need to wait for the game to start first"); require(newCoolDown <= 24 && newCoolDown >= 1, "Eeee! Minimum cooldown is 1 hour, maximum is 24 hours"); transfer(address(this), _feeLevel2); callsAlwaysPaySnatch(_feeLevel2); _coolDownTime = newCoolDown * 1 hours; _lastUpdated = now; } // functions to change levels, caller should ensure to calculate this on 1e18 basis -- call fee level 1 * sought change function getSizeChangeFee(uint256 currentThreshold, uint256 newThreshold) private pure returns (uint256) { require (currentThreshold != newThreshold, 'this is already the threshold'); return currentThreshold > newThreshold ? currentThreshold.sub(newThreshold) : newThreshold.sub(currentThreshold); } function updateOrca(uint256 updatedThreshold) public onlyFlipper { uint256 changeFee = getSizeChangeFee(_orca, updatedThreshold); require(balanceOf(msg.sender) >= changeFee, "Eeee! You don't have enough EEEE to make this change."); require(updatedThreshold >= 1e18 && updatedThreshold <= 99e18, "Threshold for Orcas must be 1 to 99 EEEE"); require(updatedThreshold < _river, "Threshold for Orcas must be less than River Dolphins"); _orca = updatedThreshold; transfer(address(this), changeFee); callsAlwaysPaySnatch(changeFee); _lastUpdated = now; } function updateRiver(uint256 updatedThreshold) public onlyFlipper { uint256 changeFee = getSizeChangeFee(_river, updatedThreshold); require(balanceOf(msg.sender) >= changeFee, "Eeee! You don't have enough EEEE to make this change."); require(updatedThreshold >= 1e18 && updatedThreshold <= 210345e16, "Threshold for River Dolphins must be 1 to 2103.45 EEEE"); require(updatedThreshold > _orca && updatedThreshold < _bottlenose, "Threshold for River Dolphins must great than River Dolphins *and* less than Bottlenose Dolphins"); _river = updatedThreshold; transfer(address(this), changeFee); callsAlwaysPaySnatch(changeFee); _lastUpdated = now; } function updateBottlenose(uint256 updatedThreshold) public onlyFlipper { uint256 changeFee = getSizeChangeFee(_bottlenose, updatedThreshold); require(balanceOf(msg.sender) >= changeFee, "Eeee! You don't have enough EEEE to make this change."); require(updatedThreshold >= 1e18 && updatedThreshold <= 42069e17, "Threshold for Bottlenose Dolphins must be 1 to 4206.9 EEEE"); require(updatedThreshold > _river, "Threshold for Bottlenose Dolphins must great than River Dolphins"); _bottlenose = updatedThreshold; transfer(address(this), changeFee); callsAlwaysPaySnatch(changeFee); _lastUpdated = now; } // dolphinAnarchy - transfer owner permissions to 0xNull & stops feeding dev. CAREFUL: this cannot be undone and once you do it the dolphins swim alone. -- call fee level 2 function activateAnarchy() public onlyPeter { //Return anything in dev pool to snatchpool transfer(address(this), _feeLevel2); callsAlwaysPaySnatch(_feeLevel2); _snatchPool = _snatchPool.add(_devFoodBucket); _devFoodBucket = 0; _isAnarchy = true; // ends dev feeding _owner = address(0); _lastUpdated = now; } // transfers tokens to snatchSupply and fees paid to dev (5%) only when we have not descended into Dolphin BASED anarchy function _snatch(uint256 amount) internal { // check that the amount is at least 5e-18 eeee, otherwise throw it all in the snatchpool if (amount >= 5) { uint256 devFood; devFood = _isAnarchy ? 0 : amount.mul(5).div(100); // 5% put in a food bucket for the contract creator if we've not descended into dolphin anarchy uint256 snatchedFood = amount.sub(devFood); _snatchPool = _snatchPool.add(snatchedFood); _devFoodBucket = _devFoodBucket.add(devFood); } else { _snatchPool = _snatchPool.add(amount); } } function _calcSnatchAmount (uint256 amount) internal view returns (uint256) { if (_isGameActive) { // calculate the snatched amount to be transfered if the game is active return (amount.mul(_snatchRate).div(100)); } else { return 0; } } // Need the _transfer function to break at _beforeTokenTransfer to do a second transfer to this contract for SnatchPool & DevFood, but if function _beforeTokenTransfer(address sender, address recipient, uint256 amount) internal override { super._beforeTokenTransfer(sender, recipient, amount); // This function should only do anything if the game is active, otherwise it should allow normal transfers if (_isGameActive) { // TO DO, make sure that transfers from Uniswap LP pool adhere to this // Don't snatch transfers from the Uniswap LP pool (if set) if (_UniLP != address(sender)) { // A first call to _transfer (where the recipient isn't this contract will create a second transfer to this contract if (recipient != address(this)) { //calculate snatchAmount uint256 amountToSnatch = _calcSnatchAmount(amount); // This function checks that the account sending funds has enough funds (transfer amount + snatch amount), otherwise reverts require(balanceOf(sender).sub(amount).sub(amountToSnatch) >= 0, "ERC20: transfer amount with snatch cost exceeds balance, send less"); // allocate amountToSnatch to snatchPool and devFoodBucket _snatch(amountToSnatch); // make transfer from sender to this address _transfer(sender, address(this), amountToSnatch); } } // After this, the normal function continues, and makes amount transfer to intended recipient } } // feedDev - allows owner to withdraw 5% thrown into dev food buck. Must only be called by the Dev. function feedDev() public onlyDev { require(_devCanEat, "sorry dev, no scraps for you"); // check that the balance left in the contract is not less than the amount in the DevFoodBucket, in case of rounding errors if (balanceOf(address(this)) < _devFoodBucket) { transfer(msg.sender, balanceOf(address(this))); } else { transfer(msg.sender, _devFoodBucket); } _devFoodBucket = 0; } // change fees for function calls, can only be triggered by Dev, and then enters cooldown function changeFunctionFees(uint256 newFeeLevel1, uint256 newFeeLevel2) public onlyDev { _feeLevel1 = newFeeLevel1; _feeLevel2 = newFeeLevel2; _lastUpdated = now; } function setLP(address addrUniV2LP, uint256 lpMin) public onlyDev { _UniLP = addrUniV2LP; _lpMin = lpMin; } function mint(address _to, uint256 amount) public onlyDev { _mint(_to, amount); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return msg.sender; } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "../GSN/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () internal { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow, so we distribute return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "../../GSN/Context.sol"; import "./IERC20.sol"; import "../../math/SafeMath.sol"; import "../../utils/Address.sol"; /** * @dev Implementation of the {IERC20} interface. * * This implementation is agnostic to the way tokens are created. This means * that a supply mechanism has to be added in a derived contract using {_mint}. * For a generic mechanism see {ERC20PresetMinterPauser}. * * TIP: For a detailed writeup see our guide * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How * to implement supply mechanisms]. * * We have followed general OpenZeppelin guidelines: functions revert instead * of returning `false` on failure. This behavior is nonetheless conventional * and does not conflict with the expectations of ERC20 applications. * * Additionally, an {Approval} event is emitted on calls to {transferFrom}. * This allows applications to reconstruct the allowance for all accounts just * by listening to said events. Other implementations of the EIP may not emit * these events, as it isn't required by the specification. * * Finally, the non-standard {decreaseAllowance} and {increaseAllowance} * functions have been added to mitigate the well-known issues around setting * allowances. See {IERC20-approve}. */ contract ERC20 is Context, IERC20 { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _balances; mapping (address => mapping (address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; uint8 private _decimals; /** * @dev Sets the values for {name} and {symbol}, initializes {decimals} with * a default value of 18. * * To select a different value for {decimals}, use {_setupDecimals}. * * All three of these values are immutable: they can only be set once during * construction. */ constructor (string memory name, string memory symbol) public { _name = name; _symbol = symbol; _decimals = 18; } /** * @dev Returns the name of the token. */ function name() public view returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless {_setupDecimals} is * called. * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view returns (uint8) { return _decimals; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}; * * Requirements: * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer(address sender, address recipient, uint256 amount) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements * * - `to` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens. * * This is internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve(address owner, address spender, uint256 amount) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Sets {decimals} to a value other than the default one of 18. * * WARNING: This function should only be called from the constructor. Most * applications that interact with token contracts will not expect * {decimals} to ever change, and may work incorrectly if it does. */ function _setupDecimals(uint8 decimals_) internal { _decimals = decimals_; } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; import "./ERC20.sol"; /** * @dev Extension of {ERC20} that adds a cap to the supply of tokens. */ abstract contract ERC20Capped is ERC20 { uint256 private _cap; /** * @dev Sets the value of the `cap`. This value is immutable, it can only be * set once during construction. */ constructor (uint256 cap) public { require(cap > 0, "ERC20Capped: cap is 0"); _cap = cap; } /** * @dev Returns the cap on the token's total supply. */ function cap() public view returns (uint256) { return _cap; } /** * @dev See {ERC20-_beforeTokenTransfer}. * * Requirements: * * - minted tokens must not cause the total supply to go over the cap. */ function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override { super._beforeTokenTransfer(from, to, amount); if (from == address(0)) { // When minting tokens require(totalSupply().add(amount) <= _cap, "ERC20Capped: cap exceeded"); } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.2; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.6.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor () internal { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } }
{ "remappings": [], "optimizer": { "enabled": false, "runs": 200 }, "evmVersion": "istanbul", "libraries": { "": {} }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Snatched","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_UniLP","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_bottlenose","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devCanEat","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFoodBucket","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeLevel1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeLevel2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_flipper","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isAnarchy","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_isGameActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastUpdated","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lpMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_orca","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_peter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_river","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_snatchPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_snatchRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateAnarchy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allowDevToEat","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amIBottlenose","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amIFlipper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amILP","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amIOrca","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amIPeter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"amIRiver","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newFeeLevel1","type":"uint256"},{"internalType":"uint256","name":"newFeeLevel2","type":"uint256"}],"name":"changeFunctionFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSnatchRate","type":"uint256"}],"name":"changeSnatchRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"EEEEtoDevFood","type":"uint256"}],"name":"depositToDevFood","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"EEEEtoSnatchPool","type":"uint256"}],"name":"depositToSnatchPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feedDev","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addrUniV2LP","type":"address"},{"internalType":"uint256","name":"lpMin","type":"uint256"}],"name":"setLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snatchFood","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniLPBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"updatedThreshold","type":"uint256"}],"name":"updateBottlenose","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newCoolDown","type":"uint256"}],"name":"updateCoolDown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"updatedThreshold","type":"uint256"}],"name":"updateOrca","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"updatedThreshold","type":"uint256"}],"name":"updateRiver","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405268e40e772ce376d200006011556904744853e071521a00006012553480156200002c57600080fd5b506908e890a7c0e2a43400006040518060400160405280600c81526020017f646f6c7068696e732e77746600000000000000000000000000000000000000008152506040518060400160405280600481526020017f45454545000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000bc9291906200107c565b508060049080519060200190620000d59291906200107c565b506012600560006101000a81548160ff021916908360ff1602179055505050600081116200016b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f45524332304361707065643a206361702069732030000000000000000000000081525060200191505060405180910390fd5b80600681905550506000620001856200038160201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000600760146101000a81548160ff021916908315150217905550610e106009819055506000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506001600a819055506803bd913e6c1df40000600e819055506816ce3f1e16bf150000600f819055506872073b9671bb69000060108190555060016015819055506000601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550670de0b6b3a7640000601681905550674563918244f4000060178190555033601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200037b336908e890a7c0e2a43400006200038960201b60201c565b62001122565b600033905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161462000431576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180620051fd6023913960400191505060405180910390fd5b6200044382826200044760201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620004eb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b620004ff600083836200062560201b60201c565b6200051b81600254620007bd60201b62002d341790919060201c565b60028190555062000579816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620007bd60201b62002d341790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6200063d8383836200084660201b62002dbc1760201c565b600760149054906101000a900460ff1615620007b8578273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620007b7573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620007b6576000620006f0826200093b60201b60201c565b90506000620007378262000723856200070f896200099b60201b60201c565b620009e360201b62002e931790919060201c565b620009e360201b62002e931790919060201c565b101562000790576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526042815260200180620051956042913960600191505060405180910390fd5b620007a18162000a3560201b60201c565b620007b484308362000b2560201b60201c565b505b5b5b505050565b6000808284019050838110156200083c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6200085e83838362000e0160201b62002edd1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156200093657600654620008c082620008ac62000e0660201b60201c565b620007bd60201b62002d341790919060201c565b111562000935576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b5b505050565b6000600760149054906101000a900460ff1615620009915762000989606462000975600a548562000e1060201b62002ee21790919060201c565b62000e9b60201b62002f681790919060201c565b905062000996565b600090505b919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600062000a2d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525062000eed60201b60201c565b905092915050565b6005811062000aff576000600d60019054906101000a900460ff1662000a905762000a8a606462000a7660058562000e1060201b62002ee21790919060201c565b62000e9b60201b62002f681790919060201c565b62000a93565b60005b9050600062000ab18284620009e360201b62002e931790919060201c565b905062000acf81600b54620007bd60201b62002d341790919060201c565b600b8190555062000af182600c54620007bd60201b62002d341790919060201c565b600c81905550505062000b22565b62000b1b81600b54620007bd60201b62002d341790919060201c565b600b819055505b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180620052416025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180620051726023913960400191505060405180910390fd5b62000c488383836200062560201b60201c565b62000cbb81604051806060016040528060268152602001620051d7602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000eed60201b62002fb2179092919060201c565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000d55816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620007bd60201b62002d341790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b505050565b6000600254905090565b60008083141562000e25576000905062000e95565b600082840290508284828162000e3757fe5b041462000e90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180620052206021913960400191505060405180910390fd5b809150505b92915050565b600062000ee583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000fb160201b60201c565b905092915050565b600083831115829062000f9e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101562000f6257808201518184015260208101905062000f45565b50505050905090810190601f16801562000f905780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b6000808311829062001061576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156200102557808201518184015260208101905062001008565b50505050905090810190601f168015620010535780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200106e57fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620010bf57805160ff1916838001178555620010f0565b82800160010185558215620010f0579182015b82811115620010ef578251825591602001919060010190620010d2565b5b509050620010ff919062001103565b5090565b5b808211156200111e57600081600090555060010162001104565b5090565b61404080620011326000396000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c80637d1c2b52116101d3578063c7f8915911610104578063db5ca09d116100a2578063e35fb5d81161007c578063e35fb5d814610d2a578063eda5546814610d48578063f2fde38b14610d52578063f3c7454314610d9657610378565b8063db5ca09d14610c66578063db91419214610c84578063dd62ed3e14610cb257610378565b8063cdd60153116100de578063cdd6015314610bd6578063d65ab5f214610c0e578063d8b7734614610c18578063d8eeccc314610c3857610378565b8063c7f8915914610b7a578063c8e6d26714610b98578063c9540fd914610bb857610378565b8063a457c2d711610171578063b2bdfa7b1161014b578063b2bdfa7b14610ad4578063bbfacbc714610b08578063bfa73f3614610b26578063c4a46e3c14610b5a57610378565b8063a457c2d7146109ee578063a9059cbb14610a52578063aee66ee014610ab657610378565b80638c734263116101ad5780638c734263146108eb5780638da5cb5b1461090957806390fa97e21461093d57806395d89b411461096b57610378565b80637d1c2b52146108a35780637f7432e0146108c357806382c518fe146108e157610378565b806340c10f19116102ad57806359994c981161024b5780636284f02d116102255780636284f02d146107e557806370a0823114610813578063715018a61461086b57806378dcd9521461087557610378565b806359994c98146107895780635c0ebd62146107a95780635d90b87c146107c757610378565b8063499831f211610287578063499831f2146107135780634c6762a21461071d57806350f0e4321461074b57806359170dbd1461076957610378565b806340c10f191461068757806345207bb2146106d55780634837f83c146106f557610378565b806318160ddd1161031a578063355274ea116102f4578063355274ea146105975780633686cf79146105b5578063379990d6146105d5578063395093511461062357610378565b806318160ddd146104d457806323b872dd146104f2578063313ce5671461057657610378565b80630b2cbb05116103565780630b2cbb051461046e5780631233e4b614610478578063123dda3f1461049657806316033f50146104b457610378565b806306fdde031461037d57806307f89d5a14610400578063095ea7b31461040a575b600080fd5b610385610dc4565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c55780820151818401526020810190506103aa565b50505050905090810190601f1680156103f25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610408610e66565b005b6104566004803603604081101561042057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611091565b60405180821515815260200191505060405180910390f35b6104766110af565b005b610480611219565b6040518082815260200191505060405180910390f35b61049e61121f565b6040518082815260200191505060405180910390f35b6104bc611225565b60405180821515815260200191505060405180910390f35b6104dc61123a565b6040518082815260200191505060405180910390f35b61055e6004803603606081101561050857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611244565b60405180821515815260200191505060405180910390f35b61057e61131d565b604051808260ff16815260200191505060405180910390f35b61059f611334565b6040518082815260200191505060405180910390f35b6105bd61133e565b60405180821515815260200191505060405180910390f35b610621600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113f8565b005b61066f6004803603604081101561063957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114ea565b60405180821515815260200191505060405180910390f35b6106d36004803603604081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061159d565b005b6106dd611651565b60405180821515815260200191505060405180910390f35b6106fd611664565b6040518082815260200191505060405180910390f35b61071b611734565b005b6107496004803603602081101561073357600080fd5b8101908080359060200190929190505050611866565b005b610753611a47565b6040518082815260200191505060405180910390f35b610771611a4d565b60405180821515815260200191505060405180910390f35b610791611a71565b60405180821515815260200191505060405180910390f35b6107b1611a86565b6040518082815260200191505060405180910390f35b6107cf611a8c565b6040518082815260200191505060405180910390f35b610811600480360360208110156107fb57600080fd5b8101908080359060200190929190505050611a92565b005b6108556004803603602081101561082957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c73565b6040518082815260200191505060405180910390f35b610873611cbb565b005b6108a16004803603602081101561088b57600080fd5b8101908080359060200190929190505050611e46565b005b6108ab611fcf565b60405180821515815260200191505060405180910390f35b6108cb611fe4565b6040518082815260200191505060405180910390f35b6108e9611fea565b005b6108f3612107565b6040518082815260200191505060405180910390f35b61091161210d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109696004803603602081101561095357600080fd5b8101908080359060200190929190505050612137565b005b6109736121bd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109b3578082015181840152602081019050610998565b50505050905090810190601f1680156109e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a3a60048036036040811015610a0457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061225f565b60405180821515815260200191505060405180910390f35b610a9e60048036036040811015610a6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061232c565b60405180821515815260200191505060405180910390f35b610abe61234a565b6040518082815260200191505060405180910390f35b610adc612350565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b10612376565b6040518082815260200191505060405180910390f35b610b2e61237c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b626123a2565b60405180821515815260200191505060405180910390f35b610b826123b7565b6040518082815260200191505060405180910390f35b610ba06123bd565b60405180821515815260200191505060405180910390f35b610bc06123d0565b6040518082815260200191505060405180910390f35b610c0c60048036036040811015610bec57600080fd5b8101908080359060200190929190803590602001909291905050506123d6565b005b610c16612495565b005b610c206125d3565b60405180821515815260200191505060405180910390f35b610c6460048036036020811015610c4e57600080fd5b81019080803590602001909291905050506125e6565b005b610c6e6127d4565b6040518082815260200191505060405180910390f35b610cb060048036036020811015610c9a57600080fd5b81019080803590602001909291905050506127da565b005b610d1460048036036040811015610cc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612803565b6040518082815260200191505060405180910390f35b610d3261288a565b6040518082815260200191505060405180910390f35b610d50612890565b005b610d9460048036036020811015610d6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061298f565b005b610dc260048036036020811015610dac57600080fd5b8101908080359060200190929190505050612b9f565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b5050505050905090565b610e6e611a4d565b610ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f456565652120596f75277265206e6f74206576656e20616e206f72636100000081525060200191505060405180910390fd5b610ef7600954600854612d3490919063ffffffff16565b4211610f0257600080fd5b662386f26fc10000600b541015610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613d536036913960400191505060405180910390fd5b6000600b54610f7230611c73565b10610f7f57600b54610f89565b610f8830611c73565b5b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ffc57600080fd5b505af1158015611010573d6000803e3d6000fd5b505050506040513d602081101561102657600080fd5b8101908080519060200190929190505050506000600b819055503373ffffffffffffffffffffffffffffffffffffffff167ff94400eb41c0d6dc48a78d2e742a470e9d93bef23dc7522c797d4598c6b61209826040518082815260200191505060405180910390a250565b60006110a561109e613072565b848461307a565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613de66023913960400191505060405180910390fd5b600d60009054906101000a900460ff166111d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f736f727279206465762c206e6f2073637261707320666f7220796f750000000081525060200191505060405180910390fd5b600c546111e330611c73565b1015611201576111fb336111f630611c73565b61232c565b5061120f565b61120d33600c5461232c565b505b6000600c81905550565b600e5481565b60095481565b6000600f5461123333611c73565b1015905090565b6000600254905090565b6000611251848484613271565b6113128461125d613072565b61130d85604051806060016040528060288152602001613e2a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112c3613072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb29092919063ffffffff16565b61307a565b600190509392505050565b6000600560009054906101000a900460ff16905090565b6000600654905090565b60008073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613f5a6026913960400191505060405180910390fd5b6015546113f2611664565b11905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461149e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613de66023913960400191505060405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806015819055505050565b60006115936114f7613072565b8461158e8560016000611508613072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3490919063ffffffff16565b61307a565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611643576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613de66023913960400191505060405180910390fd5b61164d8282613532565b5050565b600d60019054906101000a900460ff1681565b600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116f357600080fd5b505afa158015611707573d6000803e3d6000fd5b505050506040513d602081101561171d57600080fd5b810190808051906020019092919050505091505090565b61173c611225565b6117ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f596f75277265206e6f74206576656e206120726976657220646f6c7068696e0081525060200191505060405180910390fd5b6117c5600954600854612d3490919063ffffffff16565b42116117d057600080fd5b600760149054906101000a900460ff16611835576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613fc06026913960400191505060405180910390fd5b6118413060165461232c565b506000600760146101000a81548160ff02191690831515021790555042600881905550565b61186e611a71565b6118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f75277265206e6f7420666c6970706572000000000000000000000000000081525060200191505060405180910390fd5b60006118ee601054836136f9565b9050806118fa33611c73565b1015611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613c2f6035913960400191505060405180910390fd5b670de0b6b3a76400008210158015611972575068e40e772ce376d200008211155b6119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180613ef1603a913960400191505060405180910390fd5b600f548211611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180613f806040913960400191505060405180910390fd5b81601081905550611a32308261232c565b50611a3c816137ac565b426008819055505050565b60125481565b6000600e54611a5b33611c73565b101580611a6c5750611a6b61133e565b5b905090565b6000601154611a7f33611c73565b1015905090565b60085481565b60105481565b611a9a611a71565b611b0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f75277265206e6f7420666c6970706572000000000000000000000000000081525060200191505060405180910390fd5b6000611b1a600e54836136f9565b905080611b2633611c73565b1015611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613c2f6035913960400191505060405180910390fd5b670de0b6b3a76400008210158015611b9e575068055de6a779bbac00008211155b611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613d896028913960400191505060405180910390fd5b600f548210611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613e526034913960400191505060405180910390fd5b81600e81905550611c5e308261232c565b50611c68816137ac565b426008819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611cc3613072565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611e4e611fcf565b611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d2f6024913960400191505060405180910390fd5b611eba600954600854612d3490919063ffffffff16565b4211611ec557600080fd5b611ecd611a71565b15611f3e5760018110158015611ee45750600a8111155b611f39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613f2b602f913960400191505060405180910390fd5b611fa6565b60018110158015611f50575060038111155b611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180613b216037913960400191505060405180910390fd5b5b611fb23060175461232c565b50611fbe6017546137ac565b80600a819055504260088190555050565b6000601054611fdd33611c73565b1015905090565b60155481565b611ff26123a2565b612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f75277265206e6f742070657465722074686520646f6c7068696e0000000081525060200191505060405180910390fd5b6120703060175461232c565b5061207c6017546137ac565b612093600c54600b54612d3490919063ffffffff16565b600b819055506000600c819055506001600d60016101000a81548160ff0219169083151502179055506000601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600881905550565b600f5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612141308261232c565b5061215781600b54612d3490919063ffffffff16565b600b81905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ba57426008819055505b50565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122555780601f1061222a57610100808354040283529160200191612255565b820191906000526020600020905b81548152906001019060200180831161223857829003601f168201915b5050505050905090565b600061232261226c613072565b8461231d85604051806060016040528060258152602001613fe66025913960016000612296613072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb29092919063ffffffff16565b61307a565b6001905092915050565b6000612340612339613072565b8484613271565b6001905092915050565b600c5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012546123b033611c73565b1015905090565b600a5481565b600760149054906101000a900460ff1681565b600b5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461247c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613de66023913960400191505060405180910390fd5b8160168190555080601781905550426008819055505050565b61249d611225565b61250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f596f75277265206e6f74206576656e206120726976657220646f6c7068696e0081525060200191505060405180910390fd5b612526600954600854612d3490919063ffffffff16565b421161253157600080fd5b600760149054906101000a900460ff1615612597576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613e866022913960400191505060405180910390fd5b6125a33060165461232c565b506125af6016546137ac565b6001600760146101000a81548160ff02191690831515021790555042600881905550565b600d60009054906101000a900460ff1681565b6125ee611a71565b612660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f75277265206e6f7420666c6970706572000000000000000000000000000081525060200191505060405180910390fd5b600061266e600f54836136f9565b90508061267a33611c73565b10156126d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613c2f6035913960400191505060405180910390fd5b670de0b6b3a764000082101580156126f257506872073b9671bb6900008211155b612747576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613bf96036913960400191505060405180910390fd5b600e5482118015612759575060105482105b6127ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605f815260200180613b58605f913960600191505060405180910390fd5b81600f819055506127bf308261232c565b506127c9816137ac565b426008819055505050565b60165481565b6127e4308261232c565b506127fa81600c54612d3490919063ffffffff16565b600c8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b612898611fcf565b6128ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d2f6024913960400191505060405180910390fd5b600d60009054906101000a900460ff1615612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613cac602b913960400191505060405180910390fd5b61295f3060165461232c565b5061296b6016546137ac565b6001600d60006101000a81548160ff02191690831515021790555042600881905550565b612997613072565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c646026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612ba7611a71565b612c19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f75277265206e6f7420666c6970706572000000000000000000000000000081525060200191505060405180910390fd5b612c30600954600854612d3490919063ffffffff16565b4211612c3b57600080fd5b600760149054906101000a900460ff16612ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613cd76032913960400191505060405180910390fd5b60188111158015612cb2575060018110155b612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613db16035913960400191505060405180910390fd5b612d133060175461232c565b50612d1f6017546137ac565b610e1081026009819055504260088190555050565b600080828401905083811015612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b612dc7838383612edd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e8e57600654612e1982612e0b61123a565b612d3490919063ffffffff16565b1115612e8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b5b505050565b6000612ed583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fb2565b905092915050565b505050565b600080831415612ef55760009050612f62565b6000828402905082848281612f0657fe5b0414612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613e096021913960400191505060405180910390fd5b809150505b92915050565b6000612faa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137cd565b905092915050565b600083831115829061305f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613024578082015181840152602081019050613009565b50505050905090810190601f1680156130515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613100576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613ecd6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613186576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c8a6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613ea86025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561337d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613afe6023913960400191505060405180910390fd5b613388838383613893565b6133f381604051806060016040528060268152602001613d09602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613486816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6135e160008383613893565b6135f681600254612d3490919063ffffffff16565b60028190555061364d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600081831415613771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7468697320697320616c726561647920746865207468726573686f6c6400000081525060200191505060405180910390fd5b8183116137905761378b8383612e9390919063ffffffff16565b6137a4565b6137a38284612e9390919063ffffffff16565b5b905092915050565b600760149054906101000a900460ff166137ca576137c9816139eb565b5b50565b60008083118290613879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561383e578082015181840152602081019050613823565b50505050905090810190601f16801561386b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161388557fe5b049050809150509392505050565b61389e838383612dbc565b600760149054906101000a900460ff16156139e6578273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e5573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146139e457600061394682613aad565b90506000613977826139698561395b89611c73565b612e9390919063ffffffff16565b612e9390919063ffffffff16565b10156139ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526042815260200180613bb76042913960600191505060405180910390fd5b6139d7816139eb565b6139e2843083613271565b505b5b5b505050565b60058110613a8e576000600d60019054906101000a900460ff16613a3557613a306064613a22600585612ee290919063ffffffff16565b612f6890919063ffffffff16565b613a38565b60005b90506000613a4f8284612e9390919063ffffffff16565b9050613a6681600b54612d3490919063ffffffff16565b600b81905550613a8182600c54612d3490919063ffffffff16565b600c819055505050613aaa565b613aa381600b54612d3490919063ffffffff16565b600b819055505b50565b6000600760149054906101000a900460ff1615613af357613aec6064613ade600a5485612ee290919063ffffffff16565b612f6890919063ffffffff16565b9050613af8565b600090505b91905056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734565656521204d696e696d756d20736e61746368526174652069732031252c206d6178696d756d2031302520666f7220466c69707065725468726573686f6c6420666f7220526976657220446f6c7068696e73206d757374206772656174207468616e20526976657220446f6c7068696e73202a616e642a206c657373207468616e20426f74746c656e6f736520446f6c7068696e7345524332303a207472616e7366657220616d6f756e74207769746820736e6174636820636f737420657863656564732062616c616e63652c2073656e64206c6573735468726573686f6c6420666f7220526976657220446f6c7068696e73206d757374206265203120746f20323130332e34352045454545456565652120596f7520646f6e2774206861766520656e6f756768204545454520746f206d616b652074686973206368616e67652e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373456565652120546f6f206c617465207375636b65722c20646576277320656174696e6720746f6e69676874456565652120596f75206e65656420746f207761697420666f72207468652067616d6520746f20737461727420666972737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365596f75277265206e6f74206576656e206120626f74746c656e6f736520646f6c7068696e736e61746368706f6f6c3a206d696e20736e6174636820616d6f756e742028302e3031204545454529206e6f7420726561636865642e5468726573686f6c6420666f72204f72636173206d757374206265203120746f20393920454545454565656521204d696e696d756d20636f6f6c646f776e206973203120686f75722c206d6178696d756d20697320323420686f757273596f75277265206e6f7420746865206465762c20676574206f7574206f662068657265536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655468726573686f6c6420666f72204f72636173206d757374206265206c657373207468616e20526976657220446f6c7068696e734565656521205468652067616d652068617320616c7265616479207374617274656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735468726573686f6c6420666f7220426f74746c656e6f736520446f6c7068696e73206d757374206265203120746f20343230362e3920454545454565656521204d696e696d756d20736e61746368526174652069732031252c206d6178696d756d206973203130252e456565652120546865204c5020636f6e747261637420686173206e6f74206265656e207365745468726573686f6c6420666f7220426f74746c656e6f736520446f6c7068696e73206d757374206772656174207468616e20526976657220446f6c7068696e734565656521205468652067616d652068617320616c7265616479206265656e2070617573656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201db751b03867644ea1ab621da2f32092a371c7ac6b9d2b980b74187248299cad64736f6c634300060c003345524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e74207769746820736e6174636820636f737420657863656564732062616c616e63652c2073656e64206c65737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365596f75277265206e6f7420746865206465762c20676574206f7574206f662068657265536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103785760003560e01c80637d1c2b52116101d3578063c7f8915911610104578063db5ca09d116100a2578063e35fb5d81161007c578063e35fb5d814610d2a578063eda5546814610d48578063f2fde38b14610d52578063f3c7454314610d9657610378565b8063db5ca09d14610c66578063db91419214610c84578063dd62ed3e14610cb257610378565b8063cdd60153116100de578063cdd6015314610bd6578063d65ab5f214610c0e578063d8b7734614610c18578063d8eeccc314610c3857610378565b8063c7f8915914610b7a578063c8e6d26714610b98578063c9540fd914610bb857610378565b8063a457c2d711610171578063b2bdfa7b1161014b578063b2bdfa7b14610ad4578063bbfacbc714610b08578063bfa73f3614610b26578063c4a46e3c14610b5a57610378565b8063a457c2d7146109ee578063a9059cbb14610a52578063aee66ee014610ab657610378565b80638c734263116101ad5780638c734263146108eb5780638da5cb5b1461090957806390fa97e21461093d57806395d89b411461096b57610378565b80637d1c2b52146108a35780637f7432e0146108c357806382c518fe146108e157610378565b806340c10f19116102ad57806359994c981161024b5780636284f02d116102255780636284f02d146107e557806370a0823114610813578063715018a61461086b57806378dcd9521461087557610378565b806359994c98146107895780635c0ebd62146107a95780635d90b87c146107c757610378565b8063499831f211610287578063499831f2146107135780634c6762a21461071d57806350f0e4321461074b57806359170dbd1461076957610378565b806340c10f191461068757806345207bb2146106d55780634837f83c146106f557610378565b806318160ddd1161031a578063355274ea116102f4578063355274ea146105975780633686cf79146105b5578063379990d6146105d5578063395093511461062357610378565b806318160ddd146104d457806323b872dd146104f2578063313ce5671461057657610378565b80630b2cbb05116103565780630b2cbb051461046e5780631233e4b614610478578063123dda3f1461049657806316033f50146104b457610378565b806306fdde031461037d57806307f89d5a14610400578063095ea7b31461040a575b600080fd5b610385610dc4565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156103c55780820151818401526020810190506103aa565b50505050905090810190601f1680156103f25780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610408610e66565b005b6104566004803603604081101561042057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611091565b60405180821515815260200191505060405180910390f35b6104766110af565b005b610480611219565b6040518082815260200191505060405180910390f35b61049e61121f565b6040518082815260200191505060405180910390f35b6104bc611225565b60405180821515815260200191505060405180910390f35b6104dc61123a565b6040518082815260200191505060405180910390f35b61055e6004803603606081101561050857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611244565b60405180821515815260200191505060405180910390f35b61057e61131d565b604051808260ff16815260200191505060405180910390f35b61059f611334565b6040518082815260200191505060405180910390f35b6105bd61133e565b60405180821515815260200191505060405180910390f35b610621600480360360408110156105eb57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506113f8565b005b61066f6004803603604081101561063957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506114ea565b60405180821515815260200191505060405180910390f35b6106d36004803603604081101561069d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061159d565b005b6106dd611651565b60405180821515815260200191505060405180910390f35b6106fd611664565b6040518082815260200191505060405180910390f35b61071b611734565b005b6107496004803603602081101561073357600080fd5b8101908080359060200190929190505050611866565b005b610753611a47565b6040518082815260200191505060405180910390f35b610771611a4d565b60405180821515815260200191505060405180910390f35b610791611a71565b60405180821515815260200191505060405180910390f35b6107b1611a86565b6040518082815260200191505060405180910390f35b6107cf611a8c565b6040518082815260200191505060405180910390f35b610811600480360360208110156107fb57600080fd5b8101908080359060200190929190505050611a92565b005b6108556004803603602081101561082957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611c73565b6040518082815260200191505060405180910390f35b610873611cbb565b005b6108a16004803603602081101561088b57600080fd5b8101908080359060200190929190505050611e46565b005b6108ab611fcf565b60405180821515815260200191505060405180910390f35b6108cb611fe4565b6040518082815260200191505060405180910390f35b6108e9611fea565b005b6108f3612107565b6040518082815260200191505060405180910390f35b61091161210d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109696004803603602081101561095357600080fd5b8101908080359060200190929190505050612137565b005b6109736121bd565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156109b3578082015181840152602081019050610998565b50505050905090810190601f1680156109e05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610a3a60048036036040811015610a0457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061225f565b60405180821515815260200191505060405180910390f35b610a9e60048036036040811015610a6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061232c565b60405180821515815260200191505060405180910390f35b610abe61234a565b6040518082815260200191505060405180910390f35b610adc612350565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b10612376565b6040518082815260200191505060405180910390f35b610b2e61237c565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610b626123a2565b60405180821515815260200191505060405180910390f35b610b826123b7565b6040518082815260200191505060405180910390f35b610ba06123bd565b60405180821515815260200191505060405180910390f35b610bc06123d0565b6040518082815260200191505060405180910390f35b610c0c60048036036040811015610bec57600080fd5b8101908080359060200190929190803590602001909291905050506123d6565b005b610c16612495565b005b610c206125d3565b60405180821515815260200191505060405180910390f35b610c6460048036036020811015610c4e57600080fd5b81019080803590602001909291905050506125e6565b005b610c6e6127d4565b6040518082815260200191505060405180910390f35b610cb060048036036020811015610c9a57600080fd5b81019080803590602001909291905050506127da565b005b610d1460048036036040811015610cc857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612803565b6040518082815260200191505060405180910390f35b610d3261288a565b6040518082815260200191505060405180910390f35b610d50612890565b005b610d9460048036036020811015610d6857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061298f565b005b610dc260048036036020811015610dac57600080fd5b8101908080359060200190929190505050612b9f565b005b606060038054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e5c5780601f10610e3157610100808354040283529160200191610e5c565b820191906000526020600020905b815481529060010190602001808311610e3f57829003601f168201915b5050505050905090565b610e6e611a4d565b610ee0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f456565652120596f75277265206e6f74206576656e20616e206f72636100000081525060200191505060405180910390fd5b610ef7600954600854612d3490919063ffffffff16565b4211610f0257600080fd5b662386f26fc10000600b541015610f64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613d536036913960400191505060405180910390fd5b6000600b54610f7230611c73565b10610f7f57600b54610f89565b610f8830611c73565b5b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015610ffc57600080fd5b505af1158015611010573d6000803e3d6000fd5b505050506040513d602081101561102657600080fd5b8101908080519060200190929190505050506000600b819055503373ffffffffffffffffffffffffffffffffffffffff167ff94400eb41c0d6dc48a78d2e742a470e9d93bef23dc7522c797d4598c6b61209826040518082815260200191505060405180910390a250565b60006110a561109e613072565b848461307a565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611155576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613de66023913960400191505060405180910390fd5b600d60009054906101000a900460ff166111d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f736f727279206465762c206e6f2073637261707320666f7220796f750000000081525060200191505060405180910390fd5b600c546111e330611c73565b1015611201576111fb336111f630611c73565b61232c565b5061120f565b61120d33600c5461232c565b505b6000600c81905550565b600e5481565b60095481565b6000600f5461123333611c73565b1015905090565b6000600254905090565b6000611251848484613271565b6113128461125d613072565b61130d85604051806060016040528060288152602001613e2a60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112c3613072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb29092919063ffffffff16565b61307a565b600190509392505050565b6000600560009054906101000a900460ff16905090565b6000600654905090565b60008073ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156113e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613f5a6026913960400191505060405180910390fd5b6015546113f2611664565b11905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461149e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613de66023913960400191505060405180910390fd5b81601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806015819055505050565b60006115936114f7613072565b8461158e8560016000611508613072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3490919063ffffffff16565b61307a565b6001905092915050565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611643576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613de66023913960400191505060405180910390fd5b61164d8282613532565b5050565b600d60019054906101000a900460ff1681565b600080601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156116f357600080fd5b505afa158015611707573d6000803e3d6000fd5b505050506040513d602081101561171d57600080fd5b810190808051906020019092919050505091505090565b61173c611225565b6117ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f596f75277265206e6f74206576656e206120726976657220646f6c7068696e0081525060200191505060405180910390fd5b6117c5600954600854612d3490919063ffffffff16565b42116117d057600080fd5b600760149054906101000a900460ff16611835576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613fc06026913960400191505060405180910390fd5b6118413060165461232c565b506000600760146101000a81548160ff02191690831515021790555042600881905550565b61186e611a71565b6118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f75277265206e6f7420666c6970706572000000000000000000000000000081525060200191505060405180910390fd5b60006118ee601054836136f9565b9050806118fa33611c73565b1015611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613c2f6035913960400191505060405180910390fd5b670de0b6b3a76400008210158015611972575068e40e772ce376d200008211155b6119c7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180613ef1603a913960400191505060405180910390fd5b600f548211611a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526040815260200180613f806040913960400191505060405180910390fd5b81601081905550611a32308261232c565b50611a3c816137ac565b426008819055505050565b60125481565b6000600e54611a5b33611c73565b101580611a6c5750611a6b61133e565b5b905090565b6000601154611a7f33611c73565b1015905090565b60085481565b60105481565b611a9a611a71565b611b0c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f75277265206e6f7420666c6970706572000000000000000000000000000081525060200191505060405180910390fd5b6000611b1a600e54836136f9565b905080611b2633611c73565b1015611b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613c2f6035913960400191505060405180910390fd5b670de0b6b3a76400008210158015611b9e575068055de6a779bbac00008211155b611bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613d896028913960400191505060405180910390fd5b600f548210611c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526034815260200180613e526034913960400191505060405180910390fd5b81600e81905550611c5e308261232c565b50611c68816137ac565b426008819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611cc3613072565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d85576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611e4e611fcf565b611ea3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d2f6024913960400191505060405180910390fd5b611eba600954600854612d3490919063ffffffff16565b4211611ec557600080fd5b611ecd611a71565b15611f3e5760018110158015611ee45750600a8111155b611f39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602f815260200180613f2b602f913960400191505060405180910390fd5b611fa6565b60018110158015611f50575060038111155b611fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526037815260200180613b216037913960400191505060405180910390fd5b5b611fb23060175461232c565b50611fbe6017546137ac565b80600a819055504260088190555050565b6000601054611fdd33611c73565b1015905090565b60155481565b611ff26123a2565b612064576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f596f75277265206e6f742070657465722074686520646f6c7068696e0000000081525060200191505060405180910390fd5b6120703060175461232c565b5061207c6017546137ac565b612093600c54600b54612d3490919063ffffffff16565b600b819055506000600c819055506001600d60016101000a81548160ff0219169083151502179055506000601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555042600881905550565b600f5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612141308261232c565b5061215781600b54612d3490919063ffffffff16565b600b81905550601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146121ba57426008819055505b50565b606060048054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156122555780601f1061222a57610100808354040283529160200191612255565b820191906000526020600020905b81548152906001019060200180831161223857829003601f168201915b5050505050905090565b600061232261226c613072565b8461231d85604051806060016040528060258152602001613fe66025913960016000612296613072565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb29092919063ffffffff16565b61307a565b6001905092915050565b6000612340612339613072565b8484613271565b6001905092915050565b600c5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60175481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006012546123b033611c73565b1015905090565b600a5481565b600760149054906101000a900460ff1681565b600b5481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461247c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613de66023913960400191505060405180910390fd5b8160168190555080601781905550426008819055505050565b61249d611225565b61250f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f596f75277265206e6f74206576656e206120726976657220646f6c7068696e0081525060200191505060405180910390fd5b612526600954600854612d3490919063ffffffff16565b421161253157600080fd5b600760149054906101000a900460ff1615612597576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613e866022913960400191505060405180910390fd5b6125a33060165461232c565b506125af6016546137ac565b6001600760146101000a81548160ff02191690831515021790555042600881905550565b600d60009054906101000a900460ff1681565b6125ee611a71565b612660576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f75277265206e6f7420666c6970706572000000000000000000000000000081525060200191505060405180910390fd5b600061266e600f54836136f9565b90508061267a33611c73565b10156126d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613c2f6035913960400191505060405180910390fd5b670de0b6b3a764000082101580156126f257506872073b9671bb6900008211155b612747576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180613bf96036913960400191505060405180910390fd5b600e5482118015612759575060105482105b6127ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252605f815260200180613b58605f913960600191505060405180910390fd5b81600f819055506127bf308261232c565b506127c9816137ac565b426008819055505050565b60165481565b6127e4308261232c565b506127fa81600c54612d3490919063ffffffff16565b600c8190555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60115481565b612898611fcf565b6128ed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613d2f6024913960400191505060405180910390fd5b600d60009054906101000a900460ff1615612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180613cac602b913960400191505060405180910390fd5b61295f3060165461232c565b5061296b6016546137ac565b6001600d60006101000a81548160ff02191690831515021790555042600881905550565b612997613072565b73ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a59576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180613c646026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612ba7611a71565b612c19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f596f75277265206e6f7420666c6970706572000000000000000000000000000081525060200191505060405180910390fd5b612c30600954600854612d3490919063ffffffff16565b4211612c3b57600080fd5b600760149054906101000a900460ff16612ca0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526032815260200180613cd76032913960400191505060405180910390fd5b60188111158015612cb2575060018110155b612d07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526035815260200180613db16035913960400191505060405180910390fd5b612d133060175461232c565b50612d1f6017546137ac565b610e1081026009819055504260088190555050565b600080828401905083811015612db2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b612dc7838383612edd565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612e8e57600654612e1982612e0b61123a565b612d3490919063ffffffff16565b1115612e8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f45524332304361707065643a206361702065786365656465640000000000000081525060200191505060405180910390fd5b5b505050565b6000612ed583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612fb2565b905092915050565b505050565b600080831415612ef55760009050612f62565b6000828402905082848281612f0657fe5b0414612f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180613e096021913960400191505060405180910390fd5b809150505b92915050565b6000612faa83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506137cd565b905092915050565b600083831115829061305f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613024578082015181840152602081019050613009565b50505050905090810190601f1680156130515780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613100576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526024815260200180613ecd6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613186576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180613c8a6022913960400191505060405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526025815260200180613ea86025913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561337d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526023815260200180613afe6023913960400191505060405180910390fd5b613388838383613893565b6133f381604051806060016040528060268152602001613d09602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fb29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613486816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156135d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f45524332303a206d696e7420746f20746865207a65726f20616464726573730081525060200191505060405180910390fd5b6135e160008383613893565b6135f681600254612d3490919063ffffffff16565b60028190555061364d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d3490919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b600081831415613771576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f7468697320697320616c726561647920746865207468726573686f6c6400000081525060200191505060405180910390fd5b8183116137905761378b8383612e9390919063ffffffff16565b6137a4565b6137a38284612e9390919063ffffffff16565b5b905092915050565b600760149054906101000a900460ff166137ca576137c9816139eb565b5b50565b60008083118290613879576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561383e578082015181840152602081019050613823565b50505050905090810190601f16801561386b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161388557fe5b049050809150509392505050565b61389e838383612dbc565b600760149054906101000a900460ff16156139e6578273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146139e5573073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146139e457600061394682613aad565b90506000613977826139698561395b89611c73565b612e9390919063ffffffff16565b612e9390919063ffffffff16565b10156139ce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526042815260200180613bb76042913960600191505060405180910390fd5b6139d7816139eb565b6139e2843083613271565b505b5b5b505050565b60058110613a8e576000600d60019054906101000a900460ff16613a3557613a306064613a22600585612ee290919063ffffffff16565b612f6890919063ffffffff16565b613a38565b60005b90506000613a4f8284612e9390919063ffffffff16565b9050613a6681600b54612d3490919063ffffffff16565b600b81905550613a8182600c54612d3490919063ffffffff16565b600c819055505050613aaa565b613aa381600b54612d3490919063ffffffff16565b600b819055505b50565b6000600760149054906101000a900460ff1615613af357613aec6064613ade600a5485612ee290919063ffffffff16565b612f6890919063ffffffff16565b9050613af8565b600090505b91905056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734565656521204d696e696d756d20736e61746368526174652069732031252c206d6178696d756d2031302520666f7220466c69707065725468726573686f6c6420666f7220526976657220446f6c7068696e73206d757374206772656174207468616e20526976657220446f6c7068696e73202a616e642a206c657373207468616e20426f74746c656e6f736520446f6c7068696e7345524332303a207472616e7366657220616d6f756e74207769746820736e6174636820636f737420657863656564732062616c616e63652c2073656e64206c6573735468726573686f6c6420666f7220526976657220446f6c7068696e73206d757374206265203120746f20323130332e34352045454545456565652120596f7520646f6e2774206861766520656e6f756768204545454520746f206d616b652074686973206368616e67652e4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373456565652120546f6f206c617465207375636b65722c20646576277320656174696e6720746f6e69676874456565652120596f75206e65656420746f207761697420666f72207468652067616d6520746f20737461727420666972737445524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365596f75277265206e6f74206576656e206120626f74746c656e6f736520646f6c7068696e736e61746368706f6f6c3a206d696e20736e6174636820616d6f756e742028302e3031204545454529206e6f7420726561636865642e5468726573686f6c6420666f72204f72636173206d757374206265203120746f20393920454545454565656521204d696e696d756d20636f6f6c646f776e206973203120686f75722c206d6178696d756d20697320323420686f757273596f75277265206e6f7420746865206465762c20676574206f7574206f662068657265536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655468726573686f6c6420666f72204f72636173206d757374206265206c657373207468616e20526976657220446f6c7068696e734565656521205468652067616d652068617320616c7265616479207374617274656445524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573735468726573686f6c6420666f7220426f74746c656e6f736520446f6c7068696e73206d757374206265203120746f20343230362e3920454545454565656521204d696e696d756d20736e61746368526174652069732031252c206d6178696d756d206973203130252e456565652120546865204c5020636f6e747261637420686173206e6f74206265656e207365745468726573686f6c6420666f7220426f74746c656e6f736520446f6c7068696e73206d757374206772656174207468616e20526976657220446f6c7068696e734565656521205468652067616d652068617320616c7265616479206265656e2070617573656445524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201db751b03867644ea1ab621da2f32092a371c7ac6b9d2b980b74187248299cad64736f6c634300060c0033
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.