Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LadyLuck
Compiler Version
v0.8.2+commit.661d1103
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
/** * WWWW.LADYLUCKCOIN.COM * * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&@&#*,(&@@&@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&(,&@@&&@@@@@@@@@@@@@@@@&@@@@@@@@@@@@@@@@@@@@&@@@@ * @@@@@@@@@@@@@@@@@@@@@@@&@@%*(@@@@@@@&@@%(,...,,,.,,#%@@&@@@@@@@@@@@@@@@@&@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@&&(*&@&@&@@&**#@@&&@@@@@@@@@@@@@@@@@&&&@@@@@@@@@@&*,@&(,,@@ * @@@@@@@@@& .%@@@@@@%*(@&@&@&*(&@@@@@@@@&&*.(&@@@@@@@@@@@@@@@@@@@@@@@@&&*..@@@@@ * @@@@@@@@@@& .#@&@&&(#&@@@@@@@@&@. &@@@@@@@@@@@@@@@@&@#@&@%*#@@@&@@@ * @@@@@@@@@@@@% #@@@@@@&@@@@. &@@@@@@@@@@@@@@&&* .&@@@@@@@@@@@ * @@@@@@@@@@@@@(&((@#. (&@@@@* @@@@@@@@@@@&# (@@&&@@@@@@@@@@@ * @@@@@@@@@@@@&& .(@@@@#, (@ .&@@@@@@@%. #&@@&@@@@@@@@@@@@@@ * @@@@@@@@@@@@@**& ,%@@@&, , .&&. .&@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@&@**&@%#*%@@&@@@&%(*. (@( &&,%@@@&@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@&#*(@@@* .,*(#* @@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@ @@@@*@@(***(((##@@@@@@@. *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@**@@@&*@@@@@@@@@@@@@@@@@@ % (@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@**@@@&*@@@@@@@@@@@@@@@@@& .@% .@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@**@@@@*@@@@@@@@@@@@@@@@* #&& @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@**(@@@#*@@@@@@@@@@@@@@@@ @& ,@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@**(@@@*#@@@@@@@@@@@@&@@ #@ *@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@(**@&&@*(@@@@@@@@@@@@&* @( @&@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@&(**@@@@(*@@@@@@@@@@@@ (@( *@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@&(**&@@@&*(@@@@@@@@@* &@# @@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@%(((@&@@%*(@@@@@@@ @@@% @@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@&@(**(@&&&&((%&&@&@(&@@& @@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@(***&@@@@&(((&@@&@&@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@#*(*(@@&@@@&(,,*#@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@&@@(****&@@@@@@@@@# .. .@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@&&*,,,,*&@@@@* %. *@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&*.... @. (@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&@@( @ (@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@, @@ (@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@&@@@# %@, (&@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@&@@@. @@@ ,@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@( &@@@, @@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@&&. (&&&@&@& &@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@&@@&@@@@@@@@@@@@@@@@&&&@@@@@@@@&@&@@@&&@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@ ██╗░░░░░░█████╗░██████╗░██╗░░░██╗██╗░░░░░██╗░░░██╗░█████╗░██╗░░██╗ @@@@@@ * @@@@@ ██║░░░░░██╔══██╗██╔══██╗╚██╗░██╔╝██║░░░░░██║░░░██║██╔══██╗██║░██╔╝ @@@@@@ * @@@@@ ██║░░░░░███████║██║░░██║░╚████╔╝░██║░░░░░██║░░░██║██║░░╚═╝█████═╝░ @@@@@@ * @@@@@ ██║░░░░░██╔══██║██║░░██║░░╚██╔╝░░██║░░░░░██║░░░██║██║░░██╗██╔═██╗░ @@@@@@ * @@@@@ ███████╗██║░░██║██████╔╝░░░██║░░░███████╗╚██████╔╝╚█████╔╝██║░╚██╗ @@@@@@ * @@@@@ ╚══════╝╚═╝░░╚═╝╚═════╝░░░░╚═╝░░░╚══════╝░╚═════╝░░╚════╝░╚═╝░░╚═╝ @@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ * * SPDX-License-Identifier: MIT * */ pragma solidity ^0.8.0; abstract contract Initializable { bool private _initialized; bool private _initializing; modifier initializer() { require(_initializing || !_initialized, "Initializable: contract is already initialized"); bool isTopLevelCall = !_initializing; if (isTopLevelCall) { _initializing = true; _initialized = true; } _; if (isTopLevelCall) { _initializing = false; } } } contract VRFRequestIDBase { function makeVRFInputSeed(bytes32 _keyHash, uint256 _userSeed, address _requester, uint256 _nonce) internal pure returns (uint256) { return uint256(keccak256(abi.encode(_keyHash, _userSeed, _requester, _nonce))); } function makeRequestId( bytes32 _keyHash, uint256 _vRFInputSeed) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_keyHash, _vRFInputSeed)); } } interface LinkTokenInterface { function allowance(address owner, address spender) external view returns (uint256 remaining); function approve(address spender, uint256 value) external returns (bool success); function balanceOf(address owner) external view returns (uint256 balance); function decimals() external view returns (uint8 decimalPlaces); function decreaseApproval(address spender, uint256 addedValue) external returns (bool success); function increaseApproval(address spender, uint256 subtractedValue) external; function name() external view returns (string memory tokenName); function symbol() external view returns (string memory tokenSymbol); function totalSupply() external view returns (uint256 totalTokensIssued); function transfer(address to, uint256 value) external returns (bool success); function transferAndCall(address to, uint256 value, bytes calldata data) external returns (bool success); function transferFrom(address from, address to, uint256 value) external returns (bool success); } library SafeMathChainlink { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "SafeMath: subtraction overflow"); uint256 c = a - b; return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "SafeMath: division by zero"); uint256 c = a / b; return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0, "SafeMath: modulo by zero"); return a % b; } } abstract contract VRFConsumerBase is Initializable, VRFRequestIDBase { using SafeMathChainlink for uint256; function fulfillRandomness(bytes32 requestId, uint256 randomness) internal virtual; function requestRandomness(bytes32 _keyHash, uint256 _fee, uint256 _seed) internal returns (bytes32 requestId) { LINK.transferAndCall(vrfCoordinator, _fee, abi.encode(_keyHash, _seed)); uint256 vRFSeed = makeVRFInputSeed(_keyHash, _seed, address(this), nonces[_keyHash]); nonces[_keyHash] = nonces[_keyHash].add(1); return makeRequestId(_keyHash, vRFSeed); } LinkTokenInterface internal LINK; address private vrfCoordinator; mapping(bytes32 /* keyHash */ => uint256 /* nonce */) private nonces; function __VRFConsumerBase_init() internal initializer { __VRFConsumerBase_init_unchained(); } function __VRFConsumerBase_init_unchained() internal initializer { vrfCoordinator = 0xf0d54349aDdcf704F77AE15b96510dEA15cb7952; LINK = LinkTokenInterface(0x514910771AF9Ca656af840dff83E8264EcF986CA); } function rawFulfillRandomness(bytes32 requestId, uint256 randomness) external { require(msg.sender == vrfCoordinator, "Only VRFCoordinator can fulfill"); fulfillRandomness(requestId, randomness); } } abstract contract ContextUpgradeable is Initializable { function __Context_init() internal initializer { __Context_init_unchained(); } function __Context_init_unchained() internal initializer { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } uint256[50] private __gap; } abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { event Paused(address account); event Unpaused(address account); bool private _paused; function __Pausable_init() internal initializer { __Context_init_unchained(); __Pausable_init_unchained(); } function __Pausable_init_unchained() internal initializer { _paused = false; } function paused() public view virtual returns (bool) { return _paused; } modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } uint256[49] private __gap; } abstract contract OwnableUpgradeable is Initializable, ContextUpgradeable { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function __Ownable_init() internal initializer { __Context_init_unchained(); __Ownable_init_unchained(); } function __Ownable_init_unchained() internal initializer { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } uint256[49] private __gap; } library MathUpgradeable { function max(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function average(uint256 a, uint256 b) internal pure returns (uint256) { return (a / 2) + (b / 2) + ((a % 2 + b % 2) / 2); } } library ArraysUpgradeable { function findUpperBound(uint256[] storage array, uint256 element) internal view returns (uint256) { if (array.length == 0) { return 0; } uint256 low = 0; uint256 high = array.length; while (low < high) { uint256 mid = MathUpgradeable.average(low, high); if (array[mid] > element) { high = mid; } else { low = mid + 1; } } if (low > 0 && array[low - 1] == element) { return low - 1; } else { return low; } } } library AddressUpgradeable { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } 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"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } interface IERC20Upgradeable { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract ERC20Upgradeable is Initializable, ContextUpgradeable, IERC20Upgradeable { using ArraysUpgradeable for uint256[]; using AddressUpgradeable for address; mapping(address => bool) internal _isHolder; mapping(uint256 => mapping(address => address)) internal _groupNextHolder; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => uint256) internal _balances; mapping (uint256 => uint256) internal _groupHolders; mapping (address => uint256) internal _addressGroup; mapping (address => uint256) internal _weekLotto; uint256[] internal GroupIDList; uint256 internal _totalSupply; string private _name; string private _symbol; uint256 public ExchangeSupply; uint256 public HoldersNum; uint256 public WeekCounter; address public MegaPot; address public LuckPot; address public DevWallet; address public MarketingWallet; address constant MOJO = address(1); function __ERC20_init(string memory name_, string memory symbol_) internal initializer { __Context_init_unchained(); __ERC20_init_unchained(name_, symbol_); } function __ERC20_init_unchained(string memory name_, string memory symbol_) internal initializer { _name = name_; _symbol = symbol_; MarketingWallet = address(0x05dD722A8478715eC4ab7CDdecB82D598A313072); MegaPot = address(0x83F9B450a5d71dC6CBeef6D8E7214181FAf5D41f); LuckPot = address(0xc4e017a03Cee1F129E93052e6b150466102B3aF5); DevWallet = address(0x538Ca3c8ad2F0e50730E51D730b907ab993EC326); } function name() public view virtual returns (string memory) { return _name; } function symbol() public view virtual returns (string memory) { return _symbol; } function decimals() public view virtual returns (uint8) { return 18; } function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } function EligibleSupply() public view virtual returns (uint256){ uint256 ExcludedSupply = _totalSupply - ExchangeSupply - balanceOf(MegaPot) - balanceOf(LuckPot) - balanceOf(DevWallet) - balanceOf(MarketingWallet); return ExcludedSupply; } function balanceOf(address account) public view virtual override returns (uint256) { if (_isHolder[account] && _weekLotto[account] < WeekCounter && account != DevWallet && account != MegaPot && account != LuckPot && account != MarketingWallet && !account.isContract()){ uint256 temp = _balances[account]; uint256 WeekDelta = WeekCounter - _weekLotto[account]; temp = (temp * (99 ** WeekDelta))/(100** WeekDelta); return temp; } else { return _balances[account]; } } function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) { _transfer(sender, recipient, amount); uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } 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); uint256 feeAmount = amount/100; uint256 gasAmount = amount/100; if (sender == MegaPot || sender == LuckPot || sender == DevWallet || sender == MarketingWallet || recipient == DevWallet || recipient == MegaPot || recipient == LuckPot || recipient == MarketingWallet) { feeAmount = 0; gasAmount = 0; } uint256 senderBalance = balanceOf(sender); require(senderBalance >= amount, "ERC20: transfer amount exceeds balance"); uint256 receiveAmount = amount - feeAmount - gasAmount; _balances[sender] = senderBalance - amount; _balances[recipient] += receiveAmount; _balances[MegaPot] += feeAmount; _balances[MarketingWallet] += gasAmount; emit Transfer(sender, recipient, amount); emit Transfer(sender, MegaPot, feeAmount); emit Transfer(sender, MarketingWallet, gasAmount); } function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); if(_totalSupply == 0){ _totalSupply += amount; } _balances[account] += amount; emit Transfer(address(0), account, amount); } function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); uint256 accountBalance = _balances[account]; require(accountBalance >= amount, "ERC20: burn amount exceeds balance"); _balances[account] = accountBalance - amount; if(account != MegaPot && account != LuckPot){ _totalSupply -= amount; } emit Transfer(account, address(0), amount); } 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); } function AddGroupHolder(address holder) internal { if(_isHolder[holder] == false && holder != address(0) && holder != MegaPot && holder != LuckPot && holder != DevWallet && holder != MarketingWallet && !holder.isContract()){ _isHolder[holder] = true; uint256 GroupNumber = 1; while (_groupHolders[GroupNumber] >=100){ GroupNumber++; } if(_groupNextHolder[GroupNumber][MOJO] == address(0)){ _groupNextHolder[GroupNumber][MOJO] = MOJO; GroupIDList.push(GroupNumber); } _groupNextHolder[GroupNumber][holder] = _groupNextHolder[GroupNumber][MOJO]; _groupNextHolder[GroupNumber][MOJO] = holder; _addressGroup[holder] = GroupNumber; _groupHolders[GroupNumber]++; HoldersNum++; _weekLotto[holder] = WeekCounter; } } function RemoveGroupHolder(address holder) internal { if(_isHolder[holder] == true && holder != address(0) && holder != MegaPot && holder != LuckPot && holder != DevWallet && holder != MarketingWallet && !holder.isContract()){ _isHolder[holder] = false; uint256 GroupNumber = _addressGroup[holder]; address prevHolder = GetPrevHolder(holder); _groupNextHolder[GroupNumber][prevHolder] = _groupNextHolder[GroupNumber][holder]; _groupNextHolder[GroupNumber][holder] = address(0); _addressGroup[holder] = 0; _groupHolders[GroupNumber] = _groupHolders[GroupNumber] - 1; HoldersNum = HoldersNum - 1; _weekLotto[holder] = 0; } } function GetPrevHolder(address holder) internal view returns(address){ address currentAddress = MOJO; uint256 GroupNumber = _addressGroup[holder]; while(_groupNextHolder[GroupNumber][currentAddress] != MOJO){ if(_groupNextHolder[GroupNumber][currentAddress] == holder){ return currentAddress; } currentAddress = _groupNextHolder[GroupNumber][currentAddress]; } return address(0); } function GetGroupHolders(uint256 GroupNumber) internal view returns (address[] memory){ address[] memory holders = new address[](_groupHolders[GroupNumber]); address currentAddress = _groupNextHolder[GroupNumber][MOJO]; for(uint256 i = 0; currentAddress != MOJO; ++i){ holders[i] = currentAddress; currentAddress = _groupNextHolder[GroupNumber][currentAddress]; } return holders; } function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual { if(to.isContract()){ExchangeSupply =ExchangeSupply + amount;} if(from.isContract()){ExchangeSupply =ExchangeSupply - amount;} _balances[from] = balanceOf(from); _weekLotto[from] = WeekCounter; _balances[to] - balanceOf(to); _weekLotto[to] = WeekCounter; if (from == address(0)) { AddGroupHolder(to); } else if (to == address(0)) { if (balanceOf(from) - amount == 0){RemoveGroupHolder(from);} } else { AddGroupHolder(to); if (balanceOf(from) - amount == 0){RemoveGroupHolder(from);} } } uint256[45] private __gap; } contract LadyLuck is Initializable, ERC20Upgradeable, OwnableUpgradeable, PausableUpgradeable, VRFConsumerBase { bytes32 internal keyHash; uint256 internal fee; uint256 public randomResult; uint public LastJackpotTime; uint public NextJackpotTime; uint256 internal JackpotFreq; uint256 public JackpotStarted; uint256 internal PreviousRandomNumber; uint256[] internal GroupBalanceList; uint256 internal WinningGroupMega; address public WinningWalletMega; uint256 public WinningNumberMega; uint256 internal WinningGroupLuck; address public WinningWalletLuck; uint256 public WinningNumberLuck; uint256 internal RollingGroupTotal; function initialize() public virtual initializer { __ERC20_init("Lady Luck", "LUCK"); __Context_init(); __Pausable_init(); __Ownable_init(); __VRFConsumerBase_init(); keyHash = 0xAA77729D3466CA35AE8D28B3BBAC7CC36A5031EFDC430821C02BC31A238AF445; fee = 2 * 10 ** 18; // 0.1 LINK _mint(DevWallet, 1000000000 * 10 ** decimals()); WinningWalletMega = MegaPot; WinningWalletLuck = LuckPot; JackpotFreq = 604000;//One Week; LastJackpotTime = block.timestamp; NextJackpotTime = block.timestamp + JackpotFreq; } function distributeToken(address[] memory addresses, uint256 _value) public onlyOwner { for( uint256 i=0;i<addresses.length;i++){ transfer(addresses[i], _value); } } function PrepareLottery() public onlyOwner { /////require(block.timestamp > NextJackpotTime); uint256 NumberOfGroups = ShowGroupIDList().length; require(JackpotStarted < NumberOfGroups, "Lottery Has Already Been Prepared"); JackpotStarted++; if(JackpotStarted == 1){ _pause(); delete GroupBalanceList; uint256 temp = GetTrueGroupBalance(JackpotStarted); GroupBalanceList.push(temp); RollingGroupTotal = temp; } else if(JackpotStarted <= NumberOfGroups){ uint256 temp = GetTrueGroupBalance(JackpotStarted); GroupBalanceList.push(temp); RollingGroupTotal += temp; } if(JackpotStarted == NumberOfGroups){ PreviousRandomNumber = randomResult; getRandomNumber(block.timestamp*block.difficulty); } } function RunLuckLottery() public onlyOwner { uint256[] memory GroupIDList = ShowGroupIDList(); require(JackpotStarted == GroupIDList.length, "Please Prepare Lottery Or End Mega Lottery"); require(PreviousRandomNumber != randomResult, "Please Wait For Chainlink To Provide The Random Number"); uint256 FirstRandomResult = uint256(keccak256(abi.encode(randomResult, 0))); WinningNumberLuck = FirstRandomResult % RollingGroupTotal + 1; uint256 i = 0; WinningGroupLuck = 0; uint256 RollingTotal = 0; while (WinningGroupLuck == 0){ uint256 CurrentGroupBalance = GroupBalanceList[i]; if (RollingTotal < WinningNumberLuck && WinningNumberLuck <= RollingTotal + CurrentGroupBalance){ WinningGroupLuck = GroupIDList[i]; } else { RollingTotal += CurrentGroupBalance; } i++; } address[] memory GroupWinnerList = GetGroupHolders(WinningGroupLuck); for (uint j=0; j<GroupWinnerList.length; j++) { uint256 CurrentUserBalance = balanceOf(GroupWinnerList[j]); if (RollingTotal < WinningNumberLuck && WinningNumberLuck <= RollingTotal + CurrentUserBalance){ WinningWalletLuck = GroupWinnerList[j]; } RollingTotal += CurrentUserBalance; } JackpotStarted++; } function RunMegaLottery() public onlyOwner { uint256[] memory GroupIDList = ShowGroupIDList(); require(JackpotStarted == GroupIDList.length + 1, "Please Prepare Lottery & End Luck Lottery"); uint256 SecondRandomResult = uint256(keccak256(abi.encode(randomResult, 1))); WinningNumberMega = SecondRandomResult % RollingGroupTotal + 1; uint256 i = 0; WinningGroupMega = 0; uint256 RollingTotal = 0; while (WinningGroupMega == 0){ uint256 CurrentGroupBalance = GroupBalanceList[i]; if (RollingTotal < WinningNumberMega && WinningNumberMega <= RollingTotal + CurrentGroupBalance){ WinningGroupMega = GroupIDList[i]; } else { RollingTotal += CurrentGroupBalance; } i++; } address[] memory GroupWinnerList = GetGroupHolders(WinningGroupMega); for (uint j=0; j<GroupWinnerList.length; j++) { uint256 CurrentUserBalance = balanceOf(GroupWinnerList[j]); if (RollingTotal < WinningNumberMega && WinningNumberMega <= RollingTotal + CurrentUserBalance){ WinningWalletMega = GroupWinnerList[j]; } RollingTotal += CurrentUserBalance; } WeekCounter++; _unpause(); uint256 MegaPotBalance = balanceOf(MegaPot); _burn(MegaPot, MegaPotBalance); _mint(WinningWalletMega, MegaPotBalance); _mint(LuckPot, RollingGroupTotal/100); LastJackpotTime = block.timestamp; NextJackpotTime = LastJackpotTime + JackpotFreq; JackpotStarted = 0; } function PayLuckWinner() public onlyOwner { uint256 LuckPotBalance = balanceOf(LuckPot); _burn(LuckPot, LuckPotBalance); _mint(WinningWalletLuck, LuckPotBalance); } function GetTrueGroupBalance(uint256 Groups) internal view returns(uint256){ uint256 Temp; address[] memory TempList = GetGroupHolders(Groups); for (uint j=0; j<TempList.length; j++) { Temp += balanceOf(TempList[j]); } return Temp; } function ShowGroupIDList() internal view virtual returns(uint256[] memory){ return GroupIDList; } function CurrentTime() public view virtual returns (uint){ return block.timestamp; } function ChangeLotteryFreq(uint256 Freq) public onlyOwner { JackpotFreq = Freq; } function ResetLotteryStarted() public onlyOwner { JackpotStarted = 0; } function CurrentMegaPotSize() public view returns(uint256){ return balanceOf(MegaPot); } function CurrentLuckPotSize() public view returns(uint256){ return balanceOf(LuckPot); } function getRandomNumber(uint256 userProvidedSeed) internal returns (bytes32 requestId) { require(LINK.balanceOf(address(this)) >= fee, "Not enough LINK - fill contract with faucet"); return requestRandomness(keyHash, fee, userProvidedSeed); } function fulfillRandomness(bytes32 requestId, uint256 randomness) internal override { randomResult = randomness; } function withdrawLink() public onlyOwner { require(LINK.transfer(msg.sender, LINK.balanceOf(address(this))), "Unable to transfer"); } function _beforeTokenTransfer(address from, address to, uint256 amount) internal whenNotPaused override(ERC20Upgradeable) { super._beforeTokenTransfer(from, to, amount); } function burn(uint256 amount) public virtual { _burn(_msgSender(), amount); } function pause() public onlyOwner{ _pause(); } function unpause() public onlyOwner{ _unpause(); } //// function resetGroup(uint256 start, uint256 end) public onlyOwner{ address[] memory GroupHoldersList = GetGroupHolders(1); for (uint i=start; i<end; i++) { RemoveGroupHolder(GroupHoldersList[i]); AddGroupHolder(GroupHoldersList[i]); } } function resetTotalSupply(uint256 amount) public onlyOwner{ _totalSupply = amount; } //// }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"uint256","name":"Freq","type":"uint256"}],"name":"ChangeLotteryFreq","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"CurrentLuckPotSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CurrentMegaPotSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"CurrentTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DevWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"EligibleSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ExchangeSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"HoldersNum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"JackpotStarted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LastJackpotTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LuckPot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MegaPot","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NextJackpotTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PayLuckWinner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"PrepareLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ResetLotteryStarted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RunLuckLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"RunMegaLottery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"WeekCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WinningNumberLuck","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WinningNumberMega","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WinningWalletLuck","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WinningWalletMega","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[{"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":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","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":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"distributeToken","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":[],"name":"initialize","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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"randomResult","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"requestId","type":"bytes32"},{"internalType":"uint256","name":"randomness","type":"uint256"}],"name":"rawFulfillRandomness","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"end","type":"uint256"}],"name":"resetGroup","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"resetTotalSupply","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLink","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506137d2806100206000396000f3fe608060405234801561001057600080fd5b50600436106102bb5760003560e01c80638456cb5911610182578063c311af8a116100e9578063e507300e116100a2578063ee78cf201161007c578063ee78cf2014610570578063f2fde38b14610583578063f4384ad614610596578063f446b8d71461059f576102bb565b8063e507300e14610556578063eab375fa1461055f578063ee2b70bf14610567576102bb565b8063c311af8a146104ea578063c76c4c22146104f3578063d80e8700146104fb578063dd62ed3e14610501578063de2fe3de1461053a578063e25768a71461054d576102bb565b8063a457c2d71161013b578063a457c2d714610483578063a9059cbb14610496578063a9c7648f146104a9578063aeffe864146104bc578063af8a2b96146104cf578063b115e4df146104d7576102bb565b80638456cb591461043f57806388b6be2d146104475780638da5cb5b1461044f5780638dc654a21461046057806394985ddd1461046857806395d89b411461047b576102bb565b806339509351116102265780635c975abb116101df5780635c975abb146103f557806370a0823114610400578063715018a614610413578063734a57651461041b5780638129fc1c1461042e578063824fb22f14610436576102bb565b806339509351146103ad5780633a0ef28e146103c05780633f4ba83a146103c957806342619f66146103d157806342966c68146103da5780634e5a8c05146103ed576102bb565b8063228791f711610278578063228791f71461035557806323b872dd1461035d57806324a0ffdf146103705780632598cdb2146103785780632cfa695e1461038b578063313ce5671461039e576102bb565b806306fdde03146102c0578063095ea7b3146102de5780630b72e5a514610301578063104e496c1461030b57806318160ddd14610322578063217b0b6d1461032a575b600080fd5b6102c86105b2565b6040516102d591906134b1565b60405180910390f35b6102f16102ec3660046132d9565b610644565b60405190151581526020016102d5565b61030961065a565b005b61031460e75481565b6040519081526020016102d5565b603b54610314565b60e35461033d906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b610314610694565b6102f161036b36600461329e565b6106b1565b610309610764565b60445461033d906001600160a01b031681565b6103096103993660046133ee565b610a69565b604051601281526020016102d5565b6102f16103bb3660046132d9565b610b23565b61031460405481565b610309610b5a565b61031460db5481565b6103096103e836600461340f565b610b8e565b610314610b9b565b60a45460ff166102f1565b61031461040e366004613252565b610c32565b610309610d7f565b60415461033d906001600160a01b031681565b610309610df3565b61031460dd5481565b610309610f7b565b610309610fad565b6072546001600160a01b031661033d565b61030961101e565b6103096104763660046133ee565b61118c565b6102c86111f0565b6102f16104913660046132d9565b6111ff565b6102f16104a43660046132d9565b61129a565b6103096104b7366004613302565b6112a7565b60425461033d906001600160a01b031681565b610309611326565b60435461033d906001600160a01b031681565b610314603f5481565b610314611640565b42610314565b61031461050f36600461326c565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b61030961054836600461340f565b611658565b61031460dc5481565b61031460e45481565b610309611687565b610314603e5481565b61030961057e36600461340f565b611822565b610309610591366004613252565b611851565b61031460df5481565b60e65461033d906001600160a01b031681565b6060603c80546105c1906136d0565b80601f01602080910402602001604051908101604052809291908181526020018280546105ed906136d0565b801561063a5780601f1061060f5761010080835404028352916020019161063a565b820191906000526020600020905b81548152906001019060200180831161061d57829003601f168201915b5050505050905090565b600061065133848461193c565b50600192915050565b6072546001600160a01b0316331461068d5760405162461bcd60e51b815260040161068490613512565b60405180910390fd5b600060df55565b6041546000906106ac906001600160a01b0316610c32565b905090565b60006106be848484611a61565b6001600160a01b0384166000908152603560209081526040808320338452909152902054828110156107435760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610684565b610757853361075286856136b9565b61193c565b60019150505b9392505050565b6072546001600160a01b0316331461078e5760405162461bcd60e51b815260040161068490613512565b6000610798611dea565b9050805160df54146107ff5760405162461bcd60e51b815260206004820152602a60248201527f506c656173652050726570617265204c6f7474657279204f7220456e64204d656044820152696761204c6f747465727960b01b6064820152608401610684565b60db5460e05414156108725760405162461bcd60e51b815260206004820152603660248201527f506c65617365205761697420466f7220436861696e6c696e6b20546f2050726f6044820152753b34b232902a3432902930b73237b690273ab6b132b960511b6064820152608401610684565b60db54604080516020808201939093526000818301528151808203830181526060909101909152805191012060e8546108ab9082613726565b6108b6906001613547565b60e755600060e5819055805b60e55461096d57600060e183815481106108ec57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905060e75482108015610915575061090f8183613547565b60e75411155b1561094d5784838151811061093a57634e487b7160e01b600052603260045260246000fd5b602002602001015160e58190555061095a565b6109578183613547565b91505b826109648161370b565b935050506108c2565b600061097a60e554611e41565b905060005b8151811015610a4c5760006109ba8383815181106109ad57634e487b7160e01b600052603260045260246000fd5b6020026020010151610c32565b905060e754841080156109d857506109d28185613547565b60e75411155b15610a2c578282815181106109fd57634e487b7160e01b600052603260045260246000fd5b602002602001015160e660006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b610a368185613547565b9350508080610a449061370b565b91505061097f565b5060df8054906000610a5d8361370b565b91905055505050505050565b6072546001600160a01b03163314610a935760405162461bcd60e51b815260040161068490613512565b6000610a9f6001611e41565b9050825b82811015610b1d57610adb828281518110610ace57634e487b7160e01b600052603260045260246000fd5b6020026020010151611f54565b610b0b828281518110610afe57634e487b7160e01b600052603260045260246000fd5b60200260200101516120ed565b80610b158161370b565b915050610aa3565b50505050565b3360008181526035602090815260408083206001600160a01b03871684529091528120549091610651918590610752908690613547565b6072546001600160a01b03163314610b845760405162461bcd60e51b815260040161068490613512565b610b8c612316565b565b610b9833826123a9565b50565b6044546000908190610bb5906001600160a01b0316610c32565b604354610bca906001600160a01b0316610c32565b604254610bdf906001600160a01b0316610c32565b604154610bf4906001600160a01b0316610c32565b603e54603b54610c0491906136b9565b610c0e91906136b9565b610c1891906136b9565b610c2291906136b9565b610c2c91906136b9565b91505090565b6001600160a01b03811660009081526033602052604081205460ff168015610c745750604080546001600160a01b038416600090815260396020529190912054105b8015610c8e57506043546001600160a01b03838116911614155b8015610ca857506041546001600160a01b03838116911614155b8015610cc257506042546001600160a01b03838116911614155b8015610cdc57506044546001600160a01b03838116911614155b8015610cf057506001600160a01b0382163b155b15610d5f576001600160a01b0382166000908152603660209081526040808320546039909252808320549054919291610d2991906136b9565b9050610d368160646135b9565b610d418260636135b9565b610d4b908461369a565b610d55919061355f565b9250610d7a915050565b506001600160a01b0381166000908152603660205260409020545b919050565b6072546001600160a01b03163314610da95760405162461bcd60e51b815260040161068490613512565b6072546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3607280546001600160a01b0319169055565b600054610100900460ff1680610e0c575060005460ff16155b610e285760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015610e53576000805460ff1961ff0019909116610100171660011790555b610e9a604051806040016040528060098152602001684c616479204c75636b60b81b815250604051806040016040528060048152602001634c55434b60e01b815250612519565b610ea26125a1565b610eaa61261d565b610eb261268d565b610eba6126fd565b7faa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af44560d955671bc16d674ec8000060da55604354610f19906001600160a01b0316610f066012600a6135c8565b610f1490633b9aca0061369a565b612765565b60415460e380546001600160a01b039283166001600160a01b03199182161790915560425460e680549190931691161790556209376060de8190554260dc819055610f649190613547565b60dd558015610b98576000805461ff001916905550565b6072546001600160a01b03163314610fa55760405162461bcd60e51b815260040161068490613512565b610b8c612846565b6072546001600160a01b03163314610fd75760405162461bcd60e51b815260040161068490613512565b604254600090610fef906001600160a01b0316610c32565b604254909150611008906001600160a01b0316826123a9565b60e654610b98906001600160a01b031682612765565b6072546001600160a01b031633146110485760405162461bcd60e51b815260040161068490613512565b60d6546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561109557600080fd5b505afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd9190613427565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561111357600080fd5b505af1158015611127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114b91906133ce565b610b8c5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b6044820152606401610684565b60d7546001600160a01b031633146111e65760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c006044820152606401610684565b60db8190555b5050565b6060603d80546105c1906136d0565b3360009081526035602090815260408083206001600160a01b0386168452909152812054828110156112815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610684565b611290338561075286856136b9565b5060019392505050565b6000610651338484611a61565b6072546001600160a01b031633146112d15760405162461bcd60e51b815260040161068490613512565b60005b82518110156113215761130e83828151811061130057634e487b7160e01b600052603260045260246000fd5b60200260200101518361129a565b50806113198161370b565b9150506112d4565b505050565b6072546001600160a01b031633146113505760405162461bcd60e51b815260040161068490613512565b600061135a611dea565b90508051600161136a9190613547565b60df54146113cc5760405162461bcd60e51b815260206004820152602960248201527f506c656173652050726570617265204c6f7474657279202620456e64204c75636044820152686b204c6f747465727960b81b6064820152608401610684565b60db54604080516020808201939093526001818301528151808203830181526060909101909152805191012060e8546114059082613726565b611410906001613547565b60e455600060e2819055805b60e2546114c757600060e1838154811061144657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905060e4548210801561146f57506114698183613547565b60e45411155b156114a75784838151811061149457634e487b7160e01b600052603260045260246000fd5b602002602001015160e2819055506114b4565b6114b18183613547565b91505b826114be8161370b565b9350505061141c565b60006114d460e254611e41565b905060005b81518110156115995760006115078383815181106109ad57634e487b7160e01b600052603260045260246000fd5b905060e45484108015611525575061151f8185613547565b60e45411155b156115795782828151811061154a57634e487b7160e01b600052603260045260246000fd5b602002602001015160e360006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6115838185613547565b93505080806115919061370b565b9150506114d9565b50604080549060006115aa8361370b565b91905055506115b7612316565b6041546000906115cf906001600160a01b0316610c32565b6041549091506115e8906001600160a01b0316826123a9565b60e3546115fe906001600160a01b031682612765565b60425460e85461161e916001600160a01b031690610f149060649061355f565b4260dc81905560de5461163091613547565b60dd555050600060df5550505050565b6042546000906106ac906001600160a01b0316610c32565b6072546001600160a01b031633146116825760405162461bcd60e51b815260040161068490613512565b603b55565b6072546001600160a01b031633146116b15760405162461bcd60e51b815260040161068490613512565b60006116bb611dea565b5190508060df54106117195760405162461bcd60e51b815260206004820152602160248201527f4c6f74746572792048617320416c7265616479204265656e20507265706172656044820152601960fa1b6064820152608401610684565b60df80549060006117298361370b565b919050555060df546001141561179857611741612846565b61174d60e16000613184565b600061175a60df546128c1565b60e180546001810182556000919091527f3efdd7a884ff9e18c9e5711c185aa6c5e413b68f23197997da5b1665ca978f990181905560e85550611800565b8060df54116118005760006117ae60df546128c1565b60e1805460018101825560009182527f3efdd7a884ff9e18c9e5711c185aa6c5e413b68f23197997da5b1665ca978f990182905560e8805492935083929091906117f9908490613547565b9091555050505b8060df541415610b985760db5460e0556111ec61181d444261369a565b61291e565b6072546001600160a01b0316331461184c5760405162461bcd60e51b815260040161068490613512565b60de55565b6072546001600160a01b0316331461187b5760405162461bcd60e51b815260040161068490613512565b6001600160a01b0381166118e05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610684565b6072546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3607280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661199e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610684565b6001600160a01b0382166119ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610684565b6001600160a01b0383811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ac55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610684565b6001600160a01b038216611b275760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610684565b611b32838383612a15565b6000611b3f60648361355f565b90506000611b4e60648461355f565b6041549091506001600160a01b0386811691161480611b7a57506042546001600160a01b038681169116145b80611b9257506043546001600160a01b038681169116145b80611baa57506044546001600160a01b038681169116145b80611bc257506043546001600160a01b038581169116145b80611bda57506041546001600160a01b038581169116145b80611bf257506042546001600160a01b038581169116145b80611c0a57506044546001600160a01b038581169116145b15611c16575060009050805b6000611c2186610c32565b905083811015611c825760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610684565b600082611c8f85876136b9565b611c9991906136b9565b9050611ca585836136b9565b6001600160a01b038089166000908152603660205260408082209390935590881681529081208054839290611cdb908490613547565b90915550506041546001600160a01b031660009081526036602052604081208054869290611d0a908490613547565b90915550506044546001600160a01b031660009081526036602052604081208054859290611d39908490613547565b92505081905550856001600160a01b0316876001600160a01b031660008051602061377d83398151915287604051611d7391815260200190565b60405180910390a36041546040518581526001600160a01b039182169189169060008051602061377d8339815191529060200160405180910390a36044546040518481526001600160a01b039182169189169060008051602061377d8339815191529060200160405180910390a350505050505050565b6060603a80548060200260200160405190810160405280929190818152602001828054801561063a57602002820191906000526020600020905b815481526020019060010190808311611e24575050505050905090565b6000818152603760205260408120546060919067ffffffffffffffff811115611e7a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611ea3578160200160208202803683370190505b506000848152603460209081526040808320600184529091528120549192506001600160a01b03909116905b6001600160a01b038216600114611f4b5781838281518110611f0157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091526000878152603482526040808220958416825294909152929092205490911690611f448161370b565b9050611ecf565b50909392505050565b6001600160a01b03811660009081526033602052604090205460ff1615156001148015611f8957506001600160a01b03811615155b8015611fa357506041546001600160a01b03828116911614155b8015611fbd57506042546001600160a01b03828116911614155b8015611fd757506043546001600160a01b03828116911614155b8015611ff157506044546001600160a01b03828116911614155b801561200557506001600160a01b0381163b155b15610b98576001600160a01b0381166000908152603360209081526040808320805460ff1916905560389091528120549061203f83612a66565b60008381526034602090815260408083206001600160a01b03888116808652918452828520805487831687528487208054919093166001600160a01b03199182161790925591855281541690556038825280832083905585835260379091529020549091506120b0906001906136b9565b600083815260376020526040902055603f546120ce906001906136b9565b603f5550506001600160a01b0316600090815260396020526040812055565b6001600160a01b03811660009081526033602052604090205460ff1615801561211e57506001600160a01b03811615155b801561213857506041546001600160a01b03828116911614155b801561215257506042546001600160a01b03828116911614155b801561216c57506043546001600160a01b03828116911614155b801561218657506044546001600160a01b03828116911614155b801561219a57506001600160a01b0381163b155b15610b98576001600160a01b0381166000908152603360205260409020805460ff191660019081179091555b6000818152603760205260409020546064116121ee57806121e68161370b565b9150506121c6565b6000818152603460209081526040808320600184529091529020546001600160a01b031661227257600081815260346020908152604080832060018085529252822080546001600160a01b03191682179055603a805491820181559091527fa2999d817b6757290b50e8ecf3fa939673403dd35c97de392fdb343b4015ce9e018190555b600081815260346020908152604080832060018452825280832080546001600160a01b038781168087528487208054929093166001600160a01b03199283161790925582541617905560388252808320849055838352603790915281208054916122db8361370b565b9091555050603f80549060006122f08361370b565b9091555050604080546001600160a01b0384166000908152603960205291909120555050565b60a45460ff1661235f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610684565b60a4805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166124095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610684565b61241582600083612a15565b6001600160a01b038216600090815260366020526040902054818110156124895760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610684565b61249382826136b9565b6001600160a01b0380851660008181526036602052604090209290925560415416148015906124d057506042546001600160a01b03848116911614155b156124ed5781603b60008282546124e791906136b9565b90915550505b6040518281526000906001600160a01b0385169060008051602061377d83398151915290602001611a54565b600054610100900460ff1680612532575060005460ff16155b61254e5760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612579576000805460ff1961ff0019909116610100171660011790555b612581612b1d565b61258b8383612b90565b8015611321576000805461ff0019169055505050565b600054610100900460ff16806125ba575060005460ff16155b6125d65760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612601576000805460ff1961ff0019909116610100171660011790555b612609612b1d565b8015610b98576000805461ff001916905550565b600054610100900460ff1680612636575060005460ff16155b6126525760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff1615801561267d576000805460ff1961ff0019909116610100171660011790555b612685612b1d565b612609612cb2565b600054610100900460ff16806126a6575060005460ff16155b6126c25760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff161580156126ed576000805460ff1961ff0019909116610100171660011790555b6126f5612b1d565b612609612d30565b600054610100900460ff1680612716575060005460ff16155b6127325760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff1615801561275d576000805460ff1961ff0019909116610100171660011790555b612609612de7565b6001600160a01b0382166127bb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610684565b6127c760008383612a15565b603b546127e65780603b60008282546127e09190613547565b90915550505b6001600160a01b0382166000908152603660205260408120805483929061280e908490613547565b90915550506040518181526001600160a01b0383169060009060008051602061377d8339815191529060200160405180910390a35050565b60a45460ff161561288c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610684565b60a4805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861238c3390565b60008060006128cf84611e41565b905060005b8151811015611f4b576129008282815181106109ad57634e487b7160e01b600052603260045260246000fd5b61290a9084613547565b9250806129168161370b565b9150506128d4565b60da5460d6546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a082319060240160206040518083038186803b15801561296657600080fd5b505afa15801561297a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299e9190613427565b1015612a005760405162461bcd60e51b815260206004820152602b60248201527f4e6f7420656e6f756768204c494e4b202d2066696c6c20636f6e74726163742060448201526a1dda5d1a0819985d58d95d60aa1b6064820152608401610684565b612a0f60d95460da5484612ea3565b92915050565b60a45460ff1615612a5b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610684565b611321838383612ff6565b6001600160a01b0381166000908152603860205260408120546001905b60008181526034602090815260408083206001600160a01b03868116855292529091205416600114612b135760008181526034602090815260408083206001600160a01b03868116855292529091205481169085161415612ae657509050610d7a565b60008181526034602090815260408083206001600160a01b03958616845290915290205490911690612a83565b5060009392505050565b600054610100900460ff1680612b36575060005460ff16155b612b525760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612609576000805460ff1961ff0019909116610100171660011790558015610b98576000805461ff001916905550565b600054610100900460ff1680612ba9575060005460ff16155b612bc55760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612bf0576000805460ff1961ff0019909116610100171660011790555b8251612c0390603c9060208601906131a2565b508151612c1790603d9060208501906131a2565b50604480546001600160a01b03199081167305dd722a8478715ec4ab7cddecb82d598a313072179091556041805482167383f9b450a5d71dc6cbeef6d8e7214181faf5d41f17905560428054821673c4e017a03cee1f129e93052e6b150466102b3af51790556043805490911673538ca3c8ad2f0e50730e51d730b907ab993ec3261790558015611321576000805461ff0019169055505050565b600054610100900460ff1680612ccb575060005460ff16155b612ce75760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612d12576000805460ff1961ff0019909116610100171660011790555b60a4805460ff191690558015610b98576000805461ff001916905550565b600054610100900460ff1680612d49575060005460ff16155b612d655760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612d90576000805460ff1961ff0019909116610100171660011790555b607280546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610b98576000805461ff001916905550565b600054610100900460ff1680612e00575060005460ff16155b612e1c5760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612e47576000805460ff1961ff0019909116610100171660011790555b60d780546001600160a01b031990811673f0d54349addcf704f77ae15b96510dea15cb79521790915560d6805490911673514910771af9ca656af840dff83e8264ecf986ca1790558015610b98576000805461ff001916905550565b60d65460d75460408051602081018790528082018590528151808203830181526060820192839052630200057560e51b9092526000936001600160a01b0390811693634000aea093612eff93929091169188919060640161348a565b602060405180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5191906133ce565b50600084815260d8602081815260408084205481518084018a905280830188905230606082015260808082018390528351808303909101815260a090910190925281519183019190912093889052919052612fad906001613125565b600086815260d86020526040902055612fed8582604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b95945050505050565b6001600160a01b0382163b156130185780603e546130149190613547565b603e555b6001600160a01b0383163b1561303a5780603e5461303691906136b9565b603e555b61304383610c32565b6001600160a01b038416600090815260366020908152604080832093909355825460399091529190205561307682610c32565b6001600160a01b03831660009081526036602052604090205461309991906136b9565b50604080546001600160a01b0380851660009081526039602052929092205583166130cc576130c7826120ed565b611321565b6001600160a01b0382166130fb57806130e484610c32565b6130ee91906136b9565b6130c7576130c783611f54565b613104826120ed565b8061310e84610c32565b61311891906136b9565b6113215761132183611f54565b6000806131328385613547565b90508381101561075d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610684565b5080546000825590600052602060002090810190610b989190613226565b8280546131ae906136d0565b90600052602060002090601f0160209004810192826131d05760008555613216565b82601f106131e957805160ff1916838001178555613216565b82800160010185558215613216579182015b828111156132165782518255916020019190600101906131fb565b50613222929150613226565b5090565b5b808211156132225760008155600101613227565b80356001600160a01b0381168114610d7a57600080fd5b600060208284031215613263578081fd5b61075d8261323b565b6000806040838503121561327e578081fd5b6132878361323b565b91506132956020840161323b565b90509250929050565b6000806000606084860312156132b2578081fd5b6132bb8461323b565b92506132c96020850161323b565b9150604084013590509250925092565b600080604083850312156132eb578182fd5b6132f48361323b565b946020939093013593505050565b60008060408385031215613314578182fd5b823567ffffffffffffffff8082111561332b578384fd5b818501915085601f83011261333e578384fd5b813560208282111561335257613352613766565b808202604051601f19603f8301168101818110868211171561337657613376613766565b604052838152828101945085830182870184018b1015613394578889fd5b8896505b848710156133bd576133a98161323b565b865260019690960195948301948301613398565b509997909101359750505050505050565b6000602082840312156133df578081fd5b8151801515811461075d578182fd5b60008060408385031215613400578182fd5b50508035926020909101359150565b600060208284031215613420578081fd5b5035919050565b600060208284031215613438578081fd5b5051919050565b60008151808452815b8181101561346457602081850181015186830182015201613448565b818111156134755782602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038516825283602083015260606040830152612fed606083018461343f565b60006020825261075d602083018461343f565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561355a5761355a61373a565b500190565b60008261356e5761356e613750565b500490565b80825b600180861161358557506135b0565b8187048211156135975761359761373a565b808616156135a457918102915b9490941c938002613576565b94509492505050565b600061075d60001984846135d6565b600061075d60001960ff8516845b6000826135e55750600161075d565b816135f25750600061075d565b816001811461360857600281146136125761363f565b600191505061075d565b60ff8411156136235761362361373a565b6001841b9150848211156136395761363961373a565b5061075d565b5060208310610133831016604e8410600b8410161715613672575081810a8381111561366d5761366d61373a565b61075d565b61367f8484846001613573565b8086048211156136915761369161373a565b02949350505050565b60008160001904831182151516156136b4576136b461373a565b500290565b6000828210156136cb576136cb61373a565b500390565b6002810460018216806136e457607f821691505b6020821081141561370557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561371f5761371f61373a565b5060010190565b60008261373557613735613750565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207fe168959385b25c8ca1ec1d8726c4d2191a6f89e6e44a692278ba4e4ef3e41164736f6c63430008020033
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106102bb5760003560e01c80638456cb5911610182578063c311af8a116100e9578063e507300e116100a2578063ee78cf201161007c578063ee78cf2014610570578063f2fde38b14610583578063f4384ad614610596578063f446b8d71461059f576102bb565b8063e507300e14610556578063eab375fa1461055f578063ee2b70bf14610567576102bb565b8063c311af8a146104ea578063c76c4c22146104f3578063d80e8700146104fb578063dd62ed3e14610501578063de2fe3de1461053a578063e25768a71461054d576102bb565b8063a457c2d71161013b578063a457c2d714610483578063a9059cbb14610496578063a9c7648f146104a9578063aeffe864146104bc578063af8a2b96146104cf578063b115e4df146104d7576102bb565b80638456cb591461043f57806388b6be2d146104475780638da5cb5b1461044f5780638dc654a21461046057806394985ddd1461046857806395d89b411461047b576102bb565b806339509351116102265780635c975abb116101df5780635c975abb146103f557806370a0823114610400578063715018a614610413578063734a57651461041b5780638129fc1c1461042e578063824fb22f14610436576102bb565b806339509351146103ad5780633a0ef28e146103c05780633f4ba83a146103c957806342619f66146103d157806342966c68146103da5780634e5a8c05146103ed576102bb565b8063228791f711610278578063228791f71461035557806323b872dd1461035d57806324a0ffdf146103705780632598cdb2146103785780632cfa695e1461038b578063313ce5671461039e576102bb565b806306fdde03146102c0578063095ea7b3146102de5780630b72e5a514610301578063104e496c1461030b57806318160ddd14610322578063217b0b6d1461032a575b600080fd5b6102c86105b2565b6040516102d591906134b1565b60405180910390f35b6102f16102ec3660046132d9565b610644565b60405190151581526020016102d5565b61030961065a565b005b61031460e75481565b6040519081526020016102d5565b603b54610314565b60e35461033d906001600160a01b031681565b6040516001600160a01b0390911681526020016102d5565b610314610694565b6102f161036b36600461329e565b6106b1565b610309610764565b60445461033d906001600160a01b031681565b6103096103993660046133ee565b610a69565b604051601281526020016102d5565b6102f16103bb3660046132d9565b610b23565b61031460405481565b610309610b5a565b61031460db5481565b6103096103e836600461340f565b610b8e565b610314610b9b565b60a45460ff166102f1565b61031461040e366004613252565b610c32565b610309610d7f565b60415461033d906001600160a01b031681565b610309610df3565b61031460dd5481565b610309610f7b565b610309610fad565b6072546001600160a01b031661033d565b61030961101e565b6103096104763660046133ee565b61118c565b6102c86111f0565b6102f16104913660046132d9565b6111ff565b6102f16104a43660046132d9565b61129a565b6103096104b7366004613302565b6112a7565b60425461033d906001600160a01b031681565b610309611326565b60435461033d906001600160a01b031681565b610314603f5481565b610314611640565b42610314565b61031461050f36600461326c565b6001600160a01b03918216600090815260356020908152604080832093909416825291909152205490565b61030961054836600461340f565b611658565b61031460dc5481565b61031460e45481565b610309611687565b610314603e5481565b61030961057e36600461340f565b611822565b610309610591366004613252565b611851565b61031460df5481565b60e65461033d906001600160a01b031681565b6060603c80546105c1906136d0565b80601f01602080910402602001604051908101604052809291908181526020018280546105ed906136d0565b801561063a5780601f1061060f5761010080835404028352916020019161063a565b820191906000526020600020905b81548152906001019060200180831161061d57829003601f168201915b5050505050905090565b600061065133848461193c565b50600192915050565b6072546001600160a01b0316331461068d5760405162461bcd60e51b815260040161068490613512565b60405180910390fd5b600060df55565b6041546000906106ac906001600160a01b0316610c32565b905090565b60006106be848484611a61565b6001600160a01b0384166000908152603560209081526040808320338452909152902054828110156107435760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610684565b610757853361075286856136b9565b61193c565b60019150505b9392505050565b6072546001600160a01b0316331461078e5760405162461bcd60e51b815260040161068490613512565b6000610798611dea565b9050805160df54146107ff5760405162461bcd60e51b815260206004820152602a60248201527f506c656173652050726570617265204c6f7474657279204f7220456e64204d656044820152696761204c6f747465727960b01b6064820152608401610684565b60db5460e05414156108725760405162461bcd60e51b815260206004820152603660248201527f506c65617365205761697420466f7220436861696e6c696e6b20546f2050726f6044820152753b34b232902a3432902930b73237b690273ab6b132b960511b6064820152608401610684565b60db54604080516020808201939093526000818301528151808203830181526060909101909152805191012060e8546108ab9082613726565b6108b6906001613547565b60e755600060e5819055805b60e55461096d57600060e183815481106108ec57634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905060e75482108015610915575061090f8183613547565b60e75411155b1561094d5784838151811061093a57634e487b7160e01b600052603260045260246000fd5b602002602001015160e58190555061095a565b6109578183613547565b91505b826109648161370b565b935050506108c2565b600061097a60e554611e41565b905060005b8151811015610a4c5760006109ba8383815181106109ad57634e487b7160e01b600052603260045260246000fd5b6020026020010151610c32565b905060e754841080156109d857506109d28185613547565b60e75411155b15610a2c578282815181106109fd57634e487b7160e01b600052603260045260246000fd5b602002602001015160e660006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b610a368185613547565b9350508080610a449061370b565b91505061097f565b5060df8054906000610a5d8361370b565b91905055505050505050565b6072546001600160a01b03163314610a935760405162461bcd60e51b815260040161068490613512565b6000610a9f6001611e41565b9050825b82811015610b1d57610adb828281518110610ace57634e487b7160e01b600052603260045260246000fd5b6020026020010151611f54565b610b0b828281518110610afe57634e487b7160e01b600052603260045260246000fd5b60200260200101516120ed565b80610b158161370b565b915050610aa3565b50505050565b3360008181526035602090815260408083206001600160a01b03871684529091528120549091610651918590610752908690613547565b6072546001600160a01b03163314610b845760405162461bcd60e51b815260040161068490613512565b610b8c612316565b565b610b9833826123a9565b50565b6044546000908190610bb5906001600160a01b0316610c32565b604354610bca906001600160a01b0316610c32565b604254610bdf906001600160a01b0316610c32565b604154610bf4906001600160a01b0316610c32565b603e54603b54610c0491906136b9565b610c0e91906136b9565b610c1891906136b9565b610c2291906136b9565b610c2c91906136b9565b91505090565b6001600160a01b03811660009081526033602052604081205460ff168015610c745750604080546001600160a01b038416600090815260396020529190912054105b8015610c8e57506043546001600160a01b03838116911614155b8015610ca857506041546001600160a01b03838116911614155b8015610cc257506042546001600160a01b03838116911614155b8015610cdc57506044546001600160a01b03838116911614155b8015610cf057506001600160a01b0382163b155b15610d5f576001600160a01b0382166000908152603660209081526040808320546039909252808320549054919291610d2991906136b9565b9050610d368160646135b9565b610d418260636135b9565b610d4b908461369a565b610d55919061355f565b9250610d7a915050565b506001600160a01b0381166000908152603660205260409020545b919050565b6072546001600160a01b03163314610da95760405162461bcd60e51b815260040161068490613512565b6072546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3607280546001600160a01b0319169055565b600054610100900460ff1680610e0c575060005460ff16155b610e285760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015610e53576000805460ff1961ff0019909116610100171660011790555b610e9a604051806040016040528060098152602001684c616479204c75636b60b81b815250604051806040016040528060048152602001634c55434b60e01b815250612519565b610ea26125a1565b610eaa61261d565b610eb261268d565b610eba6126fd565b7faa77729d3466ca35ae8d28b3bbac7cc36a5031efdc430821c02bc31a238af44560d955671bc16d674ec8000060da55604354610f19906001600160a01b0316610f066012600a6135c8565b610f1490633b9aca0061369a565b612765565b60415460e380546001600160a01b039283166001600160a01b03199182161790915560425460e680549190931691161790556209376060de8190554260dc819055610f649190613547565b60dd558015610b98576000805461ff001916905550565b6072546001600160a01b03163314610fa55760405162461bcd60e51b815260040161068490613512565b610b8c612846565b6072546001600160a01b03163314610fd75760405162461bcd60e51b815260040161068490613512565b604254600090610fef906001600160a01b0316610c32565b604254909150611008906001600160a01b0316826123a9565b60e654610b98906001600160a01b031682612765565b6072546001600160a01b031633146110485760405162461bcd60e51b815260040161068490613512565b60d6546040516370a0823160e01b81523060048201526001600160a01b039091169063a9059cbb90339083906370a082319060240160206040518083038186803b15801561109557600080fd5b505afa1580156110a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110cd9190613427565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561111357600080fd5b505af1158015611127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114b91906133ce565b610b8c5760405162461bcd60e51b81526020600482015260126024820152712ab730b13632903a37903a3930b739b332b960711b6044820152606401610684565b60d7546001600160a01b031633146111e65760405162461bcd60e51b815260206004820152601f60248201527f4f6e6c7920565246436f6f7264696e61746f722063616e2066756c66696c6c006044820152606401610684565b60db8190555b5050565b6060603d80546105c1906136d0565b3360009081526035602090815260408083206001600160a01b0386168452909152812054828110156112815760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610684565b611290338561075286856136b9565b5060019392505050565b6000610651338484611a61565b6072546001600160a01b031633146112d15760405162461bcd60e51b815260040161068490613512565b60005b82518110156113215761130e83828151811061130057634e487b7160e01b600052603260045260246000fd5b60200260200101518361129a565b50806113198161370b565b9150506112d4565b505050565b6072546001600160a01b031633146113505760405162461bcd60e51b815260040161068490613512565b600061135a611dea565b90508051600161136a9190613547565b60df54146113cc5760405162461bcd60e51b815260206004820152602960248201527f506c656173652050726570617265204c6f7474657279202620456e64204c75636044820152686b204c6f747465727960b81b6064820152608401610684565b60db54604080516020808201939093526001818301528151808203830181526060909101909152805191012060e8546114059082613726565b611410906001613547565b60e455600060e2819055805b60e2546114c757600060e1838154811061144657634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905060e4548210801561146f57506114698183613547565b60e45411155b156114a75784838151811061149457634e487b7160e01b600052603260045260246000fd5b602002602001015160e2819055506114b4565b6114b18183613547565b91505b826114be8161370b565b9350505061141c565b60006114d460e254611e41565b905060005b81518110156115995760006115078383815181106109ad57634e487b7160e01b600052603260045260246000fd5b905060e45484108015611525575061151f8185613547565b60e45411155b156115795782828151811061154a57634e487b7160e01b600052603260045260246000fd5b602002602001015160e360006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6115838185613547565b93505080806115919061370b565b9150506114d9565b50604080549060006115aa8361370b565b91905055506115b7612316565b6041546000906115cf906001600160a01b0316610c32565b6041549091506115e8906001600160a01b0316826123a9565b60e3546115fe906001600160a01b031682612765565b60425460e85461161e916001600160a01b031690610f149060649061355f565b4260dc81905560de5461163091613547565b60dd555050600060df5550505050565b6042546000906106ac906001600160a01b0316610c32565b6072546001600160a01b031633146116825760405162461bcd60e51b815260040161068490613512565b603b55565b6072546001600160a01b031633146116b15760405162461bcd60e51b815260040161068490613512565b60006116bb611dea565b5190508060df54106117195760405162461bcd60e51b815260206004820152602160248201527f4c6f74746572792048617320416c7265616479204265656e20507265706172656044820152601960fa1b6064820152608401610684565b60df80549060006117298361370b565b919050555060df546001141561179857611741612846565b61174d60e16000613184565b600061175a60df546128c1565b60e180546001810182556000919091527f3efdd7a884ff9e18c9e5711c185aa6c5e413b68f23197997da5b1665ca978f990181905560e85550611800565b8060df54116118005760006117ae60df546128c1565b60e1805460018101825560009182527f3efdd7a884ff9e18c9e5711c185aa6c5e413b68f23197997da5b1665ca978f990182905560e8805492935083929091906117f9908490613547565b9091555050505b8060df541415610b985760db5460e0556111ec61181d444261369a565b61291e565b6072546001600160a01b0316331461184c5760405162461bcd60e51b815260040161068490613512565b60de55565b6072546001600160a01b0316331461187b5760405162461bcd60e51b815260040161068490613512565b6001600160a01b0381166118e05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610684565b6072546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3607280546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661199e5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610684565b6001600160a01b0382166119ff5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610684565b6001600160a01b0383811660008181526035602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611ac55760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610684565b6001600160a01b038216611b275760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610684565b611b32838383612a15565b6000611b3f60648361355f565b90506000611b4e60648461355f565b6041549091506001600160a01b0386811691161480611b7a57506042546001600160a01b038681169116145b80611b9257506043546001600160a01b038681169116145b80611baa57506044546001600160a01b038681169116145b80611bc257506043546001600160a01b038581169116145b80611bda57506041546001600160a01b038581169116145b80611bf257506042546001600160a01b038581169116145b80611c0a57506044546001600160a01b038581169116145b15611c16575060009050805b6000611c2186610c32565b905083811015611c825760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610684565b600082611c8f85876136b9565b611c9991906136b9565b9050611ca585836136b9565b6001600160a01b038089166000908152603660205260408082209390935590881681529081208054839290611cdb908490613547565b90915550506041546001600160a01b031660009081526036602052604081208054869290611d0a908490613547565b90915550506044546001600160a01b031660009081526036602052604081208054859290611d39908490613547565b92505081905550856001600160a01b0316876001600160a01b031660008051602061377d83398151915287604051611d7391815260200190565b60405180910390a36041546040518581526001600160a01b039182169189169060008051602061377d8339815191529060200160405180910390a36044546040518481526001600160a01b039182169189169060008051602061377d8339815191529060200160405180910390a350505050505050565b6060603a80548060200260200160405190810160405280929190818152602001828054801561063a57602002820191906000526020600020905b815481526020019060010190808311611e24575050505050905090565b6000818152603760205260408120546060919067ffffffffffffffff811115611e7a57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015611ea3578160200160208202803683370190505b506000848152603460209081526040808320600184529091528120549192506001600160a01b03909116905b6001600160a01b038216600114611f4b5781838281518110611f0157634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092018101919091526000878152603482526040808220958416825294909152929092205490911690611f448161370b565b9050611ecf565b50909392505050565b6001600160a01b03811660009081526033602052604090205460ff1615156001148015611f8957506001600160a01b03811615155b8015611fa357506041546001600160a01b03828116911614155b8015611fbd57506042546001600160a01b03828116911614155b8015611fd757506043546001600160a01b03828116911614155b8015611ff157506044546001600160a01b03828116911614155b801561200557506001600160a01b0381163b155b15610b98576001600160a01b0381166000908152603360209081526040808320805460ff1916905560389091528120549061203f83612a66565b60008381526034602090815260408083206001600160a01b03888116808652918452828520805487831687528487208054919093166001600160a01b03199182161790925591855281541690556038825280832083905585835260379091529020549091506120b0906001906136b9565b600083815260376020526040902055603f546120ce906001906136b9565b603f5550506001600160a01b0316600090815260396020526040812055565b6001600160a01b03811660009081526033602052604090205460ff1615801561211e57506001600160a01b03811615155b801561213857506041546001600160a01b03828116911614155b801561215257506042546001600160a01b03828116911614155b801561216c57506043546001600160a01b03828116911614155b801561218657506044546001600160a01b03828116911614155b801561219a57506001600160a01b0381163b155b15610b98576001600160a01b0381166000908152603360205260409020805460ff191660019081179091555b6000818152603760205260409020546064116121ee57806121e68161370b565b9150506121c6565b6000818152603460209081526040808320600184529091529020546001600160a01b031661227257600081815260346020908152604080832060018085529252822080546001600160a01b03191682179055603a805491820181559091527fa2999d817b6757290b50e8ecf3fa939673403dd35c97de392fdb343b4015ce9e018190555b600081815260346020908152604080832060018452825280832080546001600160a01b038781168087528487208054929093166001600160a01b03199283161790925582541617905560388252808320849055838352603790915281208054916122db8361370b565b9091555050603f80549060006122f08361370b565b9091555050604080546001600160a01b0384166000908152603960205291909120555050565b60a45460ff1661235f5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610684565b60a4805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0382166124095760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610684565b61241582600083612a15565b6001600160a01b038216600090815260366020526040902054818110156124895760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610684565b61249382826136b9565b6001600160a01b0380851660008181526036602052604090209290925560415416148015906124d057506042546001600160a01b03848116911614155b156124ed5781603b60008282546124e791906136b9565b90915550505b6040518281526000906001600160a01b0385169060008051602061377d83398151915290602001611a54565b600054610100900460ff1680612532575060005460ff16155b61254e5760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612579576000805460ff1961ff0019909116610100171660011790555b612581612b1d565b61258b8383612b90565b8015611321576000805461ff0019169055505050565b600054610100900460ff16806125ba575060005460ff16155b6125d65760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612601576000805460ff1961ff0019909116610100171660011790555b612609612b1d565b8015610b98576000805461ff001916905550565b600054610100900460ff1680612636575060005460ff16155b6126525760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff1615801561267d576000805460ff1961ff0019909116610100171660011790555b612685612b1d565b612609612cb2565b600054610100900460ff16806126a6575060005460ff16155b6126c25760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff161580156126ed576000805460ff1961ff0019909116610100171660011790555b6126f5612b1d565b612609612d30565b600054610100900460ff1680612716575060005460ff16155b6127325760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff1615801561275d576000805460ff1961ff0019909116610100171660011790555b612609612de7565b6001600160a01b0382166127bb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610684565b6127c760008383612a15565b603b546127e65780603b60008282546127e09190613547565b90915550505b6001600160a01b0382166000908152603660205260408120805483929061280e908490613547565b90915550506040518181526001600160a01b0383169060009060008051602061377d8339815191529060200160405180910390a35050565b60a45460ff161561288c5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610684565b60a4805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861238c3390565b60008060006128cf84611e41565b905060005b8151811015611f4b576129008282815181106109ad57634e487b7160e01b600052603260045260246000fd5b61290a9084613547565b9250806129168161370b565b9150506128d4565b60da5460d6546040516370a0823160e01b8152306004820152600092916001600160a01b0316906370a082319060240160206040518083038186803b15801561296657600080fd5b505afa15801561297a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299e9190613427565b1015612a005760405162461bcd60e51b815260206004820152602b60248201527f4e6f7420656e6f756768204c494e4b202d2066696c6c20636f6e74726163742060448201526a1dda5d1a0819985d58d95d60aa1b6064820152608401610684565b612a0f60d95460da5484612ea3565b92915050565b60a45460ff1615612a5b5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610684565b611321838383612ff6565b6001600160a01b0381166000908152603860205260408120546001905b60008181526034602090815260408083206001600160a01b03868116855292529091205416600114612b135760008181526034602090815260408083206001600160a01b03868116855292529091205481169085161415612ae657509050610d7a565b60008181526034602090815260408083206001600160a01b03958616845290915290205490911690612a83565b5060009392505050565b600054610100900460ff1680612b36575060005460ff16155b612b525760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612609576000805460ff1961ff0019909116610100171660011790558015610b98576000805461ff001916905550565b600054610100900460ff1680612ba9575060005460ff16155b612bc55760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612bf0576000805460ff1961ff0019909116610100171660011790555b8251612c0390603c9060208601906131a2565b508151612c1790603d9060208501906131a2565b50604480546001600160a01b03199081167305dd722a8478715ec4ab7cddecb82d598a313072179091556041805482167383f9b450a5d71dc6cbeef6d8e7214181faf5d41f17905560428054821673c4e017a03cee1f129e93052e6b150466102b3af51790556043805490911673538ca3c8ad2f0e50730e51d730b907ab993ec3261790558015611321576000805461ff0019169055505050565b600054610100900460ff1680612ccb575060005460ff16155b612ce75760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612d12576000805460ff1961ff0019909116610100171660011790555b60a4805460ff191690558015610b98576000805461ff001916905550565b600054610100900460ff1680612d49575060005460ff16155b612d655760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612d90576000805460ff1961ff0019909116610100171660011790555b607280546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610b98576000805461ff001916905550565b600054610100900460ff1680612e00575060005460ff16155b612e1c5760405162461bcd60e51b8152600401610684906134c4565b600054610100900460ff16158015612e47576000805460ff1961ff0019909116610100171660011790555b60d780546001600160a01b031990811673f0d54349addcf704f77ae15b96510dea15cb79521790915560d6805490911673514910771af9ca656af840dff83e8264ecf986ca1790558015610b98576000805461ff001916905550565b60d65460d75460408051602081018790528082018590528151808203830181526060820192839052630200057560e51b9092526000936001600160a01b0390811693634000aea093612eff93929091169188919060640161348a565b602060405180830381600087803b158015612f1957600080fd5b505af1158015612f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5191906133ce565b50600084815260d8602081815260408084205481518084018a905280830188905230606082015260808082018390528351808303909101815260a090910190925281519183019190912093889052919052612fad906001613125565b600086815260d86020526040902055612fed8582604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b95945050505050565b6001600160a01b0382163b156130185780603e546130149190613547565b603e555b6001600160a01b0383163b1561303a5780603e5461303691906136b9565b603e555b61304383610c32565b6001600160a01b038416600090815260366020908152604080832093909355825460399091529190205561307682610c32565b6001600160a01b03831660009081526036602052604090205461309991906136b9565b50604080546001600160a01b0380851660009081526039602052929092205583166130cc576130c7826120ed565b611321565b6001600160a01b0382166130fb57806130e484610c32565b6130ee91906136b9565b6130c7576130c783611f54565b613104826120ed565b8061310e84610c32565b61311891906136b9565b6113215761132183611f54565b6000806131328385613547565b90508381101561075d5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610684565b5080546000825590600052602060002090810190610b989190613226565b8280546131ae906136d0565b90600052602060002090601f0160209004810192826131d05760008555613216565b82601f106131e957805160ff1916838001178555613216565b82800160010185558215613216579182015b828111156132165782518255916020019190600101906131fb565b50613222929150613226565b5090565b5b808211156132225760008155600101613227565b80356001600160a01b0381168114610d7a57600080fd5b600060208284031215613263578081fd5b61075d8261323b565b6000806040838503121561327e578081fd5b6132878361323b565b91506132956020840161323b565b90509250929050565b6000806000606084860312156132b2578081fd5b6132bb8461323b565b92506132c96020850161323b565b9150604084013590509250925092565b600080604083850312156132eb578182fd5b6132f48361323b565b946020939093013593505050565b60008060408385031215613314578182fd5b823567ffffffffffffffff8082111561332b578384fd5b818501915085601f83011261333e578384fd5b813560208282111561335257613352613766565b808202604051601f19603f8301168101818110868211171561337657613376613766565b604052838152828101945085830182870184018b1015613394578889fd5b8896505b848710156133bd576133a98161323b565b865260019690960195948301948301613398565b509997909101359750505050505050565b6000602082840312156133df578081fd5b8151801515811461075d578182fd5b60008060408385031215613400578182fd5b50508035926020909101359150565b600060208284031215613420578081fd5b5035919050565b600060208284031215613438578081fd5b5051919050565b60008151808452815b8181101561346457602081850181015186830182015201613448565b818111156134755782602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038516825283602083015260606040830152612fed606083018461343f565b60006020825261075d602083018461343f565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000821982111561355a5761355a61373a565b500190565b60008261356e5761356e613750565b500490565b80825b600180861161358557506135b0565b8187048211156135975761359761373a565b808616156135a457918102915b9490941c938002613576565b94509492505050565b600061075d60001984846135d6565b600061075d60001960ff8516845b6000826135e55750600161075d565b816135f25750600061075d565b816001811461360857600281146136125761363f565b600191505061075d565b60ff8411156136235761362361373a565b6001841b9150848211156136395761363961373a565b5061075d565b5060208310610133831016604e8410600b8410161715613672575081810a8381111561366d5761366d61373a565b61075d565b61367f8484846001613573565b8086048211156136915761369161373a565b02949350505050565b60008160001904831182151516156136b4576136b461373a565b500290565b6000828210156136cb576136cb61373a565b500390565b6002810460018216806136e457607f821691505b6020821081141561370557634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561371f5761371f61373a565b5060010190565b60008261373557613735613750565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212207fe168959385b25c8ca1ec1d8726c4d2191a6f89e6e44a692278ba4e4ef3e41164736f6c63430008020033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.