Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 54 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 15937659 | 1237 days ago | IN | 0 ETH | 0.00102207 | ||||
| Approve | 15937553 | 1237 days ago | IN | 0 ETH | 0.00092823 | ||||
| Approve | 15937553 | 1237 days ago | IN | 0 ETH | 0.00092823 | ||||
| Approve | 15937553 | 1237 days ago | IN | 0 ETH | 0.00092823 | ||||
| Approve | 15937553 | 1237 days ago | IN | 0 ETH | 0.00092823 | ||||
| Approve | 15937553 | 1237 days ago | IN | 0 ETH | 0.00092823 | ||||
| Approve | 15937439 | 1237 days ago | IN | 0 ETH | 0.00102747 | ||||
| Approve | 15937383 | 1237 days ago | IN | 0 ETH | 0.00101894 | ||||
| Approve | 15937368 | 1237 days ago | IN | 0 ETH | 0.0010115 | ||||
| Approve | 15937303 | 1237 days ago | IN | 0 ETH | 0.00107659 | ||||
| Approve | 15937291 | 1237 days ago | IN | 0 ETH | 0.00104133 | ||||
| Approve | 15937208 | 1237 days ago | IN | 0 ETH | 0.00117021 | ||||
| Approve | 15937195 | 1237 days ago | IN | 0 ETH | 0.00127947 | ||||
| Approve | 15937191 | 1237 days ago | IN | 0 ETH | 0.00126959 | ||||
| Approve | 15937182 | 1237 days ago | IN | 0 ETH | 0.00126562 | ||||
| Approve | 15937177 | 1237 days ago | IN | 0 ETH | 0.00116343 | ||||
| Approve | 15937169 | 1237 days ago | IN | 0 ETH | 0.00107937 | ||||
| Approve | 15937164 | 1237 days ago | IN | 0 ETH | 0.00120893 | ||||
| Renounce Ownersh... | 15937157 | 1237 days ago | IN | 0 ETH | 0.00061518 | ||||
| Approve | 15937155 | 1237 days ago | IN | 0 ETH | 0.0011006 | ||||
| Approve | 15937137 | 1237 days ago | IN | 0 ETH | 0.00133118 | ||||
| Approve | 15937121 | 1237 days ago | IN | 0 ETH | 0.0012492 | ||||
| Transfer | 15937116 | 1237 days ago | IN | 0 ETH | 0.01150883 | ||||
| Approve | 15937110 | 1237 days ago | IN | 0 ETH | 0.00112849 | ||||
| Approve | 15937103 | 1237 days ago | IN | 0 ETH | 0.00129116 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Method | Block |
From
|
|
To
|
||
|---|---|---|---|---|---|---|---|
| Deposit | 16146149 | 1208 days ago | 0.0005087 ETH | ||||
| Transfer | 16146149 | 1208 days ago | 0.0005087 ETH | ||||
| Deposit | 16146147 | 1208 days ago | 0.0005087 ETH | ||||
| Transfer | 16146147 | 1208 days ago | 0.0005087 ETH | ||||
| Deposit | 15965575 | 1233 days ago | 0.00267573 ETH | ||||
| Transfer | 15965575 | 1233 days ago | 0.00267573 ETH | ||||
| Deposit | 15937670 | 1237 days ago | 0.00167753 ETH | ||||
| Transfer | 15937670 | 1237 days ago | 0.00167753 ETH | ||||
| Deposit | 15937555 | 1237 days ago | 0.0017399 ETH | ||||
| Transfer | 15937555 | 1237 days ago | 0.0017399 ETH | ||||
| Deposit | 15937555 | 1237 days ago | 0.00180581 ETH | ||||
| Transfer | 15937555 | 1237 days ago | 0.00180581 ETH | ||||
| Deposit | 15937555 | 1237 days ago | 0.00187554 ETH | ||||
| Transfer | 15937555 | 1237 days ago | 0.00187554 ETH | ||||
| Deposit | 15937555 | 1237 days ago | 0.0019494 ETH | ||||
| Transfer | 15937555 | 1237 days ago | 0.0019494 ETH | ||||
| Deposit | 15937555 | 1237 days ago | 0.0027566 ETH | ||||
| Transfer | 15937555 | 1237 days ago | 0.0027566 ETH | ||||
| Deposit | 15937446 | 1237 days ago | 0.00196865 ETH | ||||
| Transfer | 15937446 | 1237 days ago | 0.00196865 ETH | ||||
| Deposit | 15937420 | 1237 days ago | 0.00601677 ETH | ||||
| Transfer | 15937420 | 1237 days ago | 0.00601677 ETH | ||||
| Deposit | 15937412 | 1237 days ago | 0.00174962 ETH | ||||
| Transfer | 15937412 | 1237 days ago | 0.00174962 ETH | ||||
| Deposit | 15937385 | 1237 days ago | 0.00292394 ETH |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
BTC2
Compiler Version
v0.7.4+commit.3f05b770
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-11-10
*/
/**
Proof of Satoshi (BTC 2.0)
TG: t.me/ProofOfSatoshiPortal
5% USDC Reward
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.7.4;
library SafeMathInt {
int256 private constant MIN_INT256 = int256(1) << 255;
int256 private constant MAX_INT256 = ~(int256(1) << 255);
function mul(int256 a, int256 b) internal pure returns (int256) {
int256 c = a * b;
require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
require((b == 0) || (c / b == a));
return c;
}
function div(int256 a, int256 b) internal pure returns (int256) {
require(b != -1 || a != MIN_INT256);
return a / b;
}
function sub(int256 a, int256 b) internal pure returns (int256) {
int256 c = a - b;
require((b >= 0 && c <= a) || (b < 0 && c > a));
return c;
}
function add(int256 a, int256 b) internal pure returns (int256) {
int256 c = a + b;
require((b >= 0 && c >= a) || (b < 0 && c < a));
return c;
}
function abs(int256 a) internal pure returns (int256) {
require(a != MIN_INT256);
return a < 0 ? -a : a;
}
}
library SafeMath {
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) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b <= a, errorMessage);
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) {
return div(a, b, "SafeMath: division by zero");
}
function div(
uint256 a,
uint256 b,
string memory errorMessage
) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
require(b != 0);
return a % b;
}
}
interface IERC20 {
function totalSupply() external view returns (uint256);
function balanceOf(address who) external view returns (uint256);
function allowance(address owner, address spender)
external
view
returns (uint256);
function transfer(address to, uint256 value) external returns (bool);
function approve(address spender, uint256 value) external returns (bool);
function transferFrom(
address from,
address to,
uint256 value
) external returns (bool);
event Transfer(address indexed from, address indexed to, uint256 value);
event Approval(
address indexed owner,
address indexed spender,
uint256 value
);
}
interface IUniSwapPair {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external pure returns (string memory);
function symbol() external pure returns (string memory);
function decimals() external pure returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
function DOMAIN_SEPARATOR() external view returns (bytes32);
function PERMIT_TYPEHASH() external pure returns (bytes32);
function nonces(address owner) external view returns (uint);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
event Mint(address indexed sender, uint amount0, uint amount1);
event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
event Swap(
address indexed sender,
uint amount0In,
uint amount1In,
uint amount0Out,
uint amount1Out,
address indexed to
);
event Sync(uint112 reserve0, uint112 reserve1);
function MINIMUM_LIQUIDITY() external pure returns (uint);
function factory() external view returns (address);
function token0() external view returns (address);
function token1() external view returns (address);
function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
function price0CumulativeLast() external view returns (uint);
function price1CumulativeLast() external view returns (uint);
function kLast() external view returns (uint);
function mint(address to) external returns (uint liquidity);
function burn(address to) external returns (uint amount0, uint amount1);
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function skim(address to) external;
function sync() external;
function initialize(address, address) external;
}
interface IUniSwapRouter{
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
interface IUniSwapFactory {
event PairCreated(address indexed token0, address indexed token1, address pair, uint);
function feeTo() external view returns (address);
function feeToSetter() external view returns (address);
function getPair(address tokenA, address tokenB) external view returns (address pair);
function allPairs(uint) external view returns (address pair);
function allPairsLength() external view returns (uint);
function createPair(address tokenA, address tokenB) external returns (address pair);
function setFeeTo(address) external;
function setFeeToSetter(address) external;
}
interface IDividendDistributor {
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
function setShare(address shareholder, uint256 amount) external;
function deposit() external payable;
function process(uint256 gas) external;
}
contract DividendDistributor is IDividendDistributor {
using SafeMath for uint256;
address _token;
struct Share {
uint256 amount;
uint256 totalExcluded;
uint256 totalRealised;
}
IERC20 UC = IERC20(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);
IUniSwapRouter router;
address[] shareholders;
mapping (address => uint256) shareholderIndexes;
mapping (address => uint256) shareholderClaims;
mapping (address => Share) public shares;
uint256 public totalShares;
uint256 public totalDividends;
uint256 public totalDistributed;
uint256 public dividendsPerShare;
uint256 public currentIndex;
uint256 public dividendsPerShareAccuracyFactor = 10 ** 24;
uint256 public minPeriod = 3600;
uint256 public minDistribution = 1 * (10 ** 6);
bool initialized;
modifier initialization() {
require(!initialized);
_;
initialized = true;
}
modifier onlyToken() {
require(msg.sender == _token); _;
}
constructor (address _router) {
router = _router != address(0)
? IUniSwapRouter(_router)
: IUniSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
_token = msg.sender;
}
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
minPeriod = _minPeriod;
minDistribution = _minDistribution;
}
function setShare(address shareholder, uint256 amount) external override onlyToken {
if(shares[shareholder].amount > 0){
distributeDividend(shareholder);
}
if(amount > 0 && shares[shareholder].amount == 0){
addShareholder(shareholder);
}else if(amount == 0 && shares[shareholder].amount > 0){
removeShareholder(shareholder);
}
totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
shares[shareholder].amount = amount;
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyToken returns (bool success){
return IERC20(tokenAddress).transfer(_receiver, tokens);
}
function deposit() external payable override onlyToken {
uint256 balanceBefore = UC.balanceOf(address(this));
address[] memory path = new address[](2);
path[0] = router.WETH();
path[1] = address(UC);
router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
0,
path,
address(this),
block.timestamp
);
uint256 amount = UC.balanceOf(address(this)).sub(balanceBefore);
totalDividends = totalDividends.add(amount);
dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
}
function process(uint256 gas) external override onlyToken {
uint256 shareholderCount = shareholders.length;
if(shareholderCount == 0) { return; }
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
while(gasUsed < gas && iterations < shareholderCount) {
if(currentIndex >= shareholderCount){
currentIndex = 0;
}
if(shouldDistribute(shareholders[currentIndex])){
distributeDividend(shareholders[currentIndex]);
}
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
currentIndex++;
iterations++;
}
}
function shouldDistribute(address shareholder) internal view returns (bool) {
return shareholderClaims[shareholder] + minPeriod < block.timestamp && getUnpaidEarnings(shareholder) > minDistribution;
}
function distributeDividend(address shareholder) internal {
if(shares[shareholder].amount == 0){ return; }
uint256 amount = getUnpaidEarnings(shareholder);
if(amount > 0){
totalDistributed = totalDistributed.add(amount);
UC.transfer(shareholder, amount);
shareholderClaims[shareholder] = block.timestamp;
shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
}
function claimDividend() external {
distributeDividend(msg.sender);
}
function getUnpaidEarnings(address shareholder) public view returns (uint256) {
if(shares[shareholder].amount == 0){ return 0; }
uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
return shareholderTotalDividends.sub(shareholderTotalExcluded);
}
function getCumulativeDividends(uint256 share) internal view returns (uint256) {
return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
}
function addShareholder(address shareholder) internal {
shareholderIndexes[shareholder] = shareholders.length;
shareholders.push(shareholder);
}
function removeShareholder(address shareholder) internal {
shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
shareholders.pop();
}
}
contract Ownable {
address private _owner;
event OwnershipRenounced(address indexed previousOwner);
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
constructor() {
_owner = msg.sender;
}
function owner() public view returns (address) {
return _owner;
}
modifier onlyOwner() {
require(isOwner());
_;
}
function isOwner() public view returns (bool) {
return msg.sender == _owner;
}
function renounceOwnership() public onlyOwner {
emit OwnershipRenounced(_owner);
_owner = address(0);
}
function transferOwnership(address newOwner) public onlyOwner {
_transferOwnership(newOwner);
}
function _transferOwnership(address newOwner) internal {
require(newOwner != address(0));
emit OwnershipTransferred(_owner, newOwner);
_owner = newOwner;
}
}
abstract contract ERC20Detailed is IERC20 {
string private _name;
string private _symbol;
uint8 private _decimals;
constructor(
string memory name_,
string memory symbol_,
uint8 decimals_
) {
_name = name_;
_symbol = symbol_;
_decimals = decimals_;
}
function name() public view returns (string memory) {
return _name;
}
function symbol() public view returns (string memory) {
return _symbol;
}
function decimals() public view returns (uint8) {
return _decimals;
}
}
contract BTC2 is ERC20Detailed, Ownable {
using SafeMath for uint256;
using SafeMathInt for int256;
uint256 public buyLiquidityFee = 0;
uint256 public buyMarketingFee = 0;
uint256 public buyRewardsFee = 50;
uint256 public sellLiquidityFee = 0;
uint256 public sellMarketingFee = 940;
uint256 public sellRewardsFee = 50;
uint256 public AmountLiquidityFee;
uint256 public AmountMarketingFee;
uint256 public AmountRewardsFee;
uint256 public feeDenominator = 1000;
address public _marketingWalletAddress = 0x6828d3456c5dc1954ba2379C10462F09883a09fd;
address public _liquidityReciever;
address private constant deadWallet = 0x000000000000000000000000000000000000dEaD;
address private constant ZeroWallet = 0x0000000000000000000000000000000000000000;
mapping (address => bool) private _isExcludedFromFees;
mapping (address => bool) public automatedMarketMakerPairs;
mapping(address => bool) public isDividendExempt;
uint256 public constant DECIMALS = 18;
uint256 public _totalSupply = 1_000_000_000 * (10 ** DECIMALS);
uint256 public swapTokensAtAmount = _totalSupply.mul(50).div(feeDenominator); //0.5%
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
bool public _enableLiquidity = true;
bool public _enableSwap = true;
modifier validRecipient(address to) {
require(to != address(0x0));
_;
}
DividendDistributor distributor;
address public PCASHDividendReceiver;
uint256 distributorGas = 500000;
address public pair;
IUniSwapPair public pairContract;
IUniSwapRouter public router;
bool inSwap = false;
modifier swapping() {
inSwap = true;
_;
inSwap = false;
}
constructor() ERC20Detailed("Proof of Satoshi", "BTC 2.0", uint8(DECIMALS)) Ownable() {
router = IUniSwapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );
pair = IUniSwapFactory(router.factory()).createPair(
router.WETH(),
address(this)
);
_allowances[address(this)][address(router)] = uint256(-1);
pairContract = IUniSwapPair(pair);
automatedMarketMakerPairs[pair] = true;
_liquidityReciever = msg.sender;
distributor = new DividendDistributor(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D );
PCASHDividendReceiver = address(distributor);
isDividendExempt[owner()] = true;
isDividendExempt[pair] = true;
isDividendExempt[address(this)] = true;
isDividendExempt[deadWallet] = true;
isDividendExempt[ZeroWallet] = true;
_isExcludedFromFees[owner()] = true;
_isExcludedFromFees[address(this)] = true;
_balances[owner()] = _totalSupply;
emit Transfer(address(0x0), owner(), _totalSupply);
}
function transfer(address to, uint256 value)
external
override
validRecipient(to)
returns (bool)
{
_transferFrom(msg.sender, to, value);
return true;
}
function transferFrom(
address from,
address to,
uint256 value
) external override validRecipient(to) returns (bool) {
if (_allowances[from][msg.sender] != uint256(-1)) {
_allowances[from][msg.sender] = _allowances[from][
msg.sender
].sub(value, "Insufficient Allowance");
}
_transferFrom(from, to, value);
return true;
}
function _basicTransfer(
address from,
address to,
uint256 amount
) internal returns (bool) {
_balances[from] = _balances[from].sub(amount);
_balances[to] = _balances[to].add(amount);
return true;
}
function _transferFrom(
address sender,
address recipient,
uint256 amount
) internal returns (bool) {
if (inSwap) {
return _basicTransfer(sender, recipient, amount);
}
if (shouldAddLiquidity()) {
addLiquidity();
}
if (shouldSwapBack()) {
swapBack();
}
_balances[sender] = _balances[sender].sub(amount);
uint256 AmountReceived = shouldTakeFee(sender, recipient)
? takeFee(sender, recipient, amount)
: amount;
_balances[recipient] = _balances[recipient].add(AmountReceived);
if(!isDividendExempt[sender]){ try distributor.setShare(sender, balanceOf(sender)) {} catch {} }
if(!isDividendExempt[recipient]){ try distributor.setShare(recipient, balanceOf(recipient)) {} catch {} }
try distributor.process(distributorGas) {} catch {}
emit Transfer(sender,recipient,AmountReceived);
return true;
}
function takeFee(
address sender,
address recipient,
uint256 amount
) internal returns (uint256) {
uint256 feeAmount;
uint LFEE;
uint MFEE;
uint RFEE;
if(automatedMarketMakerPairs[sender]){
LFEE = amount.mul(buyLiquidityFee).div(feeDenominator);
AmountLiquidityFee += LFEE;
MFEE = amount.mul(buyMarketingFee).div(feeDenominator);
AmountMarketingFee += MFEE;
RFEE = amount.mul(buyRewardsFee).div(feeDenominator);
AmountRewardsFee += RFEE;
feeAmount = LFEE.add(MFEE).add(RFEE);
}
else if(automatedMarketMakerPairs[recipient]){
LFEE = amount.mul(sellLiquidityFee).div(feeDenominator);
AmountLiquidityFee += LFEE;
MFEE = amount.mul(sellMarketingFee).div(feeDenominator);
AmountMarketingFee += MFEE;
RFEE = amount.mul(sellRewardsFee).div(feeDenominator);
AmountRewardsFee += RFEE;
feeAmount = LFEE.add(MFEE).add(RFEE);
}
if(feeAmount > 0) {
_balances[address(this)] = _balances[address(this)].add(feeAmount);
emit Transfer(sender, address(this), feeAmount);
}
return amount.sub(feeAmount);
}
function manualSwap() public onlyOwner swapping {
if(AmountLiquidityFee > 0) swapForLiquidity(AmountLiquidityFee);
if(AmountMarketingFee > 0) swapForMarketing(AmountMarketingFee);
if(AmountRewardsFee > 0) swapAndSendDivident(AmountRewardsFee);
}
function addLiquidity() internal swapping {
if(AmountLiquidityFee > 0){
swapForLiquidity(AmountLiquidityFee);
}
if(AmountMarketingFee > 0){
swapForMarketing(AmountMarketingFee);
}
}
function swapBack() internal swapping {
if(AmountRewardsFee > 0){
swapAndSendDivident(AmountRewardsFee);
}
}
function swapAndSendDivident(uint256 _tokens) private {
uint initialBalance = address(this).balance;
swapTokensForEth(_tokens);
uint ReceivedBalance = address(this).balance.sub(initialBalance);
AmountRewardsFee = AmountRewardsFee.sub(_tokens);
try distributor.deposit { value: ReceivedBalance } () {} catch {}
}
function shouldTakeFee(address from, address to)
internal
view
returns (bool)
{
if(_isExcludedFromFees[from] || _isExcludedFromFees[to]){
return false;
}
else{
return (automatedMarketMakerPairs[from] || automatedMarketMakerPairs[to]);
}
}
function shouldAddLiquidity() internal view returns (bool) {
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
return
_enableLiquidity &&
!inSwap &&
canSwap &&
!automatedMarketMakerPairs[msg.sender];
}
function shouldSwapBack() internal view returns (bool) {
return
_enableSwap &&
!inSwap &&
!automatedMarketMakerPairs[msg.sender];
}
function setAutoAddLiquidity(bool _flag) external onlyOwner {
if(_flag) {
_enableLiquidity = _flag;
} else {
_enableLiquidity = _flag;
}
}
function setAutoSwapBack(bool _flag) external onlyOwner {
if(_flag) {
_enableSwap = _flag;
} else {
_enableSwap = _flag;
}
}
function allowance(address owner_, address spender)
external
view
override
returns (uint256)
{
return _allowances[owner_][spender];
}
function decreaseAllowance(address spender, uint256 subtractedValue)
external
returns (bool)
{
uint256 oldValue = _allowances[msg.sender][spender];
if (subtractedValue >= oldValue) {
_allowances[msg.sender][spender] = 0;
} else {
_allowances[msg.sender][spender] = oldValue.sub(
subtractedValue
);
}
emit Approval(
msg.sender,
spender,
_allowances[msg.sender][spender]
);
return true;
}
function increaseAllowance(address spender, uint256 addedValue)
external
returns (bool)
{
_allowances[msg.sender][spender] = _allowances[msg.sender][
spender
].add(addedValue);
emit Approval(
msg.sender,
spender,
_allowances[msg.sender][spender]
);
return true;
}
function approve(address spender, uint256 value)
external
override
returns (bool)
{
_approve(msg.sender,spender,value);
return true;
}
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 checkFeeExempt(address _addr) external view returns (bool) {
return _isExcludedFromFees[_addr];
}
function setBuyFee(
uint _newLp,
uint _newMarketing,
uint _newReward
) public onlyOwner {
buyLiquidityFee = _newLp;
buyMarketingFee = _newMarketing;
buyRewardsFee = _newReward;
}
function setSellFee(
uint _newLp,
uint _newMarketing,
uint _newReward
) public onlyOwner {
sellLiquidityFee = _newLp;
sellMarketingFee = _newMarketing;
sellRewardsFee = _newReward;
}
function setIsDividendExempt(address holder, bool exempt) external onlyOwner {
require(holder != address(this) && !automatedMarketMakerPairs[holder]);
isDividendExempt[holder] = exempt;
if (exempt) {
distributor.setShare(holder, 0);
} else {
distributor.setShare(holder, balanceOf(holder));
}
}
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external onlyOwner {
distributor.setDistributionCriteria(_minPeriod, _minDistribution);
}
function clearStuckBalance(address _receiver) external onlyOwner {
uint256 balance = address(this).balance;
payable(_receiver).transfer(balance);
}
function rescueToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner returns (bool success){
return IERC20(tokenAddress).transfer(_receiver, tokens);
}
function rescueDToken(address tokenAddress,address _receiver, uint256 tokens) external onlyOwner returns (bool success) {
return distributor.rescueToken(tokenAddress, _receiver,tokens);
}
function setFeeReceivers(address _marketing,address _liquidity) public onlyOwner {
_marketingWalletAddress = _marketing;
_liquidityReciever = _liquidity;
}
function setDistributorSettings(uint256 gas) external onlyOwner {
require(gas < 750000, "Gas must be lower than 750000");
distributorGas = gas;
}
function getCirculatingSupply() public view returns (uint256) {
return
_totalSupply.sub(_balances[deadWallet]).sub(_balances[ZeroWallet]);
}
function isNotInSwap() external view returns (bool) {
return !inSwap;
}
function manualSync() external {
IUniSwapPair(pair).sync();
}
function setLP(address _address) external onlyOwner {
pairContract = IUniSwapPair(_address);
pair = _address;
}
function setAutomaticPairMarket(address _addr,bool _status) public onlyOwner {
if(_status) {
require(!automatedMarketMakerPairs[_addr],"Pair Already Set!!");
}
automatedMarketMakerPairs[_addr] = _status;
isDividendExempt[_addr] = true;
}
function setWhitelistFee(address _addr,bool _status) external onlyOwner {
require(_isExcludedFromFees[_addr] != _status, "Error: Not changed");
_isExcludedFromFees[_addr] = _status;
}
function setMinSwapAmount(uint _value) external onlyOwner {
swapTokensAtAmount = _value;
}
function totalSupply() external view override returns (uint256) {
return _totalSupply;
}
function balanceOf(address account) public view override returns (uint256) {
return _balances[account];
}
function swapForMarketing(uint _tokens) private {
uint initalBalance = address(this).balance;
swapTokensForEth(_tokens);
uint recieveBalance = address(this).balance.sub(initalBalance);
AmountMarketingFee = AmountMarketingFee.sub(_tokens);
payable(_marketingWalletAddress).transfer(recieveBalance);
}
function swapForLiquidity(uint _tokens) private {
uint half = AmountLiquidityFee.div(2);
uint otherhalf = AmountLiquidityFee.sub(half);
uint initalBalance = address(this).balance;
swapTokensForEth(half);
uint recieveBalance = address(this).balance.sub(initalBalance);
AmountLiquidityFee = AmountLiquidityFee.sub(_tokens);
addLiquidity(otherhalf,recieveBalance);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(router), tokenAmount);
// add the liquidity
router.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
_liquidityReciever,
block.timestamp
);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = router.WETH();
_approve(address(this), address(router), tokenAmount);
// make the swap
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
receive() external payable {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"}],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"AmountLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"AmountRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DECIMALS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PCASHDividendReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableLiquidity","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_enableSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityReciever","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWalletAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"checkFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"}],"name":"clearStuckBalance","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":[],"name":"feeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isNotInSwap","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSync","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairContract","outputs":[{"internalType":"contract IUniSwapPair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueDToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"rescueToken","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniSwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoAddLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_flag","type":"bool"}],"name":"setAutoSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setAutomaticPairMarket","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLp","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"setLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_value","type":"uint256"}],"name":"setMinSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newLp","type":"uint256"},{"internalType":"uint256","name":"_newMarketing","type":"uint256"},{"internalType":"uint256","name":"_newReward","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052600060038190556004819055603260058190556006919091556103ac60075560088190556103e8600c819055600d8054736828d3456c5dc1954ba2379c10462f09883a09fd6001600160a01b03199091161790556b033b2e3c9fd0803ce800000060128190556200009b92620000879190620005a5602090811b620019d317901c565b6200060c60201b62001a2c1790919060201c565b6013556016805461ff001960ff19909116600117166101001790556207a120601855601b805460ff60a01b19169055348015620000d757600080fd5b50604080518082018252601081526f50726f6f66206f66205361746f73686960801b602080830191825283518085019094526007845266042544320322e360cc1b90840152815191929160129162000133916000919062000711565b5081516200014990600190602085019062000711565b506002805460ff191660ff9290921691909117610100600160a81b03191661010033021790555050601b8054737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031990911617908190556040805163c45a015560e01b815290516001600160a01b039092169163c45a015591600480820192602092909190829003018186803b158015620001de57600080fd5b505afa158015620001f3573d6000803e3d6000fd5b505050506040513d60208110156200020a57600080fd5b5051601b54604080516315ab88c960e31b815290516001600160a01b039384169363c9c6539693169163ad5c4648916004808301926020929190829003018186803b1580156200025957600080fd5b505afa1580156200026e573d6000803e3d6000fd5b505050506040513d60208110156200028557600080fd5b5051604080516001600160e01b031960e085901b1681526001600160a01b0390921660048301523060248301525160448083019260209291908290030181600087803b158015620002d557600080fd5b505af1158015620002ea573d6000803e3d6000fd5b505050506040513d60208110156200030157600080fd5b5051601980546001600160a01b039283166001600160a01b0319918216178255306000908152601560209081526040808320601b5487168452825280832060001990559354601a8054851691909616908117909555938152601090935291819020805460ff19166001179055600e8054909216331790915551737a250d5630b4cf539739df2c5dacb4c659f2488d906200039b90620007a6565b6001600160a01b03909116815260405190819003602001906000f080158015620003c9573d6000803e3d6000fd5b506016805462010000600160b01b031916620100006001600160a01b039384168102919091179182905560178054919092049092166001600160a01b03199092169190911790556001601160006200042062000656565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790556019549091168152601190925280822080548416600190811790915530835290822080548416821790557f97847ee99463795296047093514439c3127772df3715e628aa85601cf854171680548416821790558180527f4ad3b33220dddc71b994a52d72c06b10862965f7d926534c05c00fb7e819e7b780549093168117909255600f90620004dc62000656565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff19958616179055308152600f90925281208054909216600117909155601254906014906200052e62000656565b6001600160a01b031681526020810191909152604001600020556200055262000656565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6012546040518082815260200191505060405180910390a3620007cb565b600082620005b65750600062000606565b82820282848281620005c457fe5b0414620006035760405162461bcd60e51b81526004018080602001828103825260218152602001806200406a6021913960400191505060405180910390fd5b90505b92915050565b60006200060383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200066a60201b60201c565b60025461010090046001600160a01b031690565b60008183620006fa5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620006be578181015183820152602001620006a4565b50505050905090810190601f168015620006ec5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816200070757fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928262000749576000855562000794565b82601f106200076457805160ff191683800117855562000794565b8280016001018555821562000794579182015b828111156200079457825182559160200191906001019062000777565b50620007a2929150620007b4565b5090565b611022806200304883390190565b5b80821115620007a25760008155600101620007b5565b61286d80620007db6000396000f3fe6080604052600436106103855760003560e01c80638f32d59b116101d1578063cfbac92f11610102578063e5711e8b116100a0578063f63743421161006f578063f637434214610c07578063f708a64f14610c1c578063f832679514610c57578063f887ea4014610c6c5761038c565b8063e5711e8b14610b41578063ea8b2c4414610b84578063f11a24d314610bbf578063f2fde38b14610bd45761038c565b8063d4399790116100dc578063d439979014610a83578063dd62ed3e14610ab6578063dde04b9514610af1578063e2f4560514610b2c5761038c565b8063cfbac92f14610a2d578063cfe0e61914610a59578063d4057d7e14610a6e5761038c565b8063a8aa1b311161016f578063b62496f511610149578063b62496f51461098d578063b677814c146109c0578063bb8d5131146109d5578063c6501c89146109ea5761038c565b8063a8aa1b311461092a578063a9059cbb1461093f578063ad64598a146109785761038c565b80639d1944f5116101ab5780639d1944f514610877578063a457c2d7146108a1578063a4b45c00146108da578063a715184d146109155761038c565b80638f32d59b14610838578063921369131461084d57806395d89b41146108625761038c565b80633eaaf86b116102b6578063715018a6116102545780637bce5a04116102235780637bce5a04146107e45780637fb6df58146107f957806383b4ac681461080e5780638da5cb5b146108235761038c565b8063715018a614610772578063753d02a114610787578063764d72bf1461079c57806377a3b609146107cf5761038c565b80634bc6dd18116102905780634bc6dd18146106e95780634d709adf1461071557806351bc3c851461072a57806370a082311461073f5761038c565b80633eaaf86b146106705780634144d9e4146106855780634355855a146106b65761038c565b80632b112e49116103235780632f34d282116102fd5780632f34d282146105af578063313ce567146105e2578063320d45341461060d57806339509351146106375761038c565b80632b112e49146105555780632d48e8961461056a5780632e0f26251461059a5761038c565b806318160ddd1161035f57806318160ddd1461048f5780631d865c30146104a457806323b872dd146104dc57806325519cf21461051f5761038c565b806306fdde0314610391578063095ea7b31461041b578063180b0d7e146104685761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610c81565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b506104546004803603604081101561043e57600080fd5b506001600160a01b038135169060200135610d17565b604080519115158252519081900360200190f35b34801561047457600080fd5b5061047d610d2e565b60408051918252519081900360200190f35b34801561049b57600080fd5b5061047d610d34565b3480156104b057600080fd5b506104da600480360360608110156104c757600080fd5b5080359060208101359060400135610d3a565b005b3480156104e857600080fd5b50610454600480360360608110156104ff57600080fd5b506001600160a01b03813581169160208101359091169060400135610d59565b34801561052b57600080fd5b506104da6004803603606081101561054257600080fd5b5080359060208101359060400135610e33565b34801561056157600080fd5b5061047d610e52565b34801561057657600080fd5b506104da6004803603604081101561058d57600080fd5b5080359060200135610ec3565b3480156105a657600080fd5b5061047d610f53565b3480156105bb57600080fd5b506104da600480360360208110156105d257600080fd5b50356001600160a01b0316610f58565b3480156105ee57600080fd5b506105f7610f95565b6040805160ff9092168252519081900360200190f35b34801561061957600080fd5b506104da6004803603602081101561063057600080fd5b5035610f9e565b34801561064357600080fd5b506104546004803603604081101561065a57600080fd5b506001600160a01b038135169060200135610fb4565b34801561067c57600080fd5b5061047d611047565b34801561069157600080fd5b5061069a61104d565b604080516001600160a01b039092168252519081900360200190f35b3480156106c257600080fd5b50610454600480360360208110156106d957600080fd5b50356001600160a01b031661105c565b3480156106f557600080fd5b506104da6004803603602081101561070c57600080fd5b50351515611071565b34801561072157600080fd5b5061069a6110b7565b34801561073657600080fd5b506104da6110c6565b34801561074b57600080fd5b5061047d6004803603602081101561076257600080fd5b50356001600160a01b0316611132565b34801561077e57600080fd5b506104da61114d565b34801561079357600080fd5b506104da6111ad565b3480156107a857600080fd5b506104da600480360360208110156107bf57600080fd5b50356001600160a01b0316611217565b3480156107db57600080fd5b5061047d611265565b3480156107f057600080fd5b5061047d61126b565b34801561080557600080fd5b5061069a611271565b34801561081a57600080fd5b50610454611280565b34801561082f57600080fd5b5061069a611291565b34801561084457600080fd5b506104546112a5565b34801561085957600080fd5b5061047d6112bb565b34801561086e57600080fd5b506103a66112c1565b34801561088357600080fd5b506104da6004803603602081101561089a57600080fd5b5035611321565b3480156108ad57600080fd5b50610454600480360360408110156108c457600080fd5b506001600160a01b03813516906020013561138e565b3480156108e657600080fd5b506104da600480360360408110156108fd57600080fd5b506001600160a01b0381358116916020013516611477565b34801561092157600080fd5b5061069a6114b6565b34801561093657600080fd5b5061069a6114c5565b34801561094b57600080fd5b506104546004803603604081101561096257600080fd5b506001600160a01b0381351690602001356114d4565b34801561098457600080fd5b50610454611500565b34801561099957600080fd5b50610454600480360360208110156109b057600080fd5b50356001600160a01b0316611509565b3480156109cc57600080fd5b5061047d61151e565b3480156109e157600080fd5b5061047d611524565b3480156109f657600080fd5b5061045460048036036060811015610a0d57600080fd5b506001600160a01b0381358116916020810135909116906040013561152a565b348015610a3957600080fd5b506104da60048036036020811015610a5057600080fd5b503515156115d8565b348015610a6557600080fd5b5061047d611615565b348015610a7a57600080fd5b5061045461161b565b348015610a8f57600080fd5b5061045460048036036020811015610aa657600080fd5b50356001600160a01b0316611629565b348015610ac257600080fd5b5061047d60048036036040811015610ad957600080fd5b506001600160a01b0381358116916020013516611647565b348015610afd57600080fd5b506104da60048036036040811015610b1457600080fd5b506001600160a01b0381351690602001351515611672565b348015610b3857600080fd5b5061047d611717565b348015610b4d57600080fd5b5061045460048036036060811015610b6457600080fd5b506001600160a01b0381358116916020810135909116906040013561171d565b348015610b9057600080fd5b506104da60048036036040811015610ba757600080fd5b506001600160a01b0381351690602001351515611787565b348015610bcb57600080fd5b5061047d61183e565b348015610be057600080fd5b506104da60048036036020811015610bf757600080fd5b50356001600160a01b0316611844565b348015610c1357600080fd5b5061047d61185e565b348015610c2857600080fd5b506104da60048036036040811015610c3f57600080fd5b506001600160a01b0381351690602001351515611864565b348015610c6357600080fd5b5061047d6119be565b348015610c7857600080fd5b5061069a6119c4565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b6000610d24338484611a6e565b5060015b92915050565b600c5481565b60125490565b610d426112a5565b610d4b57600080fd5b600692909255600755600855565b6000826001600160a01b038116610d6f57600080fd5b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914610e1c576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601582528381203382529091529190912054610df7918590611b5a565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b610e27858585611bf1565b50600195945050505050565b610e3b6112a5565b610e4457600080fd5b600392909255600455600555565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00546012549192610ebe929091610eb89190611ed2565b90611ed2565b905090565b610ecb6112a5565b610ed457600080fd5b601660029054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505050505050565b601281565b610f606112a5565b610f6957600080fd5b601a80546001600160a01b039092166001600160a01b0319928316811790915560198054909216179055565b60025460ff1690565b610fa66112a5565b610faf57600080fd5b601355565b3360009081526015602090815260408083206001600160a01b0386168452909152812054610fe29083611f14565b3360008181526015602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60125481565b600d546001600160a01b031681565b60116020526000908152604090205460ff1681565b6110796112a5565b61108257600080fd5b80156110a0576016805461ff001916610100831515021790556110b4565b6016805461ff001916610100831515021790555b50565b601a546001600160a01b031681565b6110ce6112a5565b6110d757600080fd5b601b805460ff60a01b1916600160a01b179055600954156110fd576110fd600954611f6e565b600a541561111057611110600a54611fd4565b600b541561112357611123600b54612037565b601b805460ff60a01b19169055565b6001600160a01b031660009081526014602052604090205490565b6111556112a5565b61115e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b50505050565b61121f6112a5565b61122857600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611260573d6000803e3d6000fd5b505050565b60055481565b60045481565b6017546001600160a01b031681565b601b54600160a01b900460ff161590565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60075481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b6113296112a5565b61133257600080fd5b620b71b08110611389576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601855565b3360009081526015602090815260408083206001600160a01b03861684529091528120548083106113e2573360009081526015602090815260408083206001600160a01b0388168452909152812055611411565b6113ec8184611ed2565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61147f6112a5565b61148857600080fd5b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b600e546001600160a01b031681565b6019546001600160a01b031681565b6000826001600160a01b0381166114ea57600080fd5b6114f5338585611bf1565b506001949350505050565b60165460ff1681565b60106020526000908152604090205460ff1681565b600b5481565b60085481565b60006115346112a5565b61153d57600080fd5b6016546040805163e5711e8b60e01b81526001600160a01b0387811660048301528681166024830152604482018690529151620100009093049091169163e5711e8b916064808201926020929091908290030181600087803b1580156115a257600080fd5b505af11580156115b6573d6000803e3d6000fd5b505050506040513d60208110156115cc57600080fd5b505190505b9392505050565b6115e06112a5565b6115e957600080fd5b8015611602576016805460ff19168215151790556110b4565b6016805482151560ff1990911617905550565b600a5481565b601654610100900460ff1681565b6001600160a01b03166000908152600f602052604090205460ff1690565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b61167a6112a5565b61168357600080fd5b6001600160a01b0382166000908152600f602052604090205460ff16151581151514156116ec576040805162461bcd60e51b8152602060048201526012602482015271115c9c9bdc8e88139bdd0818da185b99d95960721b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60135481565b60006117276112a5565b61173057600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156115a257600080fd5b61178f6112a5565b61179857600080fd5b8015611801576001600160a01b03821660009081526010602052604090205460ff1615611801576040805162461bcd60e51b81526020600482015260126024820152715061697220416c726561647920536574212160701b604482015290519081900360640190fd5b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586161790556011909152902080549091166001179055565b60035481565b61184c6112a5565b61185557600080fd5b6110b4816120ce565b60065481565b61186c6112a5565b61187557600080fd5b6001600160a01b03821630148015906118a757506001600160a01b03821660009081526010602052604090205460ff16155b6118b057600080fd5b6001600160a01b0382166000908152601160205260409020805460ff191682158015919091179091556119535760165460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292516201000090940416926314b6ca969260448084019391929182900301818387803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506119ba565b6016546201000090046001600160a01b03166314b6ca968361197481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b5050565b60095481565b601b546001600160a01b031681565b6000826119e257506000610d28565b828202828482816119ef57fe5b04146115d15760405162461bcd60e51b81526004018080602001828103825260218152602001806127f36021913960400191505060405180910390fd5b60006115d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612148565b6001600160a01b038316611ab35760405162461bcd60e51b81526004018080602001828103825260248152602001806128146024913960400191505060405180910390fd5b6001600160a01b038216611af85760405162461bcd60e51b81526004018080602001828103825260228152602001806127d16022913960400191505060405180910390fd5b6001600160a01b03808416600081815260156020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008184841115611be95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bae578181015183820152602001611b96565b50505050905090810190601f168015611bdb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601b54600090600160a01b900460ff1615611c1857611c118484846121ad565b90506115d1565b611c20612222565b15611c2d57611c2d612280565b611c356122b9565b15611c4257611c426122fc565b6001600160a01b038416600090815260146020526040902054611c659083611ed2565b6001600160a01b038516600090815260146020526040812091909155611c8b8585612322565b611c955782611ca0565b611ca08585856123b4565b6001600160a01b038516600090815260146020526040902054909150611cc69082611f14565b6001600160a01b0380861660009081526014602090815260408083209490945591881681526011909152205460ff16611d73576016546201000090046001600160a01b03166314b6ca9686611d1a81611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d6057600080fd5b505af1925050508015611d71575060015b505b6001600160a01b03841660009081526011602052604090205460ff16611e0d576016546201000090046001600160a01b03166314b6ca9685611db481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611dfa57600080fd5b505af1925050508015611e0b575060015b505b601660029054906101000a90046001600160a01b03166001600160a01b031663ffb2c4796018546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e6a57600080fd5b505af1925050508015611e7b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b60006115d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b5a565b6000828201838110156115d1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600954600090611f7f906002611a2c565b90506000611f9882600954611ed290919063ffffffff16565b905047611fa483612586565b6000611fb04783611ed2565b600954909150611fc09086611ed2565b600955611fcd8382612718565b5050505050565b47611fde82612586565b6000611fea4783611ed2565b600a54909150611ffa9084611ed2565b600a55600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611211573d6000803e3d6000fd5b4761204182612586565b600061204d4783611ed2565b600b5490915061205d9084611ed2565b600b81905550601660029054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120b357600080fd5b505af1935050505080156120c5575060015b61126057611260565b6001600160a01b0381166120e157600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836121975760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611bae578181015183820152602001611b96565b5060008385816121a357fe5b0495945050505050565b6001600160a01b0383166000908152601460205260408120546121d09083611ed2565b6001600160a01b0380861660009081526014602052604080822093909355908516815220546121ff9083611f14565b6001600160a01b0384166000908152601460205260409020555060019392505050565b60008061222e30611132565b6013546016549192508210159060ff1680156122545750601b54600160a01b900460ff16155b801561225d5750805b801561227957503360009081526010602052604090205460ff16155b9250505090565b601b805460ff60a01b1916600160a01b179055600954156122a6576122a6600954611f6e565b600a541561112357611123600a54611fd4565b601654600090610100900460ff1680156122dd5750601b54600160a01b900460ff16155b8015610ebe5750503360009081526010602052604090205460ff161590565b601b805460ff60a01b1916600160a01b179055600b541561112357611123600b54612037565b6001600160a01b0382166000908152600f602052604081205460ff168061236157506001600160a01b0382166000908152600f602052604090205460ff165b1561236e57506000610d28565b6001600160a01b03831660009081526010602052604090205460ff16806123ad57506001600160a01b03821660009081526010602052604090205460ff165b9050610d28565b6001600160a01b038316600090815260106020526040812054819081908190819060ff1615612463576123fe600c546123f8600354896119d390919063ffffffff16565b90611a2c565b6009805482019055600c5460045491945061241e916123f89089906119d3565b600a805482019055600c5460055491935061243e916123f89089906119d3565b600b805482019055905061245c816124568585611f14565b90611f14565b93506124fa565b6001600160a01b03871660009081526010602052604090205460ff16156124fa5761249f600c546123f8600654896119d390919063ffffffff16565b6009805482019055600c546007549194506124bf916123f89089906119d3565b600a805482019055600c546008549193506124df916123f89089906119d3565b600b80548201905590506124f7816124568585611f14565b93505b8315612570573060009081526014602052604090205461251a9085611f14565b30600081815260146020908152604091829020939093558051878152905191926001600160a01b038c16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b61257a8685611ed2565b98975050505050505050565b604080516002808252606080830184529260208301908036833701905050905030816000815181106125b457fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561260857600080fd5b505afa15801561261c573d6000803e3d6000fd5b505050506040513d602081101561263257600080fd5b505181518290600190811061264357fe5b6001600160a01b039283166020918202929092010152601b546126699130911684611a6e565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156126ef5781810151838201526020016126d7565b505050509050019650505050505050600060405180830381600087803b158015610f3757600080fd5b601b546127309030906001600160a01b031684611a6e565b601b54600e546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156127a557600080fd5b505af11580156127b9573d6000803e3d6000fd5b50505050506040513d606081101561121157600080fdfe45524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122067f0973db063b206d4c0b4e256e10535b8ad42f66851b4fdd1e31f7027f14e1d64736f6c634300070400336080604052600180546001600160a01b03191673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb4817905569d3c21bcecceda1000000600c55610e10600d55620f4240600e5534801561005157600080fd5b506040516110223803806110228339818101604052602081101561007457600080fd5b50516001600160a01b03811661009e57737a250d5630b4cf539739df2c5dacb4c659f2488d6100a0565b805b600280546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550610f48806100da6000396000f3fe6080604052600436106100f35760003560e01c8063ce7c2ac21161008a578063efca2eed11610059578063efca2eed146102d6578063f0fc6bca146102eb578063ffb2c47914610300578063ffd49c841461032a576100f3565b8063ce7c2ac214610211578063d0e30db014610262578063e2d2e2191461026a578063e5711e8b1461027f576100f3565b80632d48e896116100c65780632d48e896146101a25780633a98ef39146101d25780634fab0ae8146101e7578063997664d7146101fc576100f3565b806311ce023d146100f857806314b6ca961461011f57806326987b601461015a57806328fd31981461016f575b600080fd5b34801561010457600080fd5b5061010d61033f565b60408051918252519081900360200190f35b34801561012b57600080fd5b506101586004803603604081101561014257600080fd5b506001600160a01b038135169060200135610345565b005b34801561016657600080fd5b5061010d61046a565b34801561017b57600080fd5b5061010d6004803603602081101561019257600080fd5b50356001600160a01b0316610470565b3480156101ae57600080fd5b50610158600480360360408110156101c557600080fd5b50803590602001356104fc565b3480156101de57600080fd5b5061010d61051e565b3480156101f357600080fd5b5061010d610524565b34801561020857600080fd5b5061010d61052a565b34801561021d57600080fd5b506102446004803603602081101561023457600080fd5b50356001600160a01b0316610530565b60408051938452602084019290925282820152519081900360600190f35b610158610551565b34801561027657600080fd5b5061010d610844565b34801561028b57600080fd5b506102c2600480360360608110156102a257600080fd5b506001600160a01b0381358116916020810135909116906040013561084a565b604080519115158252519081900360200190f35b3480156102e257600080fd5b5061010d6108ed565b3480156102f757600080fd5b506101586108f3565b34801561030c57600080fd5b506101586004803603602081101561032357600080fd5b50356108fe565b34801561033657600080fd5b5061010d6109e0565b600c5481565b6000546001600160a01b0316331461035c57600080fd5b6001600160a01b0382166000908152600660205260409020541561038357610383826109e6565b6000811180156103a957506001600160a01b038216600090815260066020526040902054155b156103bc576103b782610b0e565b6103ef565b801580156103e157506001600160a01b03821660009081526006602052604090205415155b156103ef576103ef82610b6f565b6001600160a01b03821660009081526006602052604090205460075461042091839161041a91610c5c565b90610ca7565b6007556001600160a01b038216600090815260066020526040902081905561044781610d01565b6001600160a01b0390921660009081526006602052604090206001019190915550565b600b5481565b6001600160a01b038116600090815260066020526040812054610495575060006104f7565b6001600160a01b0382166000908152600660205260408120546104b790610d01565b6001600160a01b0384166000908152600660205260409020600101549091508082116104e8576000925050506104f7565b6104f28282610c5c565b925050505b919050565b6000546001600160a01b0316331461051357600080fd5b600d91909155600e55565b60075481565b600e5481565b60085481565b60066020526000908152604090208054600182015460029092015490919083565b6000546001600160a01b0316331461056857600080fd5b600154604080516370a0823160e01b815230600482015290516000926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156105b357600080fd5b505afa1580156105c7573d6000803e3d6000fd5b505050506040513d60208110156105dd57600080fd5b50516040805160028082526060808301845293945090916020830190803683375050600254604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c464892506004808301926020929190829003018186803b15801561064757600080fd5b505afa15801561065b573d6000803e3d6000fd5b505050506040513d602081101561067157600080fd5b50518151829060009061068057fe5b6001600160a01b03928316602091820292909201015260018054835192169183919081106106aa57fe5b6001600160a01b0392831660209182029290920181019190915260025460405163b6f9de9560e01b815260006004820181815230604484018190524260648501819052608060248601908152895160848701528951969098169763b6f9de9597349795968b969495939460a49091019187810191028083838b5b8381101561073c578181015183820152602001610724565b50505050905001955050505050506000604051808303818588803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b5050600154604080516370a0823160e01b815230600482015290516000955061080294508793506001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156107d057600080fd5b505afa1580156107e4573d6000803e3d6000fd5b505050506040513d60208110156107fa57600080fd5b505190610c5c565b6008549091506108129082610ca7565b600855600754600c5461083c916108339161082d9085610d1e565b90610d77565b600a5490610ca7565b600a55505050565b600a5481565b600080546001600160a01b0316331461086257600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156108b957600080fd5b505af11580156108cd573d6000803e3d6000fd5b505050506040513d60208110156108e357600080fd5b5051949350505050565b60095481565b6108fc336109e6565b565b6000546001600160a01b0316331461091557600080fd5b6003548061092357506109dd565b6000805a905060005b848310801561093a57508381105b156109d85783600b541061094e576000600b555b61097a6003600b548154811061096057fe5b6000918252602090912001546001600160a01b0316610db9565b156109ab576109ab6003600b548154811061099157fe5b6000918252602090912001546001600160a01b03166109e6565b6109c06109b95a8490610c5c565b8490610ca7565b92505a600b805460019081019091559092500161092c565b505050505b50565b600d5481565b6001600160a01b038116600090815260066020526040902054610a08576109dd565b6000610a1382610470565b90508015610b0a57600954610a289082610ca7565b6009556001546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015610a8157600080fd5b505af1158015610a95573d6000803e3d6000fd5b505050506040513d6020811015610aab57600080fd5b50506001600160a01b03821660009081526005602090815260408083204290556006909152902060020154610ae09082610ca7565b6001600160a01b038316600090815260066020526040902060028101919091555461044790610d01565b5050565b600380546001600160a01b039092166000818152600460205260408120849055600184018355919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b90910180546001600160a01b0319169091179055565b600380546000198101908110610b8157fe5b60009182526020808320909101546001600160a01b0384811684526004909252604090922054600380549290931692918110610bb957fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559183168152600491829052604081205460038054919392916000198101908110610c0757fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020556003805480610c3757fe5b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610c9e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610df5565b90505b92915050565b600082820183811015610c9e576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000610ca1600c5461082d600a5485610d1e90919063ffffffff16565b600082610d2d57506000610ca1565b82820282848281610d3a57fe5b0414610c9e5760405162461bcd60e51b8152600401808060200182810382526021815260200180610ef26021913960400191505060405180910390fd5b6000610c9e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610e8c565b600d546001600160a01b0382166000908152600560205260408120549091429101108015610ca15750600e54610dee83610470565b1192915050565b60008184841115610e845760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e49578181015183820152602001610e31565b50505050905090810190601f168015610e765780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b60008183610edb5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315610e49578181015183820152602001610e31565b506000838581610ee757fe5b049594505050505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220fbdad5509790114ddfe42c4959af71bf00c390cb17df8f1cc179561ef2a22e4164736f6c63430007040033536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77
Deployed Bytecode
0x6080604052600436106103855760003560e01c80638f32d59b116101d1578063cfbac92f11610102578063e5711e8b116100a0578063f63743421161006f578063f637434214610c07578063f708a64f14610c1c578063f832679514610c57578063f887ea4014610c6c5761038c565b8063e5711e8b14610b41578063ea8b2c4414610b84578063f11a24d314610bbf578063f2fde38b14610bd45761038c565b8063d4399790116100dc578063d439979014610a83578063dd62ed3e14610ab6578063dde04b9514610af1578063e2f4560514610b2c5761038c565b8063cfbac92f14610a2d578063cfe0e61914610a59578063d4057d7e14610a6e5761038c565b8063a8aa1b311161016f578063b62496f511610149578063b62496f51461098d578063b677814c146109c0578063bb8d5131146109d5578063c6501c89146109ea5761038c565b8063a8aa1b311461092a578063a9059cbb1461093f578063ad64598a146109785761038c565b80639d1944f5116101ab5780639d1944f514610877578063a457c2d7146108a1578063a4b45c00146108da578063a715184d146109155761038c565b80638f32d59b14610838578063921369131461084d57806395d89b41146108625761038c565b80633eaaf86b116102b6578063715018a6116102545780637bce5a04116102235780637bce5a04146107e45780637fb6df58146107f957806383b4ac681461080e5780638da5cb5b146108235761038c565b8063715018a614610772578063753d02a114610787578063764d72bf1461079c57806377a3b609146107cf5761038c565b80634bc6dd18116102905780634bc6dd18146106e95780634d709adf1461071557806351bc3c851461072a57806370a082311461073f5761038c565b80633eaaf86b146106705780634144d9e4146106855780634355855a146106b65761038c565b80632b112e49116103235780632f34d282116102fd5780632f34d282146105af578063313ce567146105e2578063320d45341461060d57806339509351146106375761038c565b80632b112e49146105555780632d48e8961461056a5780632e0f26251461059a5761038c565b806318160ddd1161035f57806318160ddd1461048f5780631d865c30146104a457806323b872dd146104dc57806325519cf21461051f5761038c565b806306fdde0314610391578063095ea7b31461041b578063180b0d7e146104685761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610c81565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103e05781810151838201526020016103c8565b50505050905090810190601f16801561040d5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561042757600080fd5b506104546004803603604081101561043e57600080fd5b506001600160a01b038135169060200135610d17565b604080519115158252519081900360200190f35b34801561047457600080fd5b5061047d610d2e565b60408051918252519081900360200190f35b34801561049b57600080fd5b5061047d610d34565b3480156104b057600080fd5b506104da600480360360608110156104c757600080fd5b5080359060208101359060400135610d3a565b005b3480156104e857600080fd5b50610454600480360360608110156104ff57600080fd5b506001600160a01b03813581169160208101359091169060400135610d59565b34801561052b57600080fd5b506104da6004803603606081101561054257600080fd5b5080359060208101359060400135610e33565b34801561056157600080fd5b5061047d610e52565b34801561057657600080fd5b506104da6004803603604081101561058d57600080fd5b5080359060200135610ec3565b3480156105a657600080fd5b5061047d610f53565b3480156105bb57600080fd5b506104da600480360360208110156105d257600080fd5b50356001600160a01b0316610f58565b3480156105ee57600080fd5b506105f7610f95565b6040805160ff9092168252519081900360200190f35b34801561061957600080fd5b506104da6004803603602081101561063057600080fd5b5035610f9e565b34801561064357600080fd5b506104546004803603604081101561065a57600080fd5b506001600160a01b038135169060200135610fb4565b34801561067c57600080fd5b5061047d611047565b34801561069157600080fd5b5061069a61104d565b604080516001600160a01b039092168252519081900360200190f35b3480156106c257600080fd5b50610454600480360360208110156106d957600080fd5b50356001600160a01b031661105c565b3480156106f557600080fd5b506104da6004803603602081101561070c57600080fd5b50351515611071565b34801561072157600080fd5b5061069a6110b7565b34801561073657600080fd5b506104da6110c6565b34801561074b57600080fd5b5061047d6004803603602081101561076257600080fd5b50356001600160a01b0316611132565b34801561077e57600080fd5b506104da61114d565b34801561079357600080fd5b506104da6111ad565b3480156107a857600080fd5b506104da600480360360208110156107bf57600080fd5b50356001600160a01b0316611217565b3480156107db57600080fd5b5061047d611265565b3480156107f057600080fd5b5061047d61126b565b34801561080557600080fd5b5061069a611271565b34801561081a57600080fd5b50610454611280565b34801561082f57600080fd5b5061069a611291565b34801561084457600080fd5b506104546112a5565b34801561085957600080fd5b5061047d6112bb565b34801561086e57600080fd5b506103a66112c1565b34801561088357600080fd5b506104da6004803603602081101561089a57600080fd5b5035611321565b3480156108ad57600080fd5b50610454600480360360408110156108c457600080fd5b506001600160a01b03813516906020013561138e565b3480156108e657600080fd5b506104da600480360360408110156108fd57600080fd5b506001600160a01b0381358116916020013516611477565b34801561092157600080fd5b5061069a6114b6565b34801561093657600080fd5b5061069a6114c5565b34801561094b57600080fd5b506104546004803603604081101561096257600080fd5b506001600160a01b0381351690602001356114d4565b34801561098457600080fd5b50610454611500565b34801561099957600080fd5b50610454600480360360208110156109b057600080fd5b50356001600160a01b0316611509565b3480156109cc57600080fd5b5061047d61151e565b3480156109e157600080fd5b5061047d611524565b3480156109f657600080fd5b5061045460048036036060811015610a0d57600080fd5b506001600160a01b0381358116916020810135909116906040013561152a565b348015610a3957600080fd5b506104da60048036036020811015610a5057600080fd5b503515156115d8565b348015610a6557600080fd5b5061047d611615565b348015610a7a57600080fd5b5061045461161b565b348015610a8f57600080fd5b5061045460048036036020811015610aa657600080fd5b50356001600160a01b0316611629565b348015610ac257600080fd5b5061047d60048036036040811015610ad957600080fd5b506001600160a01b0381358116916020013516611647565b348015610afd57600080fd5b506104da60048036036040811015610b1457600080fd5b506001600160a01b0381351690602001351515611672565b348015610b3857600080fd5b5061047d611717565b348015610b4d57600080fd5b5061045460048036036060811015610b6457600080fd5b506001600160a01b0381358116916020810135909116906040013561171d565b348015610b9057600080fd5b506104da60048036036040811015610ba757600080fd5b506001600160a01b0381351690602001351515611787565b348015610bcb57600080fd5b5061047d61183e565b348015610be057600080fd5b506104da60048036036020811015610bf757600080fd5b50356001600160a01b0316611844565b348015610c1357600080fd5b5061047d61185e565b348015610c2857600080fd5b506104da60048036036040811015610c3f57600080fd5b506001600160a01b0381351690602001351515611864565b348015610c6357600080fd5b5061047d6119be565b348015610c7857600080fd5b5061069a6119c4565b60008054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b820191906000526020600020905b815481529060010190602001808311610cf057829003601f168201915b5050505050905090565b6000610d24338484611a6e565b5060015b92915050565b600c5481565b60125490565b610d426112a5565b610d4b57600080fd5b600692909255600755600855565b6000826001600160a01b038116610d6f57600080fd5b6001600160a01b038516600090815260156020908152604080832033845290915290205460001914610e1c576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0388166000908152601582528381203382529091529190912054610df7918590611b5a565b6001600160a01b03861660009081526015602090815260408083203384529091529020555b610e27858585611bf1565b50600195945050505050565b610e3b6112a5565b610e4457600080fd5b600392909255600455600555565b60146020527f4f26c3876aa9f4b92579780beea1161a61f87ebf1ec6ee865b299e447ecba99c5461dead60009081527f8b9e18c5e04efe171d1e4f682ad90d753958a5ffe56db5290b0236c8e0b6db00546012549192610ebe929091610eb89190611ed2565b90611ed2565b905090565b610ecb6112a5565b610ed457600080fd5b601660029054906101000a90046001600160a01b03166001600160a01b0316632d48e89683836040518363ffffffff1660e01b81526004018083815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505050505050565b601281565b610f606112a5565b610f6957600080fd5b601a80546001600160a01b039092166001600160a01b0319928316811790915560198054909216179055565b60025460ff1690565b610fa66112a5565b610faf57600080fd5b601355565b3360009081526015602090815260408083206001600160a01b0386168452909152812054610fe29083611f14565b3360008181526015602090815260408083206001600160a01b0389168085529083529281902085905580519485525191937f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929081900390910190a350600192915050565b60125481565b600d546001600160a01b031681565b60116020526000908152604090205460ff1681565b6110796112a5565b61108257600080fd5b80156110a0576016805461ff001916610100831515021790556110b4565b6016805461ff001916610100831515021790555b50565b601a546001600160a01b031681565b6110ce6112a5565b6110d757600080fd5b601b805460ff60a01b1916600160a01b179055600954156110fd576110fd600954611f6e565b600a541561111057611110600a54611fd4565b600b541561112357611123600b54612037565b601b805460ff60a01b19169055565b6001600160a01b031660009081526014602052604090205490565b6111556112a5565b61115e57600080fd5b6002546040516101009091046001600160a01b0316907ff8df31144d9c2f0f6b59d69b8b98abd5459d07f2742c4df920b25aae33c6482090600090a260028054610100600160a81b0319169055565b601960009054906101000a90046001600160a01b03166001600160a01b031663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b50505050565b61121f6112a5565b61122857600080fd5b60405147906001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611260573d6000803e3d6000fd5b505050565b60055481565b60045481565b6017546001600160a01b031681565b601b54600160a01b900460ff161590565b60025461010090046001600160a01b031690565b60025461010090046001600160a01b0316331490565b60075481565b60018054604080516020601f60026000196101008789161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d0d5780601f10610ce257610100808354040283529160200191610d0d565b6113296112a5565b61133257600080fd5b620b71b08110611389576040805162461bcd60e51b815260206004820152601d60248201527f476173206d757374206265206c6f776572207468616e20373530303030000000604482015290519081900360640190fd5b601855565b3360009081526015602090815260408083206001600160a01b03861684529091528120548083106113e2573360009081526015602090815260408083206001600160a01b0388168452909152812055611411565b6113ec8184611ed2565b3360009081526015602090815260408083206001600160a01b03891684529091529020555b3360008181526015602090815260408083206001600160a01b0389168085529083529281902054815190815290519293927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925929181900390910190a35060019392505050565b61147f6112a5565b61148857600080fd5b600d80546001600160a01b039384166001600160a01b031991821617909155600e8054929093169116179055565b600e546001600160a01b031681565b6019546001600160a01b031681565b6000826001600160a01b0381166114ea57600080fd5b6114f5338585611bf1565b506001949350505050565b60165460ff1681565b60106020526000908152604090205460ff1681565b600b5481565b60085481565b60006115346112a5565b61153d57600080fd5b6016546040805163e5711e8b60e01b81526001600160a01b0387811660048301528681166024830152604482018690529151620100009093049091169163e5711e8b916064808201926020929091908290030181600087803b1580156115a257600080fd5b505af11580156115b6573d6000803e3d6000fd5b505050506040513d60208110156115cc57600080fd5b505190505b9392505050565b6115e06112a5565b6115e957600080fd5b8015611602576016805460ff19168215151790556110b4565b6016805482151560ff1990911617905550565b600a5481565b601654610100900460ff1681565b6001600160a01b03166000908152600f602052604090205460ff1690565b6001600160a01b03918216600090815260156020908152604080832093909416825291909152205490565b61167a6112a5565b61168357600080fd5b6001600160a01b0382166000908152600f602052604090205460ff16151581151514156116ec576040805162461bcd60e51b8152602060048201526012602482015271115c9c9bdc8e88139bdd0818da185b99d95960721b604482015290519081900360640190fd5b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b60135481565b60006117276112a5565b61173057600080fd5b836001600160a01b031663a9059cbb84846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156115a257600080fd5b61178f6112a5565b61179857600080fd5b8015611801576001600160a01b03821660009081526010602052604090205460ff1615611801576040805162461bcd60e51b81526020600482015260126024820152715061697220416c726561647920536574212160701b604482015290519081900360640190fd5b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586161790556011909152902080549091166001179055565b60035481565b61184c6112a5565b61185557600080fd5b6110b4816120ce565b60065481565b61186c6112a5565b61187557600080fd5b6001600160a01b03821630148015906118a757506001600160a01b03821660009081526010602052604090205460ff16155b6118b057600080fd5b6001600160a01b0382166000908152601160205260409020805460ff191682158015919091179091556119535760165460408051630a5b654b60e11b81526001600160a01b03858116600483015260006024830181905292516201000090940416926314b6ca969260448084019391929182900301818387803b15801561193657600080fd5b505af115801561194a573d6000803e3d6000fd5b505050506119ba565b6016546201000090046001600160a01b03166314b6ca968361197481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610f3757600080fd5b5050565b60095481565b601b546001600160a01b031681565b6000826119e257506000610d28565b828202828482816119ef57fe5b04146115d15760405162461bcd60e51b81526004018080602001828103825260218152602001806127f36021913960400191505060405180910390fd5b60006115d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612148565b6001600160a01b038316611ab35760405162461bcd60e51b81526004018080602001828103825260248152602001806128146024913960400191505060405180910390fd5b6001600160a01b038216611af85760405162461bcd60e51b81526004018080602001828103825260228152602001806127d16022913960400191505060405180910390fd5b6001600160a01b03808416600081815260156020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60008184841115611be95760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611bae578181015183820152602001611b96565b50505050905090810190601f168015611bdb5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b601b54600090600160a01b900460ff1615611c1857611c118484846121ad565b90506115d1565b611c20612222565b15611c2d57611c2d612280565b611c356122b9565b15611c4257611c426122fc565b6001600160a01b038416600090815260146020526040902054611c659083611ed2565b6001600160a01b038516600090815260146020526040812091909155611c8b8585612322565b611c955782611ca0565b611ca08585856123b4565b6001600160a01b038516600090815260146020526040902054909150611cc69082611f14565b6001600160a01b0380861660009081526014602090815260408083209490945591881681526011909152205460ff16611d73576016546201000090046001600160a01b03166314b6ca9686611d1a81611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611d6057600080fd5b505af1925050508015611d71575060015b505b6001600160a01b03841660009081526011602052604090205460ff16611e0d576016546201000090046001600160a01b03166314b6ca9685611db481611132565b6040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611dfa57600080fd5b505af1925050508015611e0b575060015b505b601660029054906101000a90046001600160a01b03166001600160a01b031663ffb2c4796018546040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611e6a57600080fd5b505af1925050508015611e7b575060015b50836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3506001949350505050565b60006115d183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b5a565b6000828201838110156115d1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600954600090611f7f906002611a2c565b90506000611f9882600954611ed290919063ffffffff16565b905047611fa483612586565b6000611fb04783611ed2565b600954909150611fc09086611ed2565b600955611fcd8382612718565b5050505050565b47611fde82612586565b6000611fea4783611ed2565b600a54909150611ffa9084611ed2565b600a55600d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611211573d6000803e3d6000fd5b4761204182612586565b600061204d4783611ed2565b600b5490915061205d9084611ed2565b600b81905550601660029054906101000a90046001600160a01b03166001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156120b357600080fd5b505af1935050505080156120c5575060015b61126057611260565b6001600160a01b0381166120e157600080fd5b6002546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600280546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b600081836121975760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611bae578181015183820152602001611b96565b5060008385816121a357fe5b0495945050505050565b6001600160a01b0383166000908152601460205260408120546121d09083611ed2565b6001600160a01b0380861660009081526014602052604080822093909355908516815220546121ff9083611f14565b6001600160a01b0384166000908152601460205260409020555060019392505050565b60008061222e30611132565b6013546016549192508210159060ff1680156122545750601b54600160a01b900460ff16155b801561225d5750805b801561227957503360009081526010602052604090205460ff16155b9250505090565b601b805460ff60a01b1916600160a01b179055600954156122a6576122a6600954611f6e565b600a541561112357611123600a54611fd4565b601654600090610100900460ff1680156122dd5750601b54600160a01b900460ff16155b8015610ebe5750503360009081526010602052604090205460ff161590565b601b805460ff60a01b1916600160a01b179055600b541561112357611123600b54612037565b6001600160a01b0382166000908152600f602052604081205460ff168061236157506001600160a01b0382166000908152600f602052604090205460ff165b1561236e57506000610d28565b6001600160a01b03831660009081526010602052604090205460ff16806123ad57506001600160a01b03821660009081526010602052604090205460ff165b9050610d28565b6001600160a01b038316600090815260106020526040812054819081908190819060ff1615612463576123fe600c546123f8600354896119d390919063ffffffff16565b90611a2c565b6009805482019055600c5460045491945061241e916123f89089906119d3565b600a805482019055600c5460055491935061243e916123f89089906119d3565b600b805482019055905061245c816124568585611f14565b90611f14565b93506124fa565b6001600160a01b03871660009081526010602052604090205460ff16156124fa5761249f600c546123f8600654896119d390919063ffffffff16565b6009805482019055600c546007549194506124bf916123f89089906119d3565b600a805482019055600c546008549193506124df916123f89089906119d3565b600b80548201905590506124f7816124568585611f14565b93505b8315612570573060009081526014602052604090205461251a9085611f14565b30600081815260146020908152604091829020939093558051878152905191926001600160a01b038c16927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35b61257a8685611ed2565b98975050505050505050565b604080516002808252606080830184529260208301908036833701905050905030816000815181106125b457fe5b6001600160a01b03928316602091820292909201810191909152601b54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561260857600080fd5b505afa15801561261c573d6000803e3d6000fd5b505050506040513d602081101561263257600080fd5b505181518290600190811061264357fe5b6001600160a01b039283166020918202929092010152601b546126699130911684611a6e565b601b5460405163791ac94760e01b8152600481018481526000602483018190523060648401819052426084850181905260a060448601908152875160a487015287516001600160a01b039097169663791ac947968a968a9594939092909160c40190602080880191028083838b5b838110156126ef5781810151838201526020016126d7565b505050509050019650505050505050600060405180830381600087803b158015610f3757600080fd5b601b546127309030906001600160a01b031684611a6e565b601b54600e546040805163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0392831660848201524260a48201529051919092169163f305d71991849160c48082019260609290919082900301818588803b1580156127a557600080fd5b505af11580156127b9573d6000803e3d6000fd5b50505050506040513d606081101561121157600080fdfe45524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a20617070726f76652066726f6d20746865207a65726f2061646472657373a264697066735822122067f0973db063b206d4c0b4e256e10535b8ad42f66851b4fdd1e31f7027f14e1d64736f6c63430007040033
Deployed Bytecode Sourcemap
18419:16018:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18143:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28378:189;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;28378:189:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;18911:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;32279:102;;;;;;;;;;;;;:::i;29365:264::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29365:264:0;;;;;;;;;;;;:::i;:::-;;21664:447;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21664:447:0;;;;;;;;;;;;;;;;;:::i;29091:266::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29091:266:0;;;;;;;;;;;;:::i;31157:167::-;;;;;;;;;;;;;:::i;30017:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30017:182:0;;;;;;;:::i;19446:37::-;;;;;;;;;;;;;:::i;31508:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31508:134:0;-1:-1:-1;;;;;31508:134:0;;:::i;18329:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32163:104;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32163:104:0;;:::i;27982:388::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27982:388:0;;;;;;;;:::i;19492:62::-;;;;;;;;;;;;;:::i;18956:83::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;18956:83:0;;;;;;;;;;;;;;19389:48;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19389:48:0;-1:-1:-1;;;;;19389:48:0;;:::i;27016:182::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27016:182:0;;;;:::i;20125:32::-;;;;;;;;;;;;;:::i;24820:279::-;;;;;;;;;;;;;:::i;32392:119::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32392:119:0;-1:-1:-1;;;;;32392:119:0;;:::i;17354:126::-;;;;;;;;;;;;;:::i;31425:75::-;;;;;;;;;;;;;:::i;30207:170::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30207:170:0;-1:-1:-1;;;;;30207:170:0;;:::i;18620:33::-;;;;;;;;;;;;;:::i;18579:34::-;;;;;;;;;;;;;:::i;20010:36::-;;;;;;;;;;;;;:::i;31332:85::-;;;;;;;;;;;;;:::i;17089:79::-;;;;;;;;;;;;;:::i;17254:92::-;;;;;;;;;;;;;:::i;18704:37::-;;;;;;;;;;;;;:::i;18234:87::-;;;;;;;;;;;;;:::i;30981:168::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30981:168:0;;:::i;27402:572::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27402:572:0;;;;;;;;:::i;30795:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30795:178:0;;;;;;;;;;:::i;19046:33::-;;;;;;;;;;;;;:::i;20099:19::-;;;;;;;;;;;;;:::i;21441:215::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21441:215:0;;;;;;;;:::i;19785:35::-;;;;;;;;;;;;;:::i;19324:58::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19324:58:0;-1:-1:-1;;;;;19324:58:0;;:::i;18871:31::-;;;;;;;;;;;;;:::i;18748:34::-;;;;;;;;;;;;;:::i;30585:202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30585:202:0;;;;;;;;;;;;;;;;;:::i;26812:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26812:196:0;;;;:::i;18831:33::-;;;;;;;;;;;;;:::i;19827:30::-;;;;;;;;;;;;;:::i;28963:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;28963:120:0;-1:-1:-1;;;;;28963:120:0;;:::i;27206:188::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27206:188:0;;;;;;;;;;:::i;31949:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31949:206:0;;;;;;;;;;:::i;19563:76::-;;;;;;;;;;;;;:::i;30385:192::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;30385:192:0;;;;;;;;;;;;;;;;;:::i;31650:291::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;31650:291:0;;;;;;;;;;:::i;18538:34::-;;;;;;;;;;;;;:::i;17488:109::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17488:109:0;-1:-1:-1;;;;;17488:109:0;;:::i;18662:35::-;;;;;;;;;;;;;:::i;29637:372::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;29637:372:0;;;;;;;;;;:::i;18791:33::-;;;;;;;;;;;;;:::i;20164:28::-;;;;;;;;;;;;;:::i;18143:83::-;18213:5;18206:12;;;;;;;;-1:-1:-1;;18206:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18180:13;;18206:12;;18213:5;;18206:12;;18213:5;18206:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18143:83;:::o;28378:189::-;28481:4;28503:34;28512:10;28523:7;28531:5;28503:8;:34::i;:::-;-1:-1:-1;28555:4:0;28378:189;;;;;:::o;18911:36::-;;;;:::o;32279:102::-;32361:12;;32279:102;:::o;29365:264::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;29515:16:::1;:25:::0;;;;29551:16:::1;:32:::0;29594:14:::1;:27:::0;29365:264::o;21664:447::-;21807:4;21794:2;-1:-1:-1;;;;;19923:18:0;;19915:27;;;;;;-1:-1:-1;;;;;21838:17:0;::::1;;::::0;;;:11:::1;:17;::::0;;;;;;;21856:10:::1;21838:29:::0;;;;;;;;-1:-1:-1;;21838:44:0::1;21834:207;;21931:98;::::0;;;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;21931:98:0::1;::::0;;::::1;::::0;;;;-1:-1:-1;;;;;21931:17:0;::::1;-1:-1:-1::0;21931:17:0;;;:11:::1;:17:::0;;;;;21967:10:::1;21931:61:::0;;;;;;;;;;:98:::1;::::0;21997:5;;21931:65:::1;:98::i;:::-;-1:-1:-1::0;;;;;21899:17:0;::::1;;::::0;;;:11:::1;:17;::::0;;;;;;;21917:10:::1;21899:29:::0;;;;;;;:130;21834:207:::1;22051:30;22065:4;22071:2;22075:5;22051:13;:30::i;:::-;-1:-1:-1::0;22099:4:0::1;::::0;21664:447;-1:-1:-1;;;;;21664:447:0:o;29091:266::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;29246:15:::1;:24:::0;;;;29281:15:::1;:31:::0;29323:13:::1;:26:::0;29091:266::o;31157:167::-;31294:9;:21;;;;19126:42;31210:7;31267:21;;;;;31250:12;;31210:7;;31250:66;;31294:21;;31250:39;;:12;:16;:39::i;:::-;:43;;:66::i;:::-;31230:86;;31157:167;:::o;30017:182::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;30126:11:::1;;;;;;;;;-1:-1:-1::0;;;;;30126:11:0::1;-1:-1:-1::0;;;;;30126:35:0::1;;30162:10;30174:16;30126:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30017:182:::0;;:::o;19446:37::-;19481:2;19446:37;:::o;31508:134::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;31571:12:::1;:37:::0;;-1:-1:-1;;;;;31571:37:0;;::::1;-1:-1:-1::0;;;;;;31571:37:0;;::::1;::::0;::::1;::::0;;;31619:4:::1;:15:::0;;;;::::1;;::::0;;31508:134::o;18329:83::-;18395:9;;;;18329:83;:::o;32163:104::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;32232::::1;:27:::0;32163:104::o;27982:388::-;28151:10;28082:4;28139:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28139:56:0;;;;;;;;;;:72;;28200:10;28139:60;:72::i;:::-;28116:10;28104:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;28104:32:0;;;;;;;;;;;;:107;;;28227:113;;;;;;28104:32;;28227:113;;;;;;;;;;;-1:-1:-1;28358:4:0;27982:388;;;;:::o;19492:62::-;;;;:::o;18956:83::-;;;-1:-1:-1;;;;;18956:83:0;;:::o;19389:48::-;;;;;;;;;;;;;;;:::o;27016:182::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;27086:5:::1;27083:108;;;27108:11;:19:::0;;-1:-1:-1;;27108:19:0::1;;::::0;::::1;;;;::::0;;27083:108:::1;;;27160:11;:19:::0;;-1:-1:-1;;27160:19:0::1;;::::0;::::1;;;;::::0;;27083:108:::1;27016:182:::0;:::o;20125:32::-;;;-1:-1:-1;;;;;20125:32:0;;:::o;24820:279::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;20260:6:::1;:13:::0;;-1:-1:-1;;;;20260:13:0::1;-1:-1:-1::0;;;20260:13:0::1;::::0;;24883:18:::2;::::0;:22;24880:63:::2;;24907:36;24924:18;;24907:16;:36::i;:::-;24958:18;::::0;:22;24955:63:::2;;24982:36;24999:18;;24982:16;:36::i;:::-;25032:16;::::0;:20;25029:62:::2;;25054:37;25074:16;;25054:19;:37::i;:::-;20296:6:::1;:14:::0;;-1:-1:-1;;;;20296:14:0::1;::::0;;24820:279::o;32392:119::-;-1:-1:-1;;;;;32485:18:0;32458:7;32485:18;;;:9;:18;;;;;;;32392:119::o;17354:126::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;17435:6:::1;::::0;17416:26:::1;::::0;17435:6:::1;::::0;;::::1;-1:-1:-1::0;;;;;17435:6:0::1;::::0;17416:26:::1;::::0;;;::::1;17453:6;:19:::0;;-1:-1:-1;;;;;;17453:19:0::1;::::0;;17354:126::o;31425:75::-;31480:4;;;;;;;;;-1:-1:-1;;;;;31480:4:0;-1:-1:-1;;;;;31467:23:0;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31425:75::o;30207:170::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;30333:36:::1;::::0;30301:21:::1;::::0;-1:-1:-1;;;;;30333:27:0;::::1;::::0;:36;::::1;;;::::0;30301:21;;30283:15:::1;30333:36:::0;30283:15;30333:36;30301:21;30333:27;:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17237:1;30207:170:::0;:::o;18620:33::-;;;;:::o;18579:34::-;;;;:::o;20010:36::-;;;-1:-1:-1;;;;;20010:36:0;;:::o;31332:85::-;31403:6;;-1:-1:-1;;;31403:6:0;;;;31402:7;;31332:85::o;17089:79::-;17154:6;;;;;-1:-1:-1;;;;;17154:6:0;;17089:79::o;17254:92::-;17332:6;;;;;-1:-1:-1;;;;;17332:6:0;17318:10;:20;;17254:92::o;18704:37::-;;;;:::o;18234:87::-;18306:7;18299:14;;;;;;;;-1:-1:-1;;18299:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18273:13;;18299:14;;18306:7;;18299:14;;18306:7;18299:14;;;;;;;;;;;;;;;;;;;;;;;;30981:168;17216:9;:7;:9::i;:::-;17208:18;;;;;;31070:6:::1;31064:3;:12;31056:54;;;::::0;;-1:-1:-1;;;31056:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;31121:14;:20:::0;30981:168::o;27402:572::-;27560:10;27507:4;27548:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27548:32:0;;;;;;;;;;27595:27;;;27591:225;;27651:10;27674:1;27639:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27639:32:0;;;;;;;;;:36;27591:225;;;27743:61;:8;27774:15;27743:12;:61::i;:::-;27720:10;27708:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27708:32:0;;;;;;;;;:96;27591:225;27854:10;27901:23;;;;:11;:23;;;;;;;;-1:-1:-1;;;;;27831:113:0;;27901:32;;;;;;;;;;;27831:113;;;;;;;;;27854:10;27831:113;;;;;;;;;;;-1:-1:-1;27962:4:0;;27402:572;-1:-1:-1;;;27402:572:0:o;30795:178::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;30887:23:::1;:36:::0;;-1:-1:-1;;;;;30887:36:0;;::::1;-1:-1:-1::0;;;;;;30887:36:0;;::::1;;::::0;;;30934:18:::1;:31:::0;;;;;::::1;::::0;::::1;;::::0;;30795:178::o;19046:33::-;;;-1:-1:-1;;;;;19046:33:0;;:::o;20099:19::-;;;-1:-1:-1;;;;;20099:19:0;;:::o;21441:215::-;21568:4;21546:2;-1:-1:-1;;;;;19923:18:0;;19915:27;;;;;;21590:36:::1;21604:10;21616:2;21620:5;21590:13;:36::i;:::-;-1:-1:-1::0;21644:4:0::1;::::0;21441:215;-1:-1:-1;;;;21441:215:0:o;19785:35::-;;;;;;:::o;19324:58::-;;;;;;;;;;;;;;;:::o;18871:31::-;;;;:::o;18748:34::-;;;;:::o;30585:202::-;30692:12;17216:9;:7;:9::i;:::-;17208:18;;;;;;30724:11:::1;::::0;:55:::1;::::0;;-1:-1:-1;;;30724:55:0;;-1:-1:-1;;;;;30724:55:0;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;;;;:11;;;::::1;::::0;;::::1;::::0;:23:::1;::::0;:55;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;30724:11:0;:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;30724:55:0;;-1:-1:-1;17237:1:0::1;30585:202:::0;;;;;:::o;26812:196::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;26886:5:::1;26883:118;;;26908:16;:24:::0;;-1:-1:-1;;26908:24:0::1;::::0;::::1;;;::::0;;26883:118:::1;;;26965:16;:24:::0;;;::::1;;-1:-1:-1::0;;26965:24:0;;::::1;;::::0;;26812:196;:::o;18831:33::-;;;;:::o;19827:30::-;;;;;;;;;:::o;28963:120::-;-1:-1:-1;;;;;29049:26:0;29025:4;29049:26;;;:19;:26;;;;;;;;;28963:120::o;27206:188::-;-1:-1:-1;;;;;27358:19:0;;;27326:7;27358:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;27206:188::o;31949:206::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;-1:-1:-1;;;;;32040:26:0;::::1;;::::0;;;:19:::1;:26;::::0;;;;;::::1;;:37;;::::0;::::1;;;;32032:68;;;::::0;;-1:-1:-1;;;32032:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;32032:68:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;32111:26:0;;;::::1;;::::0;;;:19:::1;:26;::::0;;;;:36;;-1:-1:-1;;32111:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31949:206::o;19563:76::-;;;;:::o;30385:192::-;30490:12;17216:9;:7;:9::i;:::-;17208:18;;;;;;30528:12:::1;-1:-1:-1::0;;;;;30521:29:0::1;;30551:9;30562:6;30521:48;;;;;;;;;;;;;-1:-1:-1::0;;;;;30521:48:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;31650:291:::0;17216:9;:7;:9::i;:::-;17208:18;;;;;;31741:7:::1;31738:102;;;-1:-1:-1::0;;;;;31774:32:0;::::1;;::::0;;;:25:::1;:32;::::0;;;;;::::1;;31773:33;31765:63;;;::::0;;-1:-1:-1;;;31765:63:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;31765:63:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;31850:32:0;;::::1;;::::0;;;:25:::1;:32;::::0;;;;;;;:42;;;::::1;;-1:-1:-1::0;;31850:42:0;;::::1;;::::0;;31903:16:::1;:23:::0;;;;;:30;;;;::::1;31850:42:::0;31903:30:::1;::::0;;31650:291::o;18538:34::-;;;;:::o;17488:109::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;17561:28:::1;17580:8;17561:18;:28::i;18662:35::-:0;;;;:::o;29637:372::-;17216:9;:7;:9::i;:::-;17208:18;;;;;;-1:-1:-1;;;;;29733:23:0;::::1;29751:4;29733:23;::::0;::::1;::::0;:61:::1;;-1:-1:-1::0;;;;;;29761:33:0;::::1;;::::0;;;:25:::1;:33;::::0;;;;;::::1;;29760:34;29733:61;29725:70;;;::::0;::::1;;-1:-1:-1::0;;;;;29806:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29806:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;29852:150:::1;;29879:11;::::0;:31:::1;::::0;;-1:-1:-1;;;29879:31:0;;-1:-1:-1;;;;;29879:31:0;;::::1;;::::0;::::1;::::0;29908:1:::1;29879:31:::0;;;;;;;;:11;;;::::1;;::::0;:20:::1;::::0;:31;;;;;29908:1;;29879:31;;;;;;29908:1;29879:11;:31;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;29852:150;;;29943:11;::::0;;;::::1;-1:-1:-1::0;;;;;29943:11:0::1;:20;29964:6:::0;29972:17:::1;29964:6:::0;29972:9:::1;:17::i;:::-;29943:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;29943:47:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;29852:150;29637:372:::0;;:::o;18791:33::-;;;;:::o;20164:28::-;;;-1:-1:-1;;;;;20164:28:0;;:::o;1795:250::-;1853:7;1877:6;1873:47;;-1:-1:-1;1907:1:0;1900:8;;1873:47;1944:5;;;1948:1;1944;:5;:1;1968:5;;;;;:10;1960:56;;;;-1:-1:-1;;;1960:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2053:132;2111:7;2138:39;2142:1;2145;2138:39;;;;;;;;;;;;;;;;;:3;:39::i;28575:380::-;-1:-1:-1;;;;;28711:19:0;;28703:68;;;;-1:-1:-1;;;28703:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28790:21:0;;28782:68;;;;-1:-1:-1;;;28782:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28863:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28915:32;;;;;;;;;;;;;;;;;28575:380;;;:::o;1561:226::-;1681:7;1717:12;1709:6;;;;1701:29;;;;-1:-1:-1;;;1701:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1753:5:0;;;1561:226::o;22389:1054::-;22540:6;;22515:4;;-1:-1:-1;;;22540:6:0;;;;22536:87;;;22570:41;22585:6;22593:9;22604:6;22570:14;:41::i;:::-;22563:48;;;;22536:87;22639:20;:18;:20::i;:::-;22635:67;;;22676:14;:12;:14::i;:::-;22718:16;:14;:16::i;:::-;22714:59;;;22751:10;:8;:10::i;:::-;-1:-1:-1;;;;;22813:17:0;;;;;;:9;:17;;;;;;:29;;22835:6;22813:21;:29::i;:::-;-1:-1:-1;;;;;22793:17:0;;;;;;:9;:17;;;;;:49;;;;22888:32;22803:6;22910:9;22888:13;:32::i;:::-;:104;;22986:6;22888:104;;;22936:34;22944:6;22952:9;22963:6;22936:7;:34::i;:::-;-1:-1:-1;;;;;23028:20:0;;;;;;:9;:20;;;;;;22863:129;;-1:-1:-1;23028:40:0;;22863:129;23028:24;:40::i;:::-;-1:-1:-1;;;;;23005:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;23085:24;;;;;:16;:24;;;;;;;23081:96;;23116:11;;;;;-1:-1:-1;;;;;23116:11:0;:20;23137:6;23145:17;23137:6;23145:9;:17::i;:::-;23116:47;;;;;;;;;;;;;-1:-1:-1;;;;;23116:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23112:63;;-1:-1:-1;;;;;23191:27:0;;;;;;:16;:27;;;;;;;;23187:105;;23225:11;;;;;-1:-1:-1;;;;;23225:11:0;:20;23246:9;23257:20;23246:9;23257;:20::i;:::-;23225:53;;;;;;;;;;;;;-1:-1:-1;;;;;23225:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23221:69;;23308:11;;;;;;;;;-1:-1:-1;;;;;23308:11:0;-1:-1:-1;;;;;23308:19:0;;23328:14;;23308:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23304:51;23388:9;-1:-1:-1;;;;;23372:41:0;23381:6;-1:-1:-1;;;;;23372:41:0;;23398:14;23372:41;;;;;;;;;;;;;;;;;;-1:-1:-1;23431:4:0;;22389:1054;-1:-1:-1;;;;22389:1054:0:o;1417:136::-;1475:7;1502:43;1506:1;1509;1502:43;;;;;;;;;;;;;;;;;:3;:43::i;1228:181::-;1286:7;1318:5;;;1342:6;;;;1334:46;;;;;-1:-1:-1;;;1334:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;32876:431;32947:18;;32935:9;;32947:25;;32970:1;32947:22;:25::i;:::-;32935:37;;32983:14;33000:28;33023:4;33000:18;;:22;;:28;;;;:::i;:::-;32983:45;-1:-1:-1;33060:21:0;33092:22;33109:4;33092:16;:22::i;:::-;33125:19;33147:40;:21;33173:13;33147:25;:40::i;:::-;33219:18;;33125:62;;-1:-1:-1;33219:31:0;;33242:7;33219:22;:31::i;:::-;33198:18;:52;33261:38;33274:9;33284:14;33261:12;:38::i;:::-;32876:431;;;;;:::o;32519:349::-;32599:21;32631:25;32648:7;32631:16;:25::i;:::-;32667:19;32689:40;:21;32715:13;32689:25;:40::i;:::-;32761:18;;32667:62;;-1:-1:-1;32761:31:0;;32784:7;32761:22;:31::i;:::-;32740:18;:52;32811:23;;32803:57;;-1:-1:-1;;;;;32811:23:0;;;;32803:57;;;;;32845:14;;32811:23;32803:57;32811:23;32803:57;32845:14;32811:23;32803:57;;;;;;;;;;;;;;;;;;;25527:363;25614:21;25646:25;25663:7;25646:16;:25::i;:::-;25682:20;25705:41;:21;25731:14;25705:25;:41::i;:::-;25776:16;;25682:64;;-1:-1:-1;25776:29:0;;25797:7;25776:20;:29::i;:::-;25757:16;:48;;;;25820:11;;;;;;;;;-1:-1:-1;;;;;25820:11:0;-1:-1:-1;;;;;25820:19:0;;25849:15;25820:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25816:65;;;;17605:187;-1:-1:-1;;;;;17679:22:0;;17671:31;;;;;;17739:6;;17718:38;;-1:-1:-1;;;;;17718:38:0;;;;17739:6;;;;;17718:38;;;;;17767:6;:17;;-1:-1:-1;;;;;17767:17:0;;;;;-1:-1:-1;;;;;;17767:17:0;;;;;;;;;17605:187::o;2193:225::-;2313:7;2348:12;2341:5;2333:28;;;;-1:-1:-1;;;2333:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2372:9;2388:1;2384;:5;;;;;;;2193:225;-1:-1:-1;;;;;2193:225:0:o;22119:262::-;-1:-1:-1;;;;;22272:15:0;;22237:4;22272:15;;;:9;:15;;;;;;:27;;22292:6;22272:19;:27::i;:::-;-1:-1:-1;;;;;22254:15:0;;;;;;;:9;:15;;;;;;:45;;;;22326:13;;;;;;;:25;;22344:6;22326:17;:25::i;:::-;-1:-1:-1;;;;;22310:13:0;;;;;;:9;:13;;;;;:41;-1:-1:-1;22369:4:0;22119:262;;;;;:::o;26251:357::-;26304:4;26323:28;26354:24;26372:4;26354:9;:24::i;:::-;26428:18;;26479:16;;26323:55;;-1:-1:-1;26404:42:0;;;;26479:16;;:41;;;;-1:-1:-1;26514:6:0;;-1:-1:-1;;;26514:6:0;;;;26513:7;26479:41;:66;;;;;26538:7;26479:66;:121;;;;-1:-1:-1;26589:10:0;26563:37;;;;:25;:37;;;;;;;;26562:38;26479:121;26459:141;;;;26251:357;:::o;25107:254::-;20260:6;:13;;-1:-1:-1;;;;20260:13:0;-1:-1:-1;;;20260:13:0;;;25165:18:::1;::::0;:22;25162:89:::1;;25203:36;25220:18;;25203:16;:36::i;:::-;25266:18;::::0;:22;25263:89:::1;;25304:36;25321:18;;25304:16;:36::i;26616:186::-:0;26703:11;;26665:4;;26703:11;;;;;:35;;;;-1:-1:-1;26732:6:0;;-1:-1:-1;;;26732:6:0;;;;26731:7;26703:35;:90;;;;-1:-1:-1;;26782:10:0;26756:37;;;;:25;:37;;;;;;;;26755:38;;26616:186::o;25369:150::-;20260:6;:13;;-1:-1:-1;;;;20260:13:0;-1:-1:-1;;;20260:13:0;;;25421:16:::1;::::0;:20;25418:88:::1;;25457:37;25477:16;;25457:19;:37::i;25898:345::-:0;-1:-1:-1;;;;;26022:25:0;;25997:4;26022:25;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;26051:23:0;;;;;;:19;:23;;;;;;;;26022:52;26019:217;;;-1:-1:-1;26097:5:0;26090:12;;26019:217;-1:-1:-1;;;;;26159:31:0;;;;;;:25;:31;;;;;;;;;:64;;-1:-1:-1;;;;;;26194:29:0;;;;;;:25;:29;;;;;;;;26159:64;26151:73;;;;23451:1361;-1:-1:-1;;;;;23695:33:0;;23572:7;23695:33;;;:25;:33;;;;;;23572:7;;;;;;;;23695:33;;23692:887;;;23753:47;23785:14;;23753:27;23764:15;;23753:6;:10;;:27;;;;:::i;:::-;:31;;:47::i;:::-;23815:18;:26;;;;;;23895:14;;23874:15;;23746:54;;-1:-1:-1;23863:47:0;;:27;;:6;;:10;:27::i;:47::-;23925:18;:26;;;;;;24003:14;;23984:13;;23856:54;;-1:-1:-1;23973:45:0;;:25;;:6;;:10;:25::i;:45::-;24033:16;:24;;;;;;23966:52;-1:-1:-1;24086:24:0;23966:52;24086:14;:4;24095;24086:8;:14::i;:::-;:18;;:24::i;:::-;24074:36;;23692:887;;;-1:-1:-1;;;;;24140:36:0;;;;;;:25;:36;;;;;;;;24137:442;;;24201:48;24234:14;;24201:28;24212:16;;24201:6;:10;;:28;;;;:::i;:48::-;24264:18;:26;;;;;;24345:14;;24323:16;;24194:55;;-1:-1:-1;24312:48:0;;:28;;:6;;:10;:28::i;:48::-;24375:18;:26;;;;;;24454:14;;24434;;24305:55;;-1:-1:-1;24423:46:0;;:26;;:6;;:10;:26::i;:46::-;24484:16;:24;;;;;;24416:53;-1:-1:-1;24537:24:0;24416:53;24537:14;:4;24546;24537:8;:14::i;:24::-;24525:36;;24137:442;24594:13;;24591:173;;24669:4;24651:24;;;;:9;:24;;;;;;:39;;24680:9;24651:28;:39::i;:::-;24642:4;24624:24;;;;:9;:24;;;;;;;;;:66;;;;24710:42;;;;;;;24642:4;;-1:-1:-1;;;;;24710:42:0;;;;;;;;;;;;;24591:173;24783:21;:6;24794:9;24783:10;:21::i;:::-;24776:28;23451:1361;-1:-1:-1;;;;;;;;23451:1361:0:o;33829:564::-;33979:16;;;33993:1;33979:16;;;33955:21;33979:16;;;;;33955:21;33979:16;;;;;;;;;;-1:-1:-1;33979:16:0;33955:40;;34024:4;34006;34011:1;34006:7;;;;;;;;-1:-1:-1;;;;;34006:23:0;;;:7;;;;;;;;;;:23;;;;34050:6;;:13;;;-1:-1:-1;;;34050:13:0;;;;:6;;;;;:11;;:13;;;;;34006:7;;34050:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;34050:13:0;34040:7;;:4;;34045:1;;34040:7;;;;;;-1:-1:-1;;;;;34040:23:0;;;:7;;;;;;;;;:23;34108:6;;34076:53;;34093:4;;34108:6;34117:11;34076:8;:53::i;:::-;34168:6;;:215;;-1:-1:-1;;;34168:215:0;;;;;;;;:6;:215;;;;;;34337:4;34168:215;;;;;;34357:15;34168:215;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;34168:6:0;;;;:57;;34240:11;;34310:4;;34337;34357:15;34168:215;;;;;;;;;;;;;;;;:6;:215;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33315:506;33495:6;;33463:53;;33480:4;;-1:-1:-1;;;;;33495:6:0;33504:11;33463:8;:53::i;:::-;33557:6;;33752:18;;33557:254;;;-1:-1:-1;;;33557:254:0;;33620:4;33557:254;;;;;;;;;;:6;:254;;;;;;;;;;-1:-1:-1;;;;;33752:18:0;;;33557:254;;;;33785:15;33557:254;;;;;;:6;;;;;:22;;33587:9;;33557:254;;;;;;;;;;;;;;;33587:9;33557:6;:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Swarm Source
ipfs://fbdad5509790114ddfe42c4959af71bf00c390cb17df8f1cc179561ef2a22e41
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $2,109.08 | 0.000000000297 | $0.000001 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.