ETH Price: $2,445.56 (-0.97%)

Contract

0xe4491A27A80d38B946DA52CF8A1129D059C7D277
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve182253222023-09-27 6:29:59382 days ago1695796199IN
0xe4491A27...059C7D277
0 ETH0.000303666.55970364
Approve177184972023-07-18 7:01:47453 days ago1689663707IN
0xe4491A27...059C7D277
0 ETH0.0006785114.67256957
Approve171198602023-04-25 0:58:11537 days ago1682384291IN
0xe4491A27...059C7D277
0 ETH0.0015976434.28138112
Approve170729292023-04-18 10:17:59544 days ago1681813079IN
0xe4491A27...059C7D277
0 ETH0.0016646535.76529526
Approve170365202023-04-13 4:53:23549 days ago1681361603IN
0xe4491A27...059C7D277
0 ETH0.0012675327.23294747
Approve170363252023-04-13 4:08:11549 days ago1681358891IN
0xe4491A27...059C7D277
0 ETH0.0010835723.28064799
Approve170359112023-04-13 2:33:11549 days ago1681353191IN
0xe4491A27...059C7D277
0 ETH0.0015240332.74393426
Approve170354162023-04-13 0:37:23549 days ago1681346243IN
0xe4491A27...059C7D277
0 ETH0.0011205124.0742277
Approve170352182023-04-12 23:50:59549 days ago1681343459IN
0xe4491A27...059C7D277
0 ETH0.0010490622.53928293
Approve170350762023-04-12 23:17:23549 days ago1681341443IN
0xe4491A27...059C7D277
0 ETH0.0014369330.83278927
Approve170338162023-04-12 18:53:23549 days ago1681325603IN
0xe4491A27...059C7D277
0 ETH0.0015212232.90417186
Approve170335072023-04-12 17:50:23550 days ago1681321823IN
0xe4491A27...059C7D277
0 ETH0.0014204130.51767453
Approve170333862023-04-12 17:25:47550 days ago1681320347IN
0xe4491A27...059C7D277
0 ETH0.000977121.1402829
Approve170333752023-04-12 17:23:35550 days ago1681320215IN
0xe4491A27...059C7D277
0 ETH0.0010378322.29792311
Approve170331412023-04-12 16:35:23550 days ago1681317323IN
0xe4491A27...059C7D277
0 ETH0.0007357725.25649923
Approve170331252023-04-12 16:32:11550 days ago1681317131IN
0xe4491A27...059C7D277
0 ETH0.0010395322.48521842
Approve170330752023-04-12 16:21:59550 days ago1681316519IN
0xe4491A27...059C7D277
0 ETH0.0007121124.45440933
Approve170330092023-04-12 16:08:35550 days ago1681315715IN
0xe4491A27...059C7D277
0 ETH0.0009599432.95157707
Approve170329842023-04-12 16:03:35550 days ago1681315415IN
0xe4491A27...059C7D277
0 ETH0.0024518953.03455632
Approve170329672023-04-12 16:00:11550 days ago1681315211IN
0xe4491A27...059C7D277
0 ETH0.0012899727.7151361
Approve170329672023-04-12 16:00:11550 days ago1681315211IN
0xe4491A27...059C7D277
0 ETH0.0008073927.7151361
Approve170329632023-04-12 15:59:23550 days ago1681315163IN
0xe4491A27...059C7D277
0 ETH0.0007061324.23922036
Approve170329552023-04-12 15:57:47550 days ago1681315067IN
0xe4491A27...059C7D277
0 ETH0.0011865525.67187208
Approve170329492023-04-12 15:56:35550 days ago1681314995IN
0xe4491A27...059C7D277
0 ETH0.0011881525.66655445
Approve170328092023-04-12 15:28:11550 days ago1681313291IN
0xe4491A27...059C7D277
0 ETH0.0013120328.15286339
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
171198672023-04-25 0:59:35537 days ago1682384375
0xe4491A27...059C7D277
0.00226196 ETH
171198672023-04-25 0:59:35537 days ago1682384375
0xe4491A27...059C7D277
0.00225071 ETH
171198672023-04-25 0:59:35537 days ago1682384375
0xe4491A27...059C7D277
0.00451267 ETH
170363312023-04-13 4:09:23549 days ago1681358963
0xe4491A27...059C7D277
0.00249977 ETH
170363312023-04-13 4:09:23549 days ago1681358963
0xe4491A27...059C7D277
0.00248734 ETH
170363312023-04-13 4:09:23549 days ago1681358963
0xe4491A27...059C7D277
0.00498712 ETH
170348402023-04-12 22:21:35549 days ago1681338095
0xe4491A27...059C7D277
0.00284527 ETH
170348402023-04-12 22:21:35549 days ago1681338095
0xe4491A27...059C7D277
0.00283112 ETH
170348402023-04-12 22:21:35549 days ago1681338095
0xe4491A27...059C7D277
0.0056764 ETH
170335092023-04-12 17:50:47550 days ago1681321847
0xe4491A27...059C7D277
0.00315122 ETH
170335092023-04-12 17:50:47550 days ago1681321847
0xe4491A27...059C7D277
0.00313554 ETH
170335092023-04-12 17:50:47550 days ago1681321847
0xe4491A27...059C7D277
0.00628677 ETH
170333792023-04-12 17:24:23550 days ago1681320263
0xe4491A27...059C7D277
0.00328885 ETH
170333792023-04-12 17:24:23550 days ago1681320263
0xe4491A27...059C7D277
0.00327249 ETH
170333792023-04-12 17:24:23550 days ago1681320263
0xe4491A27...059C7D277
0.00656135 ETH
170330722023-04-12 16:21:23550 days ago1681316483
0xe4491A27...059C7D277
0.00308704 ETH
170330722023-04-12 16:21:23550 days ago1681316483
0xe4491A27...059C7D277
0.00307168 ETH
170330722023-04-12 16:21:23550 days ago1681316483
0xe4491A27...059C7D277
0.00615872 ETH
170330582023-04-12 16:18:23550 days ago1681316303
0xe4491A27...059C7D277
0.00342303 ETH
170330582023-04-12 16:18:23550 days ago1681316303
0xe4491A27...059C7D277
0.003406 ETH
170330582023-04-12 16:18:23550 days ago1681316303
0xe4491A27...059C7D277
0.00682904 ETH
170330042023-04-12 16:07:35550 days ago1681315655
0xe4491A27...059C7D277
0.00386798 ETH
170330042023-04-12 16:07:35550 days ago1681315655
0xe4491A27...059C7D277
0.00384874 ETH
170330042023-04-12 16:07:35550 days ago1681315655
0xe4491A27...059C7D277
0.00771673 ETH
170328642023-04-12 15:39:11550 days ago1681313951
0xe4491A27...059C7D277
0.00447331 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FloorBuilder

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-12
*/

/**
 *  https://t.me/FloorBuilder
    https://twitter.com/FloorBuilderETH
    https://floorbuildercoin.com/
*/

/**

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b <= a, errorMessage); return a - b;}}

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a % b;}}}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);}

abstract contract Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface stakeIntegration {
    function stakingWithdraw(address depositor, uint256 _amount) external;
    function stakingDeposit(address depositor, uint256 _amount) external;
}

interface tokenStaking {
    function deposit(uint256 amount) external;
    function withdraw(uint256 amount) external;
}

interface IFactory{
    function createPair(address tokenA, address tokenB) external returns (address pair);
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}

contract FloorBuilder is IERC20, tokenStaking, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Floor Builder';
    string private constant _symbol = 'BUILDR';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000 * (10 ** _decimals);
    uint256 public _maxTxAmount = ( _totalSupply * 150 ) / 10000;
    uint256 public _maxSellAmount = ( _totalSupply * 150 ) / 10000;
    uint256 public _maxWalletToken = ( _totalSupply * 150 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping(address => bool) private isFeeExempt;
    IRouter router;
    address public pair;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 200;
    uint256 private developmentFee = 200;
    uint256 private stakingFee = 0;
    uint256 private tokenFee = 0;
    uint256 private totalFee = 2000;
    uint256 private sellFee = 4000;
    uint256 private transferFee = 4000;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    bool private tradingAllowed = false;
    bool public PriceGuard = true;
    uint256 public PriceGuardSells;
    uint256 public PriceGuardTrigger = 3;
    bool public PriceGuardBuyNeeded = false;
    uint256 private swapTimes;
    bool private swapping;
    uint256 private swapAmount = 3;
    uint256 private swapThreshold = ( _totalSupply * 500 ) / 100000;
    uint256 private minTokenAmount = ( _totalSupply * 10 ) / 100000;
    uint256 public PriceGuardMinAmount = 1;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    mapping(address => uint256) public amountStaked;
    uint256 public totalStaked;
    stakeIntegration internal stakingContract;
    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal development_receiver = 0xCF740d23005A67122daf6889ECe5b9C3F4A0daeb; 
    address internal marketing_receiver = 0xeA090BD9DBeCA6e6b2B34410dD07463162E18C28;
    address internal liquidity_receiver = 0xCF740d23005A67122daf6889ECe5b9C3F4A0daeb;
    address internal staking_receiver = 0xCF740d23005A67122daf6889ECe5b9C3F4A0daeb;
    address internal token_receiver = 0x000000000000000000000000000000000000dEaD;
    
    event Deposit(address indexed account, uint256 indexed amount, uint256 indexed timestamp);
    event Withdraw(address indexed account, uint256 indexed amount, uint256 indexed timestamp);
    event SetStakingAddress(address indexed stakingAddress, uint256 indexed timestamp);
    event TradingEnabled(address indexed account, uint256 indexed timestamp);
    event ExcludeFromFees(address indexed account, bool indexed isExcluded, uint256 indexed timestamp);
    event SetDividendExempt(address indexed account, bool indexed isExempt, uint256 indexed timestamp);
    event Launch(uint256 indexed whitelistTime, bool indexed whitelistAllowed, uint256 indexed timestamp);
    event SetInternalAddresses(address indexed marketing, address indexed liquidity, address indexed development, uint256 timestamp);
    event SetSwapBackSettings(uint256 indexed swapAmount, uint256 indexed swapThreshold, uint256 indexed swapMinAmount, uint256 timestamp);
    event SetDistributionCriteria(uint256 indexed minPeriod, uint256 indexed minDistribution, uint256 indexed distributorGas, uint256 timestamp);
    event SetParameters(uint256 indexed maxTxAmount, uint256 indexed maxWalletToken, uint256 indexed maxTransfer, uint256 timestamp);
    event SetStructure(uint256 indexed total, uint256 indexed sell, uint256 transfer, uint256 indexed timestamp);
    event CreateLiquidity(uint256 indexed tokenAmount, uint256 indexed ETHAmount, address indexed wallet, uint256 timestamp);

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[development_receiver] = true;
        isFeeExempt[address(DEAD)] = true;
        isFeeExempt[msg.sender] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function availableBalance(address wallet) public view returns (uint256) {return _balances[wallet].sub(amountStaked[wallet]);}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount <= balanceOf(sender),"ERC20: below available balance threshold");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkTxLimit(sender, recipient, amount);
        checkMaxWallet(sender, recipient, amount);
        checkPriceGuard(sender, recipient, amount);
        swapbackCounters(sender, recipient, amount);
        swapBack(sender, recipient);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
    }

    function deposit(uint256 amount) override external {
        require(amount <= _balances[msg.sender].sub(amountStaked[msg.sender]), "ERC20: Cannot stake more than available balance");
        stakingContract.stakingDeposit(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].add(amount);
        totalStaked = totalStaked.add(amount);
        emit Deposit(msg.sender, amount, block.timestamp);
    }

    function withdraw(uint256 amount) override external {
        require(amount <= amountStaked[msg.sender], "ERC20: Cannot unstake more than amount staked");
        stakingContract.stakingWithdraw(msg.sender, amount);
        amountStaked[msg.sender] = amountStaked[msg.sender].sub(amount);
        totalStaked = totalStaked.sub(amount);
        emit Withdraw(msg.sender, amount, block.timestamp);
    }

    function setStakingAddress(address _staking) external onlyOwner {
        stakingContract = stakeIntegration(_staking); isFeeExempt[_staking] = true;
        emit SetStakingAddress(_staking, block.timestamp);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _token, uint256 _development, uint256 _staking, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity; marketingFee = _marketing; tokenFee = _token; stakingFee = _staking;
        developmentFee = _development; totalFee = _total; sellFee = _sell; transferFee = _trans;
        require(totalFee <= denominator.div(5) && sellFee <= denominator.div(5) && transferFee <= denominator.div(5), "ERC20: fees cannot be more than 20%");
        emit SetStructure(_total, _sell, _trans, block.timestamp);
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = (totalSupply().mul(_buy)).div(uint256(10000)); uint256 newTransfer = (totalSupply().mul(_trans)).div(uint256(10000));
        uint256 newWallet = (totalSupply().mul(_wallet)).div(uint256(10000)); uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "ERC20: max TXs and max Wallet cannot be less than .5%");
        _maxTxAmount = newTx; _maxSellAmount = newTransfer; _maxWalletToken = newWallet;
        emit SetParameters(newTx, newWallet, newTransfer, block.timestamp);
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "ERC20: Trading is not allowed");}
    }

    function checkPriceGuard(address sender, address recipient, uint256 amount) internal {
        if(PriceGuard && !swapping){ 
        if(recipient == pair && !isFeeExempt[sender]){PriceGuardSells = PriceGuardSells.add(uint256(1));}
        if(sender == pair && !isFeeExempt[recipient] && amount >= PriceGuardMinAmount){PriceGuardSells = uint256(0);}
        if(PriceGuardSells > PriceGuardTrigger){PriceGuardBuyNeeded = true;}
        if(PriceGuardBuyNeeded && !isFeeExempt[recipient] && !isFeeExempt[sender]){
            require(sender == pair, "ERC20: PriceGuard purchase required"); if(amount >= PriceGuardMinAmount){PriceGuardSells = uint256(0); PriceGuardBuyNeeded = false;}}}
    }

    function setPriceGuard(bool enabled, uint256 trigger, uint256 minAmount) external onlyOwner {
        PriceGuard = enabled; PriceGuardTrigger = trigger; PriceGuardMinAmount = minAmount;
    }

    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "ERC20: exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient, uint256 amount) internal {
        if(recipient == pair && !isFeeExempt[sender] && amount >= minTokenAmount){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(amountStaked[sender] > uint256(0)){require((amount.add(amountStaked[sender])) <= _balances[sender], "ERC20: exceeds maximum allowed not currently staked.");}
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "ERC20: tx limit exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "ERC20: tx limit exceeded");
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(stakingFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith, liquidity_receiver); }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 stakingAmount = unitBalance.mul(2).mul(stakingFee);
        if(stakingAmount > 0){payable(staking_receiver).transfer(stakingAmount);}
        if(address(this).balance > uint256(0)){payable(development_receiver).transfer(address(this).balance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount, address receiver) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            address(receiver),
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient) internal view returns (bool) {
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && !isFeeExempt[sender] 
            && recipient == pair && swapTimes >= swapAmount && aboveThreshold;
    }

    function swapBack(address sender, address recipient) internal {
        if(shouldSwapBack(sender, recipient)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }
    
    function startTrading() external onlyOwner {
        tradingAllowed = true;
        emit TradingEnabled(msg.sender, block.timestamp);
    }

    function setInternalAddresses(address _marketing, address _liquidity, address _development, address _staking, address _token) external onlyOwner {
        marketing_receiver = _marketing; liquidity_receiver = _liquidity; development_receiver = _development; staking_receiver = _staking; token_receiver = _token;
        isFeeExempt[_marketing] = true; isFeeExempt[_liquidity] = true; isFeeExempt[_staking] = true; isFeeExempt[_token] = true;
        emit SetInternalAddresses(_marketing, _liquidity, _development, block.timestamp);
    }

    function setisExempt(address _address, bool _enabled) external onlyOwner {
        isFeeExempt[_address] = _enabled;
        emit ExcludeFromFees(_address, _enabled, block.timestamp);
    }

    function rescueERC20(address _address, uint256 _amount) external {
        IERC20(_address).transfer(development_receiver, _amount);
    }

    function setSwapbackSettings(uint256 _swapAmount, uint256 _swapThreshold, uint256 _minTokenAmount) external onlyOwner {
        swapAmount = _swapAmount; swapThreshold = _totalSupply.mul(_swapThreshold).div(uint256(100000)); 
        minTokenAmount = _totalSupply.mul(_minTokenAmount).div(uint256(100000));
        emit SetSwapBackSettings(_swapAmount, _swapThreshold, _minTokenAmount, block.timestamp);  
    }

    function shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(tokenFee > uint256(0)){_transfer(address(this), address(token_receiver), amount.div(denominator).mul(tokenFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        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);
    }
}

Contract Security Audit

Contract ABI

[{"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":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"ETHAmount","type":"uint256"},{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"CreateLiquidity","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExcluded","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"whitelistTime","type":"uint256"},{"indexed":true,"internalType":"bool","name":"whitelistAllowed","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Launch","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"minPeriod","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"minDistribution","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"distributorGas","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDistributionCriteria","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"isExempt","type":"bool"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetDividendExempt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"marketing","type":"address"},{"indexed":true,"internalType":"address","name":"liquidity","type":"address"},{"indexed":true,"internalType":"address","name":"development","type":"address"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetInternalAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"maxTxAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxWalletToken","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"maxTransfer","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetParameters","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"stakingAddress","type":"address"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStakingAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"total","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"transfer","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetStructure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"swapAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapThreshold","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"swapMinAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"SetSwapBackSettings","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"PriceGuard","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PriceGuardBuyNeeded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PriceGuardMinAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PriceGuardSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PriceGuardTrigger","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","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":"","type":"address"}],"name":"amountStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"availableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_development","type":"address"},{"internalType":"address","name":"_staking","type":"address"},{"internalType":"address","name":"_token","type":"address"}],"name":"setInternalAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"trigger","type":"uint256"},{"internalType":"uint256","name":"minAmount","type":"uint256"}],"name":"setPriceGuard","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_staking","type":"address"}],"name":"setStakingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_token","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_staking","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"},{"internalType":"uint256","name":"_swapThreshold","type":"uint256"},{"internalType":"uint256","name":"_minTokenAmount","type":"uint256"}],"name":"setSwapbackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000126009600a6200053e565b6200002190620f424062000556565b600155612710600154609662000038919062000556565b62000044919062000570565b60025561271060015460966200005b919062000556565b62000067919062000570565b60035561271060015460966200007e919062000556565b6200008a919062000570565b6004556000600a81905560c8600b819055600c55600d819055600e556107d0600f55610fa060108190556011556127106012556013805462ffffff191662010001179055600360158190556016805460ff19169055601955600154620186a090620000f8906101f462000556565b62000104919062000570565b601a55620186a0600154600a6200011c919062000556565b62000128919062000570565b601b556001601c55602080546001600160a01b031990811673cf740d23005a67122daf6889ece5b9c3f4a0daeb90811790925560218054821673ea090bd9dbeca6e6b2b34410dd07463162e18c28179055602280548216831790556023805482169092179091556024805490911661dead179055348015620001a957600080fd5b50600080546001600160a01b031916331781556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d9291839163c45a0155916004808201926020929091908290030181865afa15801562000211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000237919062000593565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000285573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ab919062000593565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031f919062000593565b600880546001600160a01b038581166001600160a01b031992831617909255600980548484169216919091179055306000908152600760209081526040808320805460ff1990811660019081179092556022548616855282852080548216831790556021548616855282852080548216831790558354909516845281842080548616821790557fb0c2646e02af70b79e3fe9277b98373379f54150e4e26b2b5650139f7a75a65d8054861682179055338085528285208054909616821790955554600583528184208190559051908152939450919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050620005be565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200048057816000190482111562000464576200046462000429565b808516156200047257918102915b93841c939080029062000444565b509250929050565b600082620004995750600162000538565b81620004a85750600062000538565b8160018114620004c15760028114620004cc57620004ec565b600191505062000538565b60ff841115620004e057620004e062000429565b50506001821b62000538565b5060208310610133831016604e8410600b841016171562000511575081810a62000538565b6200051d83836200043f565b806000190482111562000534576200053462000429565b0290505b92915050565b60006200054f60ff84168362000488565b9392505050565b808202811582820484141762000538576200053862000429565b6000826200058e57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620005a657600080fd5b81516001600160a01b03811681146200054f57600080fd5b61263780620005ce6000396000f3fe6080604052600436106102135760003560e01c8063817b1cd211610118578063b6b55f25116100a0578063ef40a6701161006f578063ef40a6701461064c578063f2fde38b14610679578063f49166fc14610699578063f4c98ce2146106b9578063f4e0d9ac146106cf57600080fd5b8063b6b55f25146105a6578063dd62ed3e146105c6578063e2d6f94c1461060c578063e94dd17c1461062c57600080fd5b806395d89b41116100e757806395d89b41146104f75780639fb05d3714610526578063a0821be314610546578063a8aa1b3114610566578063a9059cbb1461058657600080fd5b8063817b1cd21461047a578063893d20e8146104905780638cd4426d146104c25780639358928b146104e257600080fd5b80632e3182e01161019b57806348ff2b8b1161016a57806348ff2b8b146103e257806370a082311461040257806378109e54146104385780637cca52fe1461044e5780637d1db4a51461046457600080fd5b80632e3182e0146103615780632f54bf6e14610377578063313ce567146103a657806334c5d2ce146103c257600080fd5b806318160ddd116101e257806318160ddd146102db5780631ba8f3ef146102f057806323b872dd1461030a578063293230b81461032a5780632e1a7d4d1461034157600080fd5b806306fdde031461021f578063095ea7b3146102675780630b340dff146102975780630bfabbf3146102bb57600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5060408051808201909152600d81526c233637b7b910213ab4b63232b960991b60208201525b60405161025e91906121b0565b60405180910390f35b34801561027357600080fd5b50610287610282366004612216565b6106ef565b604051901515815260200161025e565b3480156102a357600080fd5b506102ad60145481565b60405190815260200161025e565b3480156102c757600080fd5b506013546102879062010000900460ff1681565b3480156102e757600080fd5b506001546102ad565b3480156102fc57600080fd5b506016546102879060ff1681565b34801561031657600080fd5b50610287610325366004612242565b610706565b34801561033657600080fd5b5061033f610770565b005b34801561034d57600080fd5b5061033f61035c366004612283565b6107e1565b34801561036d57600080fd5b506102ad60155481565b34801561038357600080fd5b5061028761039236600461229c565b6000546001600160a01b0391821691161490565b3480156103b257600080fd5b506040516009815260200161025e565b3480156103ce57600080fd5b5061033f6103dd3660046122b9565b610927565b3480156103ee57600080fd5b5061033f6103fd3660046122f3565b610a91565b34801561040e57600080fd5b506102ad61041d36600461229c565b6001600160a01b031660009081526005602052604090205490565b34801561044457600080fd5b506102ad60045481565b34801561045a57600080fd5b506102ad60035481565b34801561047057600080fd5b506102ad60025481565b34801561048657600080fd5b506102ad601e5481565b34801561049c57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161025e565b3480156104ce57600080fd5b5061033f6104dd366004612216565b610b10565b3480156104ee57600080fd5b506102ad610b8c565b34801561050357600080fd5b50604080518082019091526006815265212aa4a6222960d11b6020820152610251565b34801561053257600080fd5b5061033f61054136600461232c565b610bfd565b34801561055257600080fd5b506102ad61056136600461229c565b610d0b565b34801561057257600080fd5b506009546104aa906001600160a01b031681565b34801561059257600080fd5b506102876105a1366004612216565b610d38565b3480156105b257600080fd5b5061033f6105c1366004612283565b610d45565b3480156105d257600080fd5b506102ad6105e136600461239d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561061857600080fd5b5061033f6106273660046123cb565b610ea2565b34801561063857600080fd5b5061033f6106473660046122b9565b610fdb565b34801561065857600080fd5b506102ad61066736600461229c565b601d6020526000908152604090205481565b34801561068557600080fd5b5061033f61069436600461229c565b61107a565b3480156106a557600080fd5b5061033f6106b4366004612420565b6110f8565b3480156106c557600080fd5b506102ad601c5481565b3480156106db57600080fd5b5061033f6106ea36600461229c565b611145565b60006106fc3384846111d1565b5060015b92915050565b60006107138484846112f5565b6107658433610760856040518060600160405280602881526020016125da602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611426565b6111d1565b5060015b9392505050565b6000546001600160a01b031633146107a35760405162461bcd60e51b815260040161079a90612455565b60405180910390fd5b6013805461ff001916610100179055604051429033907f340c369ced7c3a65b67543c4f1e839173c42d01b38931b0c01b18c89a1d1ba4b90600090a3565b336000908152601d60205260409020548111156108565760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b606482015260840161079a565b601f5460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b1580156108a257600080fd5b505af11580156108b6573d6000803e3d6000fd5b5050336000908152601d60205260409020546108d59250905082611452565b336000908152601d6020526040902055601e546108f29082611452565b601e556040514290829033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890600090a450565b6000546001600160a01b031633146109515760405162461bcd60e51b815260040161079a90612455565b600061097261271061096c8661096660015490565b9061145e565b9061146a565b9050600061098961271061096c8661096660015490565b905060006109a061271061096c8661096660015490565b905060006109b86103e861096c600561096660015490565b90508084101580156109ca5750808310155b80156109d65750808210155b610a405760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161079a565b6002849055600383905560048290556040514281528390839086907fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f9060200160405180910390a450505050505050565b6000546001600160a01b03163314610abb5760405162461bcd60e51b815260040161079a90612455565b6001600160a01b038216600081815260076020526040808220805460ff19168515159081179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b60205460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b879190612475565b505050565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461dead60009081527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba546001549192610bf8929091610bf29190611452565b90611452565b905090565b6000546001600160a01b03163314610c275760405162461bcd60e51b815260040161079a90612455565b602180546001600160a01b03199081166001600160a01b038881169182179093556022805483168885169081179091556020805484168886169081178255602380548616898816908117909155602480549096169688169687179095556000848152600783526040808220805460ff199081166001908117909255868452828420805482168317905597835281832080548916821790559782529081902080549096169096179094559351428152929390927f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca910160405180910390a45050505050565b6001600160a01b0381166000908152601d6020908152604080832054600590925282205461070091611452565b60006106fc3384846112f5565b336000908152601d6020908152604080832054600590925290912054610d6a91611452565b811115610dd15760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b606482015260840161079a565b601f5460405163773a0f0960e01b8152336004820152602481018390526001600160a01b039091169063773a0f0990604401600060405180830381600087803b158015610e1d57600080fd5b505af1158015610e31573d6000803e3d6000fd5b5050336000908152601d6020526040902054610e509250905082611476565b336000908152601d6020526040902055601e54610e6d9082611476565b601e556040514290829033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590600090a450565b6000546001600160a01b03163314610ecc5760405162461bcd60e51b815260040161079a90612455565b600a889055600b879055600e869055600d849055600c859055600f83905560108290556011819055601254610f0290600561146a565b600f5411158015610f225750601254610f1c90600561146a565b60105411155b8015610f3d5750601254610f3790600561146a565b60115411155b610f955760405162461bcd60e51b815260206004820152602360248201527f45524332303a20666565732063616e6e6f74206265206d6f7265207468616e2060448201526232302560e81b606482015260840161079a565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc98984604051610fc991815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633146110055760405162461bcd60e51b815260040161079a90612455565b601983905560015461102090620186a09061096c908561145e565b601a5560015461103990620186a09061096c908461145e565b601b556040514281528190839085907f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb39060200160405180910390a4505050565b6000546001600160a01b031633146110a45760405162461bcd60e51b815260040161079a90612455565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146111225760405162461bcd60e51b815260040161079a90612455565b60138054931515620100000262ff00001990941693909317909255601555601c55565b6000546001600160a01b0316331461116f5760405162461bcd60e51b815260040161079a90612455565b601f80546001600160a01b0319166001600160a01b038316908117909155600081815260076020526040808220805460ff19166001179055514292917f23481943b6ef3dff645af874fbb24781bf224a02312f9cb308880e03e0a9ddee91a350565b6001600160a01b0383166112335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161079a565b6001600160a01b0382166112945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161079a565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611300838383611482565b61130a83836115c1565b611315838383611663565b611320838383611857565b61132b838383611951565b611336838383611b02565b6113408383611b68565b6001600160a01b0383166000908152600560205260409020546113639082611452565b6001600160a01b0384166000908152600560205260408120919091556113898484611b8b565b611393578161139e565b61139e848484611bd1565b6001600160a01b0384166000908152600560205260409020549091506113c49082611476565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114189085815260200190565b60405180910390a350505050565b6000818484111561144a5760405162461bcd60e51b815260040161079a91906121b0565b505050900390565b600061076982846124a8565b600061076982846124bb565b600061076982846124d2565b600061076982846124f4565b6001600160a01b0383166114e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161079a565b6001600160a01b0382166115485760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161079a565b6001600160a01b038316600090815260056020526040902054811115610b875760405162461bcd60e51b815260206004820152602860248201527f45524332303a2062656c6f7720617661696c61626c652062616c616e636520746044820152671a1c995cda1bdb1960c21b606482015260840161079a565b6001600160a01b03821660009081526007602052604090205460ff1615801561160357506001600160a01b03811660009081526007602052604090205460ff16155b1561165f57601354610100900460ff1661165f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161079a565b5050565b6001600160a01b0383166000908152601d60205260409020541561171c576001600160a01b038316600090815260056020908152604080832054601d909252909120546116b1908390611476565b111561171c5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2065786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b606482015260840161079a565b6009546001600160a01b038481169116146117c4576003548111158061175a57506001600160a01b03831660009081526007602052604090205460ff165b8061177d57506001600160a01b03821660009081526007602052604090205460ff165b6117c45760405162461bcd60e51b8152602060048201526018602482015277115490cc8c0e881d1e081b1a5b5a5d08195e18d95959195960421b604482015260640161079a565b600254811115806117ed57506001600160a01b03831660009081526007602052604090205460ff165b8061181057506001600160a01b03821660009081526007602052604090205460ff165b610b875760405162461bcd60e51b8152602060048201526018602482015277115490cc8c0e881d1e081b1a5b5a5d08195e18d95959195960421b604482015260640161079a565b6001600160a01b03831660009081526007602052604090205460ff1615801561189957506001600160a01b03821660009081526007602052604090205460ff16155b80156118b357506009546001600160a01b03838116911614155b80156118ca57506001600160a01b03821661dead14155b15610b87576004546001600160a01b0383166000908152600560205260409020546118f59083611476565b1115610b875760405162461bcd60e51b815260206004820152602560248201527f45524332303a2065786365656473206d6178696d756d2077616c6c657420616d60448201526437bab73a1760d91b606482015260840161079a565b60135462010000900460ff16801561196c575060185460ff16155b15610b87576009546001600160a01b0383811691161480156119a757506001600160a01b03831660009081526007602052604090205460ff16155b156119be576014546119ba906001611476565b6014555b6009546001600160a01b0384811691161480156119f457506001600160a01b03821660009081526007602052604090205460ff16155b8015611a025750601c548110155b15611a0d5760006014555b6015546014541115611a27576016805460ff191660011790555b60165460ff168015611a5257506001600160a01b03821660009081526007602052604090205460ff16155b8015611a7757506001600160a01b03831660009081526007602052604090205460ff16155b15610b87576009546001600160a01b03848116911614611ae55760405162461bcd60e51b815260206004820152602360248201527f45524332303a20507269636547756172642070757263686173652072657175696044820152621c995960ea1b606482015260840161079a565b601c548110610b875760006014556016805460ff19169055505050565b6009546001600160a01b038381169116148015611b3857506001600160a01b03831660009081526007602052604090205460ff16155b8015611b465750601b548110155b15610b8757600160176000828254611b5e91906124f4565b9091555050505050565b611b728282611cc8565b1561165f57611b82601a54611d67565b60006017555050565b6001600160a01b03821660009081526007602052604081205460ff161580156107695750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611bde8585611f60565b1115611cc1576000611c01611bf38686611f60565b60125461096690869061146a565b30600090815260056020526040902054909150611c1e9082611476565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c6f9085815260200190565b60405180910390a3600e5415611caf57602454600e54601254611caf9230926001600160a01b0390911691611caa919061096690899061146a565b6112f5565b611cb98382611452565b915050610769565b5092915050565b601a5430600090815260056020526040812054601854919211159060ff16158015611cf5575060135460ff165b8015611d085750601354610100900460ff165b8015611d2d57506001600160a01b03841660009081526007602052604090205460ff16155b8015611d4657506009546001600160a01b038481169116145b8015611d56575060195460175410155b8015611d5f5750805b949350505050565b6001601860006101000a81548160ff0219169083151502179055506000611db76002610966600d54611db1600c54611db1600b54611db16001600a5461147690919063ffffffff16565b90611476565b90506000611dd48261096c600a548661145e90919063ffffffff16565b90506000611de28483611452565b905047611dee82611fab565b6000611dfa4783611452565b90506000611e1d611e16600a548861145290919063ffffffff16565b839061146a565b90506000611e36600a548361145e90919063ffffffff16565b90508015611e5757602254611e5790879083906001600160a01b0316612105565b600b54600090611e6c9061096685600261145e565b90508015611eb0576021546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611eae573d6000803e3d6000fd5b505b600d54600090611ec59061096686600261145e565b90508015611f09576023546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f07573d6000803e3d6000fd5b505b4715611f4a576020546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611f48573d6000803e3d6000fd5b505b50506018805460ff191690555050505050505050565b6009546000906001600160a01b0390811690831603611f825750601054610700565b6009546001600160a01b0390811690841603611fa15750600f54610700565b5060115492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611fe057611fe0612507565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205d919061251d565b8160018151811061207057612070612507565b6001600160a01b03928316602091820292909201015260085461209691309116846111d1565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac947906120cf90859060009086903090429060040161253a565b600060405180830381600087803b1580156120e957600080fd5b505af11580156120fd573d6000803e3d6000fd5b505050505050565b60085461211d9030906001600160a01b0316856111d1565b60085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af115801561218b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120fd91906125ab565b600060208083528351808285015260005b818110156121dd578581018301518582016040015282016121c1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461221357600080fd5b50565b6000806040838503121561222957600080fd5b8235612234816121fe565b946020939093013593505050565b60008060006060848603121561225757600080fd5b8335612262816121fe565b92506020840135612272816121fe565b929592945050506040919091013590565b60006020828403121561229557600080fd5b5035919050565b6000602082840312156122ae57600080fd5b8135610769816121fe565b6000806000606084860312156122ce57600080fd5b505081359360208301359350604090920135919050565b801515811461221357600080fd5b6000806040838503121561230657600080fd5b8235612311816121fe565b91506020830135612321816122e5565b809150509250929050565b600080600080600060a0868803121561234457600080fd5b853561234f816121fe565b9450602086013561235f816121fe565b9350604086013561236f816121fe565b9250606086013561237f816121fe565b9150608086013561238f816121fe565b809150509295509295909350565b600080604083850312156123b057600080fd5b82356123bb816121fe565b91506020830135612321816121fe565b600080600080600080600080610100898b0312156123e857600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060006060848603121561243557600080fd5b8335612440816122e5565b95602085013595506040909401359392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60006020828403121561248757600080fd5b8151610769816122e5565b634e487b7160e01b600052601160045260246000fd5b8181038181111561070057610700612492565b808202811582820484141761070057610700612492565b6000826124ef57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561070057610700612492565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561252f57600080fd5b8151610769816121fe565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561258a5784516001600160a01b031683529383019391830191600101612565565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156125c057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204678c2313f787885e6cc2d89430e6444f6996dab70767fa528b5a3913d5cbd9064736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102135760003560e01c8063817b1cd211610118578063b6b55f25116100a0578063ef40a6701161006f578063ef40a6701461064c578063f2fde38b14610679578063f49166fc14610699578063f4c98ce2146106b9578063f4e0d9ac146106cf57600080fd5b8063b6b55f25146105a6578063dd62ed3e146105c6578063e2d6f94c1461060c578063e94dd17c1461062c57600080fd5b806395d89b41116100e757806395d89b41146104f75780639fb05d3714610526578063a0821be314610546578063a8aa1b3114610566578063a9059cbb1461058657600080fd5b8063817b1cd21461047a578063893d20e8146104905780638cd4426d146104c25780639358928b146104e257600080fd5b80632e3182e01161019b57806348ff2b8b1161016a57806348ff2b8b146103e257806370a082311461040257806378109e54146104385780637cca52fe1461044e5780637d1db4a51461046457600080fd5b80632e3182e0146103615780632f54bf6e14610377578063313ce567146103a657806334c5d2ce146103c257600080fd5b806318160ddd116101e257806318160ddd146102db5780631ba8f3ef146102f057806323b872dd1461030a578063293230b81461032a5780632e1a7d4d1461034157600080fd5b806306fdde031461021f578063095ea7b3146102675780630b340dff146102975780630bfabbf3146102bb57600080fd5b3661021a57005b600080fd5b34801561022b57600080fd5b5060408051808201909152600d81526c233637b7b910213ab4b63232b960991b60208201525b60405161025e91906121b0565b60405180910390f35b34801561027357600080fd5b50610287610282366004612216565b6106ef565b604051901515815260200161025e565b3480156102a357600080fd5b506102ad60145481565b60405190815260200161025e565b3480156102c757600080fd5b506013546102879062010000900460ff1681565b3480156102e757600080fd5b506001546102ad565b3480156102fc57600080fd5b506016546102879060ff1681565b34801561031657600080fd5b50610287610325366004612242565b610706565b34801561033657600080fd5b5061033f610770565b005b34801561034d57600080fd5b5061033f61035c366004612283565b6107e1565b34801561036d57600080fd5b506102ad60155481565b34801561038357600080fd5b5061028761039236600461229c565b6000546001600160a01b0391821691161490565b3480156103b257600080fd5b506040516009815260200161025e565b3480156103ce57600080fd5b5061033f6103dd3660046122b9565b610927565b3480156103ee57600080fd5b5061033f6103fd3660046122f3565b610a91565b34801561040e57600080fd5b506102ad61041d36600461229c565b6001600160a01b031660009081526005602052604090205490565b34801561044457600080fd5b506102ad60045481565b34801561045a57600080fd5b506102ad60035481565b34801561047057600080fd5b506102ad60025481565b34801561048657600080fd5b506102ad601e5481565b34801561049c57600080fd5b506000546001600160a01b03165b6040516001600160a01b03909116815260200161025e565b3480156104ce57600080fd5b5061033f6104dd366004612216565b610b10565b3480156104ee57600080fd5b506102ad610b8c565b34801561050357600080fd5b50604080518082019091526006815265212aa4a6222960d11b6020820152610251565b34801561053257600080fd5b5061033f61054136600461232c565b610bfd565b34801561055257600080fd5b506102ad61056136600461229c565b610d0b565b34801561057257600080fd5b506009546104aa906001600160a01b031681565b34801561059257600080fd5b506102876105a1366004612216565b610d38565b3480156105b257600080fd5b5061033f6105c1366004612283565b610d45565b3480156105d257600080fd5b506102ad6105e136600461239d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561061857600080fd5b5061033f6106273660046123cb565b610ea2565b34801561063857600080fd5b5061033f6106473660046122b9565b610fdb565b34801561065857600080fd5b506102ad61066736600461229c565b601d6020526000908152604090205481565b34801561068557600080fd5b5061033f61069436600461229c565b61107a565b3480156106a557600080fd5b5061033f6106b4366004612420565b6110f8565b3480156106c557600080fd5b506102ad601c5481565b3480156106db57600080fd5b5061033f6106ea36600461229c565b611145565b60006106fc3384846111d1565b5060015b92915050565b60006107138484846112f5565b6107658433610760856040518060600160405280602881526020016125da602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611426565b6111d1565b5060015b9392505050565b6000546001600160a01b031633146107a35760405162461bcd60e51b815260040161079a90612455565b60405180910390fd5b6013805461ff001916610100179055604051429033907f340c369ced7c3a65b67543c4f1e839173c42d01b38931b0c01b18c89a1d1ba4b90600090a3565b336000908152601d60205260409020548111156108565760405162461bcd60e51b815260206004820152602d60248201527f45524332303a2043616e6e6f7420756e7374616b65206d6f7265207468616e2060448201526c185b5bdd5b9d081cdd185ad959609a1b606482015260840161079a565b601f5460405163d8a9bf2960e01b8152336004820152602481018390526001600160a01b039091169063d8a9bf2990604401600060405180830381600087803b1580156108a257600080fd5b505af11580156108b6573d6000803e3d6000fd5b5050336000908152601d60205260409020546108d59250905082611452565b336000908152601d6020526040902055601e546108f29082611452565b601e556040514290829033907ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b56890600090a450565b6000546001600160a01b031633146109515760405162461bcd60e51b815260040161079a90612455565b600061097261271061096c8661096660015490565b9061145e565b9061146a565b9050600061098961271061096c8661096660015490565b905060006109a061271061096c8661096660015490565b905060006109b86103e861096c600561096660015490565b90508084101580156109ca5750808310155b80156109d65750808210155b610a405760405162461bcd60e51b815260206004820152603560248201527f45524332303a206d61782054587320616e64206d61782057616c6c65742063616044820152746e6e6f74206265206c657373207468616e202e352560581b606482015260840161079a565b6002849055600383905560048290556040514281528390839086907fbd5acdd9cd7346c04cee822893f228a65a948bc41357408255ab8f36c446349f9060200160405180910390a450505050505050565b6000546001600160a01b03163314610abb5760405162461bcd60e51b815260040161079a90612455565b6001600160a01b038216600081815260076020526040808220805460ff19168515159081179091559051429391927ff61420caae4661cdd9554a2c8b6c89fc9f30f94abccb1da76abb2ec99783821191a45050565b60205460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb906044016020604051808303816000875af1158015610b63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b879190612475565b505050565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc5461dead60009081527f7d509c07f0d4edcc2dd1b53aae68677132eb562dcba78e36381b63ccaf66e6ba546001549192610bf8929091610bf29190611452565b90611452565b905090565b6000546001600160a01b03163314610c275760405162461bcd60e51b815260040161079a90612455565b602180546001600160a01b03199081166001600160a01b038881169182179093556022805483168885169081179091556020805484168886169081178255602380548616898816908117909155602480549096169688169687179095556000848152600783526040808220805460ff199081166001908117909255868452828420805482168317905597835281832080548916821790559782529081902080549096169096179094559351428152929390927f358f3926f41536f5fa6926b5b6945502e5fdfb85b1876c473d06606ed0fae9ca910160405180910390a45050505050565b6001600160a01b0381166000908152601d6020908152604080832054600590925282205461070091611452565b60006106fc3384846112f5565b336000908152601d6020908152604080832054600590925290912054610d6a91611452565b811115610dd15760405162461bcd60e51b815260206004820152602f60248201527f45524332303a2043616e6e6f74207374616b65206d6f7265207468616e20617660448201526e61696c61626c652062616c616e636560881b606482015260840161079a565b601f5460405163773a0f0960e01b8152336004820152602481018390526001600160a01b039091169063773a0f0990604401600060405180830381600087803b158015610e1d57600080fd5b505af1158015610e31573d6000803e3d6000fd5b5050336000908152601d6020526040902054610e509250905082611476565b336000908152601d6020526040902055601e54610e6d9082611476565b601e556040514290829033907f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a1590600090a450565b6000546001600160a01b03163314610ecc5760405162461bcd60e51b815260040161079a90612455565b600a889055600b879055600e869055600d849055600c859055600f83905560108290556011819055601254610f0290600561146a565b600f5411158015610f225750601254610f1c90600561146a565b60105411155b8015610f3d5750601254610f3790600561146a565b60115411155b610f955760405162461bcd60e51b815260206004820152602360248201527f45524332303a20666565732063616e6e6f74206265206d6f7265207468616e2060448201526232302560e81b606482015260840161079a565b4282847fdddb43af0ad29e5d9d3cb393fd94e8f11ac2c069da19545bac6ee6baf3ddc98984604051610fc991815260200190565b60405180910390a45050505050505050565b6000546001600160a01b031633146110055760405162461bcd60e51b815260040161079a90612455565b601983905560015461102090620186a09061096c908561145e565b601a5560015461103990620186a09061096c908461145e565b601b556040514281528190839085907f3af591b474e55c209cfbc3da369b6762366e3015997314ac10bd5c3198d26fb39060200160405180910390a4505050565b6000546001600160a01b031633146110a45760405162461bcd60e51b815260040161079a90612455565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b6000546001600160a01b031633146111225760405162461bcd60e51b815260040161079a90612455565b60138054931515620100000262ff00001990941693909317909255601555601c55565b6000546001600160a01b0316331461116f5760405162461bcd60e51b815260040161079a90612455565b601f80546001600160a01b0319166001600160a01b038316908117909155600081815260076020526040808220805460ff19166001179055514292917f23481943b6ef3dff645af874fbb24781bf224a02312f9cb308880e03e0a9ddee91a350565b6001600160a01b0383166112335760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161079a565b6001600160a01b0382166112945760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161079a565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b611300838383611482565b61130a83836115c1565b611315838383611663565b611320838383611857565b61132b838383611951565b611336838383611b02565b6113408383611b68565b6001600160a01b0383166000908152600560205260409020546113639082611452565b6001600160a01b0384166000908152600560205260408120919091556113898484611b8b565b611393578161139e565b61139e848484611bd1565b6001600160a01b0384166000908152600560205260409020549091506113c49082611476565b6001600160a01b0380851660008181526005602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906114189085815260200190565b60405180910390a350505050565b6000818484111561144a5760405162461bcd60e51b815260040161079a91906121b0565b505050900390565b600061076982846124a8565b600061076982846124bb565b600061076982846124d2565b600061076982846124f4565b6001600160a01b0383166114e65760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161079a565b6001600160a01b0382166115485760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161079a565b6001600160a01b038316600090815260056020526040902054811115610b875760405162461bcd60e51b815260206004820152602860248201527f45524332303a2062656c6f7720617661696c61626c652062616c616e636520746044820152671a1c995cda1bdb1960c21b606482015260840161079a565b6001600160a01b03821660009081526007602052604090205460ff1615801561160357506001600160a01b03811660009081526007602052604090205460ff16155b1561165f57601354610100900460ff1661165f5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f7420616c6c6f776564000000604482015260640161079a565b5050565b6001600160a01b0383166000908152601d60205260409020541561171c576001600160a01b038316600090815260056020908152604080832054601d909252909120546116b1908390611476565b111561171c5760405162461bcd60e51b815260206004820152603460248201527f45524332303a2065786365656473206d6178696d756d20616c6c6f776564206e60448201527337ba1031bab93932b73a363c9039ba30b5b2b21760611b606482015260840161079a565b6009546001600160a01b038481169116146117c4576003548111158061175a57506001600160a01b03831660009081526007602052604090205460ff165b8061177d57506001600160a01b03821660009081526007602052604090205460ff165b6117c45760405162461bcd60e51b8152602060048201526018602482015277115490cc8c0e881d1e081b1a5b5a5d08195e18d95959195960421b604482015260640161079a565b600254811115806117ed57506001600160a01b03831660009081526007602052604090205460ff165b8061181057506001600160a01b03821660009081526007602052604090205460ff165b610b875760405162461bcd60e51b8152602060048201526018602482015277115490cc8c0e881d1e081b1a5b5a5d08195e18d95959195960421b604482015260640161079a565b6001600160a01b03831660009081526007602052604090205460ff1615801561189957506001600160a01b03821660009081526007602052604090205460ff16155b80156118b357506009546001600160a01b03838116911614155b80156118ca57506001600160a01b03821661dead14155b15610b87576004546001600160a01b0383166000908152600560205260409020546118f59083611476565b1115610b875760405162461bcd60e51b815260206004820152602560248201527f45524332303a2065786365656473206d6178696d756d2077616c6c657420616d60448201526437bab73a1760d91b606482015260840161079a565b60135462010000900460ff16801561196c575060185460ff16155b15610b87576009546001600160a01b0383811691161480156119a757506001600160a01b03831660009081526007602052604090205460ff16155b156119be576014546119ba906001611476565b6014555b6009546001600160a01b0384811691161480156119f457506001600160a01b03821660009081526007602052604090205460ff16155b8015611a025750601c548110155b15611a0d5760006014555b6015546014541115611a27576016805460ff191660011790555b60165460ff168015611a5257506001600160a01b03821660009081526007602052604090205460ff16155b8015611a7757506001600160a01b03831660009081526007602052604090205460ff16155b15610b87576009546001600160a01b03848116911614611ae55760405162461bcd60e51b815260206004820152602360248201527f45524332303a20507269636547756172642070757263686173652072657175696044820152621c995960ea1b606482015260840161079a565b601c548110610b875760006014556016805460ff19169055505050565b6009546001600160a01b038381169116148015611b3857506001600160a01b03831660009081526007602052604090205460ff16155b8015611b465750601b548110155b15610b8757600160176000828254611b5e91906124f4565b9091555050505050565b611b728282611cc8565b1561165f57611b82601a54611d67565b60006017555050565b6001600160a01b03821660009081526007602052604081205460ff161580156107695750506001600160a01b031660009081526007602052604090205460ff1615919050565b600080611bde8585611f60565b1115611cc1576000611c01611bf38686611f60565b60125461096690869061146a565b30600090815260056020526040902054909150611c1e9082611476565b30600081815260056020526040908190209290925590516001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611c6f9085815260200190565b60405180910390a3600e5415611caf57602454600e54601254611caf9230926001600160a01b0390911691611caa919061096690899061146a565b6112f5565b611cb98382611452565b915050610769565b5092915050565b601a5430600090815260056020526040812054601854919211159060ff16158015611cf5575060135460ff165b8015611d085750601354610100900460ff165b8015611d2d57506001600160a01b03841660009081526007602052604090205460ff16155b8015611d4657506009546001600160a01b038481169116145b8015611d56575060195460175410155b8015611d5f5750805b949350505050565b6001601860006101000a81548160ff0219169083151502179055506000611db76002610966600d54611db1600c54611db1600b54611db16001600a5461147690919063ffffffff16565b90611476565b90506000611dd48261096c600a548661145e90919063ffffffff16565b90506000611de28483611452565b905047611dee82611fab565b6000611dfa4783611452565b90506000611e1d611e16600a548861145290919063ffffffff16565b839061146a565b90506000611e36600a548361145e90919063ffffffff16565b90508015611e5757602254611e5790879083906001600160a01b0316612105565b600b54600090611e6c9061096685600261145e565b90508015611eb0576021546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611eae573d6000803e3d6000fd5b505b600d54600090611ec59061096686600261145e565b90508015611f09576023546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f07573d6000803e3d6000fd5b505b4715611f4a576020546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611f48573d6000803e3d6000fd5b505b50506018805460ff191690555050505050505050565b6009546000906001600160a01b0390811690831603611f825750601054610700565b6009546001600160a01b0390811690841603611fa15750600f54610700565b5060115492915050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611fe057611fe0612507565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612039573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205d919061251d565b8160018151811061207057612070612507565b6001600160a01b03928316602091820292909201015260085461209691309116846111d1565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac947906120cf90859060009086903090429060040161253a565b600060405180830381600087803b1580156120e957600080fd5b505af11580156120fd573d6000803e3d6000fd5b505050505050565b60085461211d9030906001600160a01b0316856111d1565b60085460405163f305d71960e01b81523060048201526024810185905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990849060c40160606040518083038185885af115801561218b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906120fd91906125ab565b600060208083528351808285015260005b818110156121dd578581018301518582016040015282016121c1565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461221357600080fd5b50565b6000806040838503121561222957600080fd5b8235612234816121fe565b946020939093013593505050565b60008060006060848603121561225757600080fd5b8335612262816121fe565b92506020840135612272816121fe565b929592945050506040919091013590565b60006020828403121561229557600080fd5b5035919050565b6000602082840312156122ae57600080fd5b8135610769816121fe565b6000806000606084860312156122ce57600080fd5b505081359360208301359350604090920135919050565b801515811461221357600080fd5b6000806040838503121561230657600080fd5b8235612311816121fe565b91506020830135612321816122e5565b809150509250929050565b600080600080600060a0868803121561234457600080fd5b853561234f816121fe565b9450602086013561235f816121fe565b9350604086013561236f816121fe565b9250606086013561237f816121fe565b9150608086013561238f816121fe565b809150509295509295909350565b600080604083850312156123b057600080fd5b82356123bb816121fe565b91506020830135612321816121fe565b600080600080600080600080610100898b0312156123e857600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60008060006060848603121561243557600080fd5b8335612440816122e5565b95602085013595506040909401359392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b60006020828403121561248757600080fd5b8151610769816122e5565b634e487b7160e01b600052601160045260246000fd5b8181038181111561070057610700612492565b808202811582820484141761070057610700612492565b6000826124ef57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561070057610700612492565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561252f57600080fd5b8151610769816121fe565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561258a5784516001600160a01b031683529383019391830191600101612565565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156125c057600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212204678c2313f787885e6cc2d89430e6444f6996dab70767fa528b5a3913d5cbd9064736f6c63430008130033

Deployed Bytecode Sourcemap

4596:17051:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9104:67;;;;;;;;;;-1:-1:-1;9164:5:0;;;;;;;;;;;;-1:-1:-1;;;9164:5:0;;;;9104:67;;;;;;;:::i;:::-;;;;;;;;9888:133;;;;;;;;;;-1:-1:-1;9888:133:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9888:133:0;1023:187:1;5796:30:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;5796:30:0;1215:177:1;5760:29:0;;;;;;;;;;-1:-1:-1;5760:29:0;;;;;;;;;;;9411:84;;;;;;;;;;-1:-1:-1;9481:12:0;;9411:84;;5876:39;;;;;;;;;;-1:-1:-1;5876:39:0;;;;;;;;20992:309;;;;;;;;;;-1:-1:-1;20992:309:0;;;;;:::i;:::-;;:::i;18561:142::-;;;;;;;;;;;;;:::i;:::-;;11845:408;;;;;;;;;;-1:-1:-1;11845:408:0;;;;;:::i;:::-;;:::i;5833:36::-;;;;;;;;;;;;;;;;3188:87;;;;;;;;;;-1:-1:-1;3188:87:0;;;;;:::i;:::-;3243:4;3268:5;-1:-1:-1;;;;;3257:16:0;;;3268:5;;3257:16;;3188:87;9254:67;;;;;;;;;;-1:-1:-1;9254:67:0;;4829:1;2437:36:1;;2425:2;2410:18;9254:67:0;2295:184:1;13116:671:0;;;;;;;;;;-1:-1:-1;13116:671:0;;;;;:::i;:::-;;:::i;19260:192::-;;;;;;;;;;-1:-1:-1;19260:192:0;;;;;:::i;:::-;;:::i;9501:103::-;;;;;;;;;;-1:-1:-1;9501:103:0;;;;;:::i;:::-;-1:-1:-1;;;;;9584:18:0;9567:7;9584:18;;;:9;:18;;;;;;;9501:103;5038:63;;;;;;;;;;;;;;;;4969:62;;;;;;;;;;;;;;;;4902:60;;;;;;;;;;;;;;;;6324:26;;;;;;;;;;;;;;;;9327:78;;;;;;;;;;-1:-1:-1;9379:7:0;9397:5;-1:-1:-1;;;;;9397:5:0;9327:78;;;-1:-1:-1;;;;;3479:32:1;;;3461:51;;3449:2;3434:18;9327:78:0;3315:203:1;19460:140:0;;;;;;;;;;-1:-1:-1;19460:140:0;;;;;:::i;:::-;;:::i;10158:138::-;;;;;;;;;;;;;:::i;9177:71::-;;;;;;;;;;-1:-1:-1;9239:7:0;;;;;;;;;;;;-1:-1:-1;;;9239:7:0;;;;9177:71;;18711:541;;;;;;;;;;-1:-1:-1;18711:541:0;;;;;:::i;:::-;;:::i;10027:125::-;;;;;;;;;;-1:-1:-1;10027:125:0;;;;;:::i;:::-;;:::i;5301:19::-;;;;;;;;;;-1:-1:-1;5301:19:0;;;;-1:-1:-1;;;;;5301:19:0;;;9610:139;;;;;;;;;;-1:-1:-1;9610:139:0;;;;;:::i;:::-;;:::i;11403:434::-;;;;;;;;;;-1:-1:-1;11403:434:0;;;;;:::i;:::-;;:::i;9755:127::-;;;;;;;;;;-1:-1:-1;9755:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9853:18:0;;;9836:7;9853:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9755:127;12486:622;;;;;;;;;;-1:-1:-1;12486:622:0;;;;;:::i;:::-;;:::i;19608:415::-;;;;;;;;;;-1:-1:-1;19608:415:0;;;;;:::i;:::-;;:::i;6270:47::-;;;;;;;;;;-1:-1:-1;6270:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;3281:111;;;;;;;;;;-1:-1:-1;3281:111:0;;;;;:::i;:::-;;:::i;14711:193::-;;;;;;;;;;-1:-1:-1;14711:193:0;;;;;:::i;:::-;;:::i;6159:38::-;;;;;;;;;;;;;;;;12261:217;;;;;;;;;;-1:-1:-1;12261:217:0;;;;;:::i;:::-;;:::i;9888:133::-;9963:4;9970:37;9979:10;9991:7;10000:6;9970:8;:37::i;:::-;-1:-1:-1;10015:4:0;9888:133;;;;;:::o;20992:309::-;21090:4;21107:36;21117:6;21125:9;21136:6;21107:9;:36::i;:::-;21154:117;21163:6;21171:10;21183:87;21219:6;21183:87;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21183:19:0;;;;;;:11;:19;;;;;;;;21203:10;21183:31;;;;;;;;;:87;:35;:87::i;:::-;21154:8;:117::i;:::-;-1:-1:-1;21289:4:0;20992:309;;;;;;:::o;18561:142::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;;;;;;;;;18615:14:::1;:21:::0;;-1:-1:-1;;18615:21:0::1;;;::::0;;18652:43:::1;::::0;18679:15:::1;::::0;18667:10:::1;::::0;18652:43:::1;::::0;18615:21;;18652:43:::1;18561:142::o:0;11845:408::-;11939:10;11926:24;;;;:12;:24;;;;;;11916:34;;;11908:92;;;;-1:-1:-1;;;11908:92:0;;6578:2:1;11908:92:0;;;6560:21:1;6617:2;6597:18;;;6590:30;6656:34;6636:18;;;6629:62;-1:-1:-1;;;6707:18:1;;;6700:43;6760:19;;11908:92:0;6376:409:1;11908:92:0;12011:15;;:51;;-1:-1:-1;;;12011:51:0;;12043:10;12011:51;;;6964::1;7031:18;;;7024:34;;;-1:-1:-1;;;;;12011:15:0;;;;:31;;6937:18:1;;12011:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12113:10:0;12100:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;12100:24:0;-1:-1:-1;12129:6:0;12100:28;:36::i;:::-;12086:10;12073:24;;;;:12;:24;;;;;:63;12161:11;;:23;;12177:6;12161:15;:23::i;:::-;12147:11;:37;12200:45;;12229:15;;12221:6;;12209:10;;12200:45;;;;;11845:408;:::o;13116:671::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;13216:13:::1;13232:45;13270:5;13233:23;13251:4;13233:13;9481:12:::0;;;9411:84;13233:13:::1;:17:::0;::::1;:23::i;:::-;13232:29:::0;::::1;:45::i;:::-;13216:61;;13279:19;13301:47;13341:5;13302:25;13320:6;13302:13;9481:12:::0;;;9411:84;13301:47:::1;13279:69;;13359:17;13379:48;13420:5;13380:26;13398:7;13380:13;9481:12:::0;;;9411:84;13379:48:::1;13359:68;;13429:13;13445:30;13470:4;13445:20;13463:1;13445:13;9481:12:::0;;;9411:84;13445:30:::1;13429:46;;13503:5;13494;:14;;:38;;;;;13527:5;13512:11;:20;;13494:38;:60;;;;;13549:5;13536:9;:18;;13494:60;13486:126;;;::::0;-1:-1:-1;;;13486:126:0;;7271:2:1;13486:126:0::1;::::0;::::1;7253:21:1::0;7310:2;7290:18;;;7283:30;7349:34;7329:18;;;7322:62;-1:-1:-1;;;7400:18:1;;;7393:51;7461:19;;13486:126:0::1;7069:417:1::0;13486:126:0::1;13623:12;:20:::0;;;13645:14:::1;:28:::0;;;13675:15:::1;:27:::0;;;13718:61:::1;::::0;13763:15:::1;1361:25:1::0;;13645:28:0;;13675:27;;13623:20;;13718:61:::1;::::0;1349:2:1;1334:18;13718:61:0::1;;;;;;;13205:582;;;;13116:671:::0;;;:::o;19260:192::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19344:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:32;;-1:-1:-1;;19344:32:0::1;::::0;::::1;;::::0;;::::1;::::0;;;19392:52;;19428:15:::1;::::0;19344:32;;19392:52:::1;::::0;::::1;19260:192:::0;;:::o;19460:140::-;19562:20;;19536:56;;-1:-1:-1;;;19536:56:0;;-1:-1:-1;;;;;19562:20:0;;;19536:56;;;6964:51:1;7031:18;;;7024:34;;;19536:25:0;;;;;;6937:18:1;;19536:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19460:140;;:::o;10158:138::-;9584:9;:18;;;;6438:42;10217:7;9584:18;;;;;10234:12;;10217:7;;10234:60;;9584:18;;10234:33;;:12;:16;:33::i;:::-;:37;;:60::i;:::-;10227:67;;10158:138;:::o;18711:541::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;18867:18:::1;:31:::0;;-1:-1:-1;;;;;;18867:31:0;;::::1;-1:-1:-1::0;;;;;18867:31:0;;::::1;::::0;;::::1;::::0;;;18900:18:::1;:31:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;18933:20:::1;:35:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;18970:16:::1;:27:::0;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;18999:14:::1;:23:::0;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19033:23:0;;;:11:::1;:23:::0;;;;;;:30;;-1:-1:-1;;19033:30:0;;::::1;-1:-1:-1::0;19033:30:0;;::::1;::::0;;;19065:23;;;;;;:30;;;::::1;::::0;::::1;::::0;;19097:21;;;;;;:28;;;::::1;::::0;::::1;::::0;;19127:19;;;;;;;:26;;;;::::1;::::0;;::::1;::::0;;;19169:75;;19228:15:::1;1361:25:1::0;;18933:35:0;;18900:31;;19169:75:::1;::::0;1334:18:1;19169:75:0::1;;;;;;;18711:541:::0;;;;;:::o;10027:125::-;-1:-1:-1;;;;;10129:20:0;;10090:7;10129:20;;;:12;:20;;;;;;;;;10107:9;:17;;;;;;:43;;:21;:43::i;9610:139::-;9688:4;9695:40;9705:10;9717:9;9728:6;9695:9;:40::i;11403:434::-;11522:10;11509:24;;;;:12;:24;;;;;;;;;11483:9;:21;;;;;;;:51;;:25;:51::i;:::-;11473:6;:61;;11465:121;;;;-1:-1:-1;;;11465:121:0;;7943:2:1;11465:121:0;;;7925:21:1;7982:2;7962:18;;;7955:30;8021:34;8001:18;;;7994:62;-1:-1:-1;;;8072:18:1;;;8065:45;8127:19;;11465:121:0;7741:411:1;11465:121:0;11597:15;;:50;;-1:-1:-1;;;11597:50:0;;11628:10;11597:50;;;6964:51:1;7031:18;;;7024:34;;;-1:-1:-1;;;;;11597:15:0;;;;:30;;6937:18:1;;11597:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11698:10:0;11685:24;;;;:12;:24;;;;;;:36;;-1:-1:-1;11685:24:0;-1:-1:-1;11714:6:0;11685:28;:36::i;:::-;11671:10;11658:24;;;;:12;:24;;;;;:63;11746:11;;:23;;11762:6;11746:15;:23::i;:::-;11732:11;:37;11785:44;;11813:15;;11805:6;;11793:10;;11785:44;;;;;11403:434;:::o;12486:622::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;12681:12:::1;:25:::0;;;12708:12:::1;:25:::0;;;12735:8:::1;:17:::0;;;12754:10:::1;:21:::0;;;12786:14:::1;:29:::0;;;12817:8:::1;:17:::0;;;12836:7:::1;:15:::0;;;12853:11:::1;:20:::0;;;12904:11:::1;::::0;:18:::1;::::0;12920:1:::1;12904:15;:18::i;:::-;12892:8;;:30;;:63;;;;-1:-1:-1::0;12937:11:0::1;::::0;:18:::1;::::0;12953:1:::1;12937:15;:18::i;:::-;12926:7;;:29;;12892:63;:100;;;;-1:-1:-1::0;12974:11:0::1;::::0;:18:::1;::::0;12990:1:::1;12974:15;:18::i;:::-;12959:11;;:33;;12892:100;12884:148;;;::::0;-1:-1:-1;;;12884:148:0;;8359:2:1;12884:148:0::1;::::0;::::1;8341:21:1::0;8398:2;8378:18;;;8371:30;8437:34;8417:18;;;8410:62;-1:-1:-1;;;8488:18:1;;;8481:33;8531:19;;12884:148:0::1;8157:399:1::0;12884:148:0::1;13084:15;13069:5;13061:6;13048:52;13076:6;13048:52;;;;1361:25:1::0;;1349:2;1334:18;;1215:177;13048:52:0::1;;;;;;;;12486:622:::0;;;;;;;;:::o;19608:415::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;19737:10:::1;:24:::0;;;19779:12:::1;::::0;:53:::1;::::0;19824:6:::1;::::0;19779:32:::1;::::0;19796:14;19779:16:::1;:32::i;:53::-;19763:13;:69:::0;19861:12:::1;::::0;:54:::1;::::0;19907:6:::1;::::0;19861:33:::1;::::0;19878:15;19861:16:::1;:33::i;:54::-;19844:14;:71:::0;19931:82:::1;::::0;19997:15:::1;1361:25:1::0;;19980:15:0;;19964:14;;19951:11;;19931:82:::1;::::0;1349:2:1;1334:18;19931:82:0::1;;;;;;;19608:415:::0;;;:::o;3281:111::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;3347:5:::1;:11:::0;;-1:-1:-1;;;;;;3347:11:0::1;-1:-1:-1::0;;;;;3347:11:0;::::1;::::0;;::::1;::::0;;;3365:25:::1;::::0;3461:51:1;;;3365:25:0::1;::::0;3449:2:1;3434:18;3365:25:0::1;;;;;;;3281:111:::0;:::o;14711:193::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;14814:10:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;14814:20:0;;::::1;::::0;;;::::1;::::0;;;14836:17:::1;:27:::0;14865:19:::1;:31:::0;14711:193::o;12261:217::-;3243:4;3268:5;-1:-1:-1;;;;;3268:5:0;3155:10;3257:16;3139:38;;;;-1:-1:-1;;;3139:38:0;;;;;;;:::i;:::-;12336:15:::1;:44:::0;;-1:-1:-1;;;;;;12336:44:0::1;-1:-1:-1::0;;;;;12336:44:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;12382:21:0;;;:11:::1;:21;::::0;;;;;:28;;-1:-1:-1;;12382:28:0::1;-1:-1:-1::0;12382:28:0::1;::::0;;12426:44;12454:15:::1;::::0;12336:44;12426::::1;::::0;::::1;12261:217:::0;:::o;21309:335::-;-1:-1:-1;;;;;21402:19:0;;21394:68;;;;-1:-1:-1;;;21394:68:0;;8979:2:1;21394:68:0;;;8961:21:1;9018:2;8998:18;;;8991:30;9057:34;9037:18;;;9030:62;-1:-1:-1;;;9108:18:1;;;9101:34;9152:19;;21394:68:0;8777:400:1;21394:68:0;-1:-1:-1;;;;;21481:21:0;;21473:68;;;;-1:-1:-1;;;21473:68:0;;9384:2:1;21473:68:0;;;9366:21:1;9423:2;9403:18;;;9396:30;9462:34;9442:18;;;9435:62;-1:-1:-1;;;9513:18:1;;;9506:32;9555:19;;21473:68:0;9182:398:1;21473:68:0;-1:-1:-1;;;;;21552:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21604:32;;1361:25:1;;;21604:32:0;;1334:18:1;21604:32:0;;;;;;;21309:335;;;:::o;10658:737::-;10747:37;10758:6;10766:9;10777:6;10747:10;:37::i;:::-;10795:38;10815:6;10823:9;10795:19;:38::i;:::-;10844:39;10857:6;10865:9;10876:6;10844:12;:39::i;:::-;10894:41;10909:6;10917:9;10928:6;10894:14;:41::i;:::-;10946:42;10962:6;10970:9;10981:6;10946:15;:42::i;:::-;10999:43;11016:6;11024:9;11035:6;10999:16;:43::i;:::-;11053:27;11062:6;11070:9;11053:8;:27::i;:::-;-1:-1:-1;;;;;11111:17:0;;;;;;:9;:17;;;;;;:29;;11133:6;11111:21;:29::i;:::-;-1:-1:-1;;;;;11091:17:0;;;;;;:9;:17;;;;;:49;;;;11176:32;11101:6;11198:9;11176:13;:32::i;:::-;:78;;11248:6;11176:78;;;11211:34;11219:6;11227:9;11238:6;11211:7;:34::i;:::-;-1:-1:-1;;;;;11288:20:0;;;;;;:9;:20;;;;;;11151:103;;-1:-1:-1;11288:40:0;;11151:103;11288:24;:40::i;:::-;-1:-1:-1;;;;;11265:20:0;;;;;;;:9;:20;;;;;;;:63;;;;11344:43;;;;;;;;;;11372:14;1361:25:1;;1349:2;1334:18;;1215:177;11344:43:0;;;;;;;;10736:659;10658:737;;;:::o;1520:162::-;1606:7;1652:12;1644:6;;;;1636:29;;;;-1:-1:-1;;;1636:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;1674:5:0;;;1520:162::o;307:82::-;365:7;382:5;386:1;382;:5;:::i;395:82::-;453:7;470:5;474:1;470;:5;:::i;483:82::-;541:7;558:5;562:1;558;:5;:::i;219:82::-;277:7;294:5;298:1;294;:5;:::i;10304:346::-;-1:-1:-1;;;;;10408:20:0;;10400:70;;;;-1:-1:-1;;;10400:70:0;;10577:2:1;10400:70:0;;;10559:21:1;10616:2;10596:18;;;10589:30;10655:34;10635:18;;;10628:62;-1:-1:-1;;;10706:18:1;;;10699:35;10751:19;;10400:70:0;10375:401:1;10400:70:0;-1:-1:-1;;;;;10489:23:0;;10481:71;;;;-1:-1:-1;;;10481:71:0;;10983:2:1;10481:71:0;;;10965:21:1;11022:2;11002:18;;;10995:30;11061:34;11041:18;;;11034:62;-1:-1:-1;;;11112:18:1;;;11105:33;11155:19;;10481:71:0;10781:399:1;10481:71:0;-1:-1:-1;;;;;9584:18:0;;9567:7;9584:18;;;:9;:18;;;;;;10571:6;:27;;10563:79;;;;-1:-1:-1;;;10563:79:0;;11387:2:1;10563:79:0;;;11369:21:1;11426:2;11406:18;;;11399:30;11465:34;11445:18;;;11438:62;-1:-1:-1;;;11516:18:1;;;11509:38;11564:19;;10563:79:0;11185:404:1;13795:206:0;-1:-1:-1;;;;;13888:19:0;;;;;;:11;:19;;;;;;;;13887:20;:47;;;;-1:-1:-1;;;;;;13912:22:0;;;;;;:11;:22;;;;;;;;13911:23;13887:47;13884:110;;;13944:14;;;;;;;13936:56;;;;-1:-1:-1;;;13936:56:0;;11796:2:1;13936:56:0;;;11778:21:1;11835:2;11815:18;;;11808:30;11874:31;11854:18;;;11847:59;11923:18;;13936:56:0;11594:353:1;13936:56:0;13795:206;;:::o;15469:525::-;-1:-1:-1;;;;;15570:20:0;;15601:1;15570:20;;;:12;:20;;;;;;:33;15567:160;;-1:-1:-1;;;;;15651:17:0;;;;;;:9;:17;;;;;;;;;15625:12;:20;;;;;;;15614:32;;:6;;:10;:32::i;:::-;15613:55;;15605:120;;;;-1:-1:-1;;;15605:120:0;;12154:2:1;15605:120:0;;;12136:21:1;12193:2;12173:18;;;12166:30;12232:34;12212:18;;;12205:62;-1:-1:-1;;;12283:18:1;;;12276:50;12343:19;;15605:120:0;11952:416:1;15605:120:0;15750:4;;-1:-1:-1;;;;;15740:14:0;;;15750:4;;15740:14;15737:131;;15774:14;;15764:6;:24;;:47;;;-1:-1:-1;;;;;;15792:19:0;;;;;;:11;:19;;;;;;;;15764:47;:73;;;-1:-1:-1;;;;;;15815:22:0;;;;;;:11;:22;;;;;;;;15764:73;15756:110;;;;-1:-1:-1;;;15756:110:0;;12575:2:1;15756:110:0;;;12557:21:1;12614:2;12594:18;;;12587:30;-1:-1:-1;;;12633:18:1;;;12626:54;12697:18;;15756:110:0;12373:348:1;15756:110:0;15896:12;;15886:6;:22;;:45;;;-1:-1:-1;;;;;;15912:19:0;;;;;;:11;:19;;;;;;;;15886:45;:71;;;-1:-1:-1;;;;;;15935:22:0;;;;;;:11;:22;;;;;;;;15886:71;15878:108;;;;-1:-1:-1;;;15878:108:0;;12575:2:1;15878:108:0;;;12557:21:1;12614:2;12594:18;;;12587:30;-1:-1:-1;;;12633:18:1;;;12626:54;12697:18;;15878:108:0;12373:348:1;14912:338:0;-1:-1:-1;;;;;15016:19:0;;;;;;:11;:19;;;;;;;;15015:20;:47;;;;-1:-1:-1;;;;;;15040:22:0;;;;;;:11;:22;;;;;;;;15039:23;15015:47;:77;;;;-1:-1:-1;15087:4:0;;-1:-1:-1;;;;;15066:26:0;;;15087:4;;15066:26;;15015:77;:107;;;;-1:-1:-1;;;;;;15096:26:0;;6438:42;15096:26;;15015:107;15012:231;;;15184:15;;-1:-1:-1;;;;;15147:20:0;;;;;;:9;:20;;;;;;:32;;15172:6;15147:24;:32::i;:::-;15146:53;;15138:103;;;;-1:-1:-1;;;15138:103:0;;12928:2:1;15138:103:0;;;12910:21:1;12967:2;12947:18;;;12940:30;13006:34;12986:18;;;12979:62;-1:-1:-1;;;13057:18:1;;;13050:35;13102:19;;15138:103:0;12726:401:1;14009:694:0;14108:10;;;;;;;:23;;;;-1:-1:-1;14123:8:0;;;;14122:9;14108:23;14105:591;;;14160:4;;-1:-1:-1;;;;;14147:17:0;;;14160:4;;14147:17;:41;;;;-1:-1:-1;;;;;;14169:19:0;;;;;;:11;:19;;;;;;;;14168:20;14147:41;14144:97;;;14208:15;;:31;;14236:1;14208:19;:31::i;:::-;14190:15;:49;14144:97;14264:4;;-1:-1:-1;;;;;14254:14:0;;;14264:4;;14254:14;:41;;;;-1:-1:-1;;;;;;14273:22:0;;;;;;:11;:22;;;;;;;;14272:23;14254:41;:74;;;;;14309:19;;14299:6;:29;;14254:74;14251:109;;;14356:1;14330:15;:28;14251:109;14391:17;;14373:15;;:35;14370:68;;;14410:19;:26;;-1:-1:-1;;14410:26:0;14432:4;14410:26;;;14370:68;14451:19;;;;:46;;;;-1:-1:-1;;;;;;14475:22:0;;;;;;:11;:22;;;;;;;;14474:23;14451:46;:70;;;;-1:-1:-1;;;;;;14502:19:0;;;;;;:11;:19;;;;;;;;14501:20;14451:70;14448:247;;;14555:4;;-1:-1:-1;;;;;14545:14:0;;;14555:4;;14545:14;14537:62;;;;-1:-1:-1;;;14537:62:0;;13334:2:1;14537:62:0;;;13316:21:1;13373:2;13353:18;;;13346:30;13412:34;13392:18;;;13385:62;-1:-1:-1;;;13463:18:1;;;13456:33;13506:19;;14537:62:0;13132:399:1;14537:62:0;14614:19;;14604:6;:29;14601:93;;14661:1;14635:15;:28;14665:19;:27;;-1:-1:-1;;14665:27:0;;;14009:694;;;:::o;15258:203::-;15371:4;;-1:-1:-1;;;;;15358:17:0;;;15371:4;;15358:17;:41;;;;-1:-1:-1;;;;;;15380:19:0;;;;;;:11;:19;;;;;;;;15379:20;15358:41;:69;;;;;15413:14;;15403:6;:24;;15358:69;15355:99;;;15450:1;15429:9;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;15258:203:0;;;:::o;18376:173::-;18452:33;18467:6;18475:9;18452:14;:33::i;:::-;18449:93;;;18487:29;18502:13;;18487:14;:29::i;:::-;18538:1;18518:9;:22;18376:173;;:::o;20031:160::-;-1:-1:-1;;;;;20137:19:0;;20112:4;20137:19;;;:11;:19;;;;;;;;20136:20;:47;;;;-1:-1:-1;;;;;;;20161:22:0;;;;;:11;:22;;;;;;;;20160:23;;20031:160;-1:-1:-1;20031:160:0:o;20426:558::-;20512:7;20568:1;20535:30;20547:6;20555:9;20535:11;:30::i;:::-;:34;20532:430;;;20581:17;20601:59;20629:30;20641:6;20649:9;20629:11;:30::i;:::-;20612:11;;20601:23;;:6;;:10;:23::i;:59::-;20716:4;20698:24;;;;:9;:24;;;;;;20581:79;;-1:-1:-1;20698:39:0;;20581:79;20698:28;:39::i;:::-;20689:4;20671:24;;;;:9;:24;;;;;;;:66;;;;20753:42;;-1:-1:-1;;;;;20753:42:0;;;;;;;20785:9;1361:25:1;;1349:2;1334:18;;1215:177;20753:42:0;;;;;;;;20809:8;;:21;20806:116;;20865:14;;20910:8;;20893:11;;20832:88;;20850:4;;-1:-1:-1;;;;;20865:14:0;;;;20882:37;;20910:8;20882:23;;:6;;:10;:23::i;:37::-;20832:9;:88::i;:::-;20939:21;:6;20950:9;20939:10;:21::i;:::-;20932:28;;;;;20532:430;-1:-1:-1;20970:6:0;20426:558;-1:-1:-1;;20426:558:0:o;18034:334::-;18183:13;;18173:4;18116;9584:18;;;:9;:18;;;;;;18215:8;;18116:4;;-1:-1:-1;18155:41:0;;18215:8;;18214:9;:24;;;;-1:-1:-1;18227:11:0;;;;18214:24;:42;;;;-1:-1:-1;18242:14:0;;;;;;;18214:42;:66;;;;-1:-1:-1;;;;;;18261:19:0;;;;;;:11;:19;;;;;;;;18260:20;18214:66;:101;;;;-1:-1:-1;18311:4:0;;-1:-1:-1;;;;;18298:17:0;;;18311:4;;18298:17;18214:101;:128;;;;;18332:10;;18319:9;;:23;;18214:128;:146;;;;;18346:14;18214:146;18207:153;18034:334;-1:-1:-1;;;;18034:334:0:o;16002:1214::-;6237:4;6226:8;;:15;;;;;;;;;;;;;;;;;;16073:20:::1;16096:82;16176:1;16097:73;16159:10;;16097:57;16139:14;;16097:37;16121:12;;16097:19;16114:1;16097:12;;:16;;:19;;;;:::i;:::-;:23:::0;::::1;:37::i;16096:82::-;16073:105;;16189:32;16224:42;16253:12;16224:24;16235:12;;16224:6;:10;;:24;;;;:::i;:42::-;16189:77:::0;-1:-1:-1;16277:14:0::1;16294:36;:6:::0;16189:77;16294:10:::1;:36::i;:::-;16277:53:::0;-1:-1:-1;16366:21:0::1;16398:24;16277:53:::0;16398:16:::1;:24::i;:::-;16433:20;16456:41;:21;16482:14:::0;16456:25:::1;:41::i;:::-;16433:64;;16508:19;16529:48;16546:30;16563:12;;16546;:16;;:30;;;;:::i;:::-;16529:12:::0;;:16:::1;:48::i;:::-;16508:69;;16588:29;16620;16636:12;;16620:11;:15;;:29;;;;:::i;:::-;16588:61:::0;-1:-1:-1;16663:34:0;;16660:123:::1;;16761:18;::::0;16699:81:::1;::::0;16712:24;;16738:21;;-1:-1:-1;;;;;16761:18:0::1;16699:12;:81::i;:::-;16842:12;::::0;16793:23:::1;::::0;16819:36:::1;::::0;:18:::1;:11:::0;16835:1:::1;16819:15;:18::i;:36::-;16793:62:::0;-1:-1:-1;16869:19:0;;16866:79:::1;;16898:18;::::0;16890:53:::1;::::0;-1:-1:-1;;;;;16898:18:0;;::::1;::::0;16890:53;::::1;;;::::0;16927:15;;16898:18:::1;16890:53:::0;16898:18;16890:53;16927:15;16898:18;16890:53;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16866:79;17002:10;::::0;16955:21:::1;::::0;16979:34:::1;::::0;:18:::1;:11:::0;16995:1:::1;16979:15;:18::i;:34::-;16955:58:::0;-1:-1:-1;17027:17:0;;17024:73:::1;;17054:16;::::0;17046:49:::1;::::0;-1:-1:-1;;;;;17054:16:0;;::::1;::::0;17046:49;::::1;;;::::0;17081:13;;17054:16:::1;17046:49:::0;17054:16;17046:49;17081:13;17054:16;17046:49;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17024:73;17110:21;:34:::0;17107:102:::1;;17154:20;::::0;17146:61:::1;::::0;-1:-1:-1;;;;;17154:20:0;;::::1;::::0;17185:21:::1;17146:61:::0;::::1;;;::::0;17154:20:::1;17146:61:::0;17154:20;17146:61;17185:21;17154:20;17146:61;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;17107:102;-1:-1:-1::0;;6246:8:0;:16;;-1:-1:-1;;6246:16:0;;;-1:-1:-1;;;;;;;;16002:1214:0:o;20199:219::-;20314:4;;20278:7;;-1:-1:-1;;;;;20314:4:0;;;20301:17;;;;20298:38;;-1:-1:-1;20327:7:0;;20320:14;;20298:38;20359:4;;-1:-1:-1;;;;;20359:4:0;;;20349:14;;;;20346:36;;-1:-1:-1;20372:8:0;;20365:15;;20346:36;-1:-1:-1;20399:11:0;;20199:219;;;;:::o;17592:434::-;17682:16;;;17696:1;17682:16;;;;;;;;17658:21;;17682:16;;;;;;;;;;-1:-1:-1;17682:16:0;17658:40;;17727:4;17709;17714:1;17709:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17709:23:0;;;:7;;;;;;;;;;:23;;;;17753:6;;:13;;;-1:-1:-1;;;17753:13:0;;;;:6;;;;;:11;;:13;;;;;17709:7;;17753:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17743:4;17748:1;17743:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17743:23:0;;;:7;;;;;;;;;:23;17809:6;;17777:53;;17794:4;;17809:6;17818:11;17777:8;:53::i;:::-;17841:6;;:177;;-1:-1:-1;;;17841:177:0;;-1:-1:-1;;;;;17841:6:0;;;;:57;;:177;;17913:11;;17841:6;;17955:4;;17982;;18002:15;;17841:177;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17647:379;17592:434;:::o;17224:360::-;17355:6;;17323:53;;17340:4;;-1:-1:-1;;;;;17355:6:0;17364:11;17323:8;:53::i;:::-;17387:6;;:189;;-1:-1:-1;;;17387:189:0;;17450:4;17387:189;;;15382:34:1;15432:18;;;15425:34;;;17387:6:0;15475:18:1;;;15468:34;;;15518:18;;;15511:34;-1:-1:-1;;;;;15582:15:1;;;15561:19;;;15554:44;17560:15:0;15614:19:1;;;15607:35;17387:6:0;;;;:22;;17417:9;;15316:19:1;;17387:189:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;1858:180::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;-1:-1:-1;2009:23:1;;1858:180;-1:-1:-1;1858:180:1:o;2043:247::-;2102:6;2155:2;2143:9;2134:7;2130:23;2126:32;2123:52;;;2171:1;2168;2161:12;2123:52;2210:9;2197:23;2229:31;2254:5;2229:31;:::i;2484:316::-;2561:6;2569;2577;2630:2;2618:9;2609:7;2605:23;2601:32;2598:52;;;2646:1;2643;2636:12;2598:52;-1:-1:-1;;2669:23:1;;;2739:2;2724:18;;2711:32;;-1:-1:-1;2790:2:1;2775:18;;;2762:32;;2484:316;-1:-1:-1;2484:316:1:o;2805:118::-;2891:5;2884:13;2877:21;2870:5;2867:32;2857:60;;2913:1;2910;2903:12;2928:382;2993:6;3001;3054:2;3042:9;3033:7;3029:23;3025:32;3022:52;;;3070:1;3067;3060:12;3022:52;3109:9;3096:23;3128:31;3153:5;3128:31;:::i;:::-;3178:5;-1:-1:-1;3235:2:1;3220:18;;3207:32;3248:30;3207:32;3248:30;:::i;:::-;3297:7;3287:17;;;2928:382;;;;;:::o;3523:813::-;3618:6;3626;3634;3642;3650;3703:3;3691:9;3682:7;3678:23;3674:33;3671:53;;;3720:1;3717;3710:12;3671:53;3759:9;3746:23;3778:31;3803:5;3778:31;:::i;:::-;3828:5;-1:-1:-1;3885:2:1;3870:18;;3857:32;3898:33;3857:32;3898:33;:::i;:::-;3950:7;-1:-1:-1;4009:2:1;3994:18;;3981:32;4022:33;3981:32;4022:33;:::i;:::-;4074:7;-1:-1:-1;4133:2:1;4118:18;;4105:32;4146:33;4105:32;4146:33;:::i;:::-;4198:7;-1:-1:-1;4257:3:1;4242:19;;4229:33;4271;4229;4271;:::i;:::-;4323:7;4313:17;;;3523:813;;;;;;;;:::o;4341:388::-;4409:6;4417;4470:2;4458:9;4449:7;4445:23;4441:32;4438:52;;;4486:1;4483;4476:12;4438:52;4525:9;4512:23;4544:31;4569:5;4544:31;:::i;:::-;4594:5;-1:-1:-1;4651:2:1;4636:18;;4623:32;4664:33;4623:32;4664:33;:::i;4734:661::-;4856:6;4864;4872;4880;4888;4896;4904;4912;4965:3;4953:9;4944:7;4940:23;4936:33;4933:53;;;4982:1;4979;4972:12;4933:53;-1:-1:-1;;5005:23:1;;;5075:2;5060:18;;5047:32;;-1:-1:-1;5126:2:1;5111:18;;5098:32;;5177:2;5162:18;;5149:32;;-1:-1:-1;5228:3:1;5213:19;;5200:33;;-1:-1:-1;5280:3:1;5265:19;;5252:33;;-1:-1:-1;5332:3:1;5317:19;;5304:33;;-1:-1:-1;5384:3:1;5369:19;5356:33;;-1:-1:-1;4734:661:1;-1:-1:-1;4734:661:1:o;5660:377::-;5734:6;5742;5750;5803:2;5791:9;5782:7;5778:23;5774:32;5771:52;;;5819:1;5816;5809:12;5771:52;5858:9;5845:23;5877:28;5899:5;5877:28;:::i;:::-;5924:5;5976:2;5961:18;;5948:32;;-1:-1:-1;6027:2:1;6012:18;;;5999:32;;5660:377;-1:-1:-1;;;5660:377:1:o;6042:329::-;6244:2;6226:21;;;6283:1;6263:18;;;6256:29;-1:-1:-1;;;6316:2:1;6301:18;;6294:36;6362:2;6347:18;;6042:329::o;7491:245::-;7558:6;7611:2;7599:9;7590:7;7586:23;7582:32;7579:52;;;7627:1;7624;7617:12;7579:52;7659:9;7653:16;7678:28;7700:5;7678:28;:::i;9585:127::-;9646:10;9641:3;9637:20;9634:1;9627:31;9677:4;9674:1;9667:15;9701:4;9698:1;9691:15;9717:128;9784:9;;;9805:11;;;9802:37;;;9819:18;;:::i;9850:168::-;9923:9;;;9954;;9971:15;;;9965:22;;9951:37;9941:71;;9992:18;;:::i;10023:217::-;10063:1;10089;10079:132;;10133:10;10128:3;10124:20;10121:1;10114:31;10168:4;10165:1;10158:15;10196:4;10193:1;10186:15;10079:132;-1:-1:-1;10225:9:1;;10023:217::o;10245:125::-;10310:9;;;10331:10;;;10328:36;;;10344:18;;:::i;13668:127::-;13729:10;13724:3;13720:20;13717:1;13710:31;13760:4;13757:1;13750:15;13784:4;13781:1;13774:15;13800:251;13870:6;13923:2;13911:9;13902:7;13898:23;13894:32;13891:52;;;13939:1;13936;13929:12;13891:52;13971:9;13965:16;13990:31;14015:5;13990:31;:::i;14056:980::-;14318:4;14366:3;14355:9;14351:19;14397:6;14386:9;14379:25;14423:2;14461:6;14456:2;14445:9;14441:18;14434:34;14504:3;14499:2;14488:9;14484:18;14477:31;14528:6;14563;14557:13;14594:6;14586;14579:22;14632:3;14621:9;14617:19;14610:26;;14671:2;14663:6;14659:15;14645:29;;14692:1;14702:195;14716:6;14713:1;14710:13;14702:195;;;14781:13;;-1:-1:-1;;;;;14777:39:1;14765:52;;14872:15;;;;14837:12;;;;14813:1;14731:9;14702:195;;;-1:-1:-1;;;;;;;14953:32:1;;;;14948:2;14933:18;;14926:60;-1:-1:-1;;;15017:3:1;15002:19;14995:35;14914:3;14056:980;-1:-1:-1;;;14056:980:1:o;15653:306::-;15741:6;15749;15757;15810:2;15798:9;15789:7;15785:23;15781:32;15778:52;;;15826:1;15823;15816:12;15778:52;15855:9;15849:16;15839:26;;15905:2;15894:9;15890:18;15884:25;15874:35;;15949:2;15938:9;15934:18;15928:25;15918:35;;15653:306;;;;;:::o

Swarm Source

ipfs://4678c2313f787885e6cc2d89430e6444f6996dab70767fa528b5a3913d5cbd90

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.