ETH Price: $1,798.87 (+14.06%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Transfer223204532025-04-21 22:46:2328 hrs ago1745275583IN
0xc3dBD99d...4a211428B
0 ETH0.000035510.54178025
Transfer222847192025-04-16 23:04:116 days ago1744844651IN
0xc3dBD99d...4a211428B
0 ETH0.000023980.36578888
Approve222149542025-04-07 5:31:1115 days ago1744003871IN
0xc3dBD99d...4a211428B
0 ETH0.000041890.90462011
Approve220541232025-03-15 18:38:1138 days ago1742063891IN
0xc3dBD99d...4a211428B
0 ETH0.000015230.5800206
Approve220541112025-03-15 18:35:4738 days ago1742063747IN
0xc3dBD99d...4a211428B
0 ETH0.000013540.55833074
Approve220274442025-03-12 1:16:2342 days ago1741742183IN
0xc3dBD99d...4a211428B
0 ETH0.000032050.69203585
Transfer220224402025-03-11 8:28:5942 days ago1741681739IN
0xc3dBD99d...4a211428B
0 ETH0.000049260.70007818
Approve220042442025-03-08 19:28:5945 days ago1741462139IN
0xc3dBD99d...4a211428B
0 ETH0.000032180.69474764
Transfer219873112025-03-06 10:39:5947 days ago1741257599IN
0xc3dBD99d...4a211428B
0 ETH0.000031030.74471887
Approve219214572025-02-25 6:09:1156 days ago1740463751IN
0xc3dBD99d...4a211428B
0 ETH0.000037040.80011738
Approve218812962025-02-19 15:25:4762 days ago1739978747IN
0xc3dBD99d...4a211428B
0 ETH0.000031461.0765008
Approve218620662025-02-16 22:54:1165 days ago1739746451IN
0xc3dBD99d...4a211428B
0 ETH0.000039630.85571164
Withdraw Stuck T...218324752025-02-12 19:25:1169 days ago1739388311IN
0xc3dBD99d...4a211428B
0 ETH0.000244381.78458078
Approve218251342025-02-11 18:41:1170 days ago1739299271IN
0xc3dBD99d...4a211428B
0 ETH0.000058791.26911954
Approve218130512025-02-10 2:11:4772 days ago1739153507IN
0xc3dBD99d...4a211428B
0 ETH0.000040330.87077869
Approve218042772025-02-08 20:47:5973 days ago1739047679IN
0xc3dBD99d...4a211428B
0 ETH0.000044890.96929976
Approve218034142025-02-08 17:53:5973 days ago1739037239IN
0xc3dBD99d...4a211428B
0 ETH0.000050491.09021898
Transfer217897422025-02-06 20:05:5975 days ago1738872359IN
0xc3dBD99d...4a211428B
0 ETH0.000092551.41181533
Transfer217823232025-02-05 19:16:1176 days ago1738782971IN
0xc3dBD99d...4a211428B
0 ETH0.000159642.43469297
Transfer217552232025-02-02 0:22:4780 days ago1738455767IN
0xc3dBD99d...4a211428B
0 ETH0.000137962.10402807
Approve216856202025-01-23 7:12:3589 days ago1737616355IN
0xc3dBD99d...4a211428B
0 ETH0.000199744.31041477
Transfer216852232025-01-23 5:52:5989 days ago1737611579IN
0xc3dBD99d...4a211428B
0 ETH0.000172734.20242678
Approve216413372025-01-17 2:50:1195 days ago1737082211IN
0xc3dBD99d...4a211428B
0 ETH0.000196134.23474291
Transfer216328042025-01-15 22:14:5997 days ago1736979299IN
0xc3dBD99d...4a211428B
0 ETH0.0007922612.5726195
Enable Trading216327792025-01-15 22:09:4797 days ago1736978987IN
0xc3dBD99d...4a211428B
0 ETH0.0004055112.05215767
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer222149542025-04-07 5:31:1115 days ago1744003871
0xc3dBD99d...4a211428B
2 wei
Transfer220274442025-03-12 1:16:2342 days ago1741742183
0xc3dBD99d...4a211428B
2 wei
Transfer220042442025-03-08 19:28:5945 days ago1741462139
0xc3dBD99d...4a211428B
2 wei
Transfer219214572025-02-25 6:09:1156 days ago1740463751
0xc3dBD99d...4a211428B
2 wei
Transfer218812972025-02-19 15:25:5962 days ago1739978759
0xc3dBD99d...4a211428B
2 wei
Transfer218620662025-02-16 22:54:1165 days ago1739746451
0xc3dBD99d...4a211428B
2 wei
Transfer218251342025-02-11 18:41:1170 days ago1739299271
0xc3dBD99d...4a211428B
2 wei
Transfer218130532025-02-10 2:12:1172 days ago1739153531
0xc3dBD99d...4a211428B
2 wei
Transfer218042772025-02-08 20:47:5973 days ago1739047679
0xc3dBD99d...4a211428B
2 wei
Transfer218034142025-02-08 17:53:5973 days ago1739037239
0xc3dBD99d...4a211428B
2 wei
Transfer203643472024-07-22 20:06:47274 days ago1721678807
0xc3dBD99d...4a211428B
0.57540901 ETH
Transfer190101432024-01-15 5:17:47463 days ago1705295867
0xc3dBD99d...4a211428B
0.00748127 ETH
Transfer190101432024-01-15 5:17:47463 days ago1705295867
0xc3dBD99d...4a211428B
0.01384036 ETH
Transfer190101432024-01-15 5:17:47463 days ago1705295867
0xc3dBD99d...4a211428B
0.01047378 ETH
Transfer190101432024-01-15 5:17:47463 days ago1705295867
0xc3dBD99d...4a211428B
0.01683287 ETH
Add Liquidity ET...190101432024-01-15 5:17:47463 days ago1705295867
0xc3dBD99d...4a211428B
0.00187031 ETH
Transfer190101432024-01-15 5:17:47463 days ago1705295867
0xc3dBD99d...4a211428B
0.05236894 ETH
Transfer190093992024-01-15 2:47:35464 days ago1705286855
0xc3dBD99d...4a211428B
0.00233995 ETH
Transfer190093992024-01-15 2:47:35464 days ago1705286855
0xc3dBD99d...4a211428B
0.00432891 ETH
Transfer190093992024-01-15 2:47:35464 days ago1705286855
0xc3dBD99d...4a211428B
0.00327593 ETH
Transfer190093992024-01-15 2:47:35464 days ago1705286855
0xc3dBD99d...4a211428B
0.0052649 ETH
Add Liquidity ET...190093992024-01-15 2:47:35464 days ago1705286855
0xc3dBD99d...4a211428B
0.00058498 ETH
Transfer190093992024-01-15 2:47:35464 days ago1705286855
0xc3dBD99d...4a211428B
0.01637969 ETH
Transfer190077642024-01-14 21:19:35464 days ago1705267175
0xc3dBD99d...4a211428B
0.01708415 ETH
Transfer190077642024-01-14 21:19:35464 days ago1705267175
0xc3dBD99d...4a211428B
0.03160567 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
LYF

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-06-26
*/

//SPDX-License-Identifier: MIT
pragma solidity 0.8.19;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

library SafeMath {

    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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (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 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 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 DexFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface DexRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);

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

contract LYF is ERC20, Ownable {
    using SafeMath for uint256;


    uint256 private constant _totalSupply = 120_000_000 * 1e18;

    //Router
    DexRouter public immutable uniswapRouter;
    address public immutable pairAddress;

    //Buy Taxes
    uint256 public BuyFinanceTax = 20;
    uint256 public BuyTreasury = 13;
    uint256 public BuyFoundation = 17;
    uint256 public BuyRewards = 10;
    uint256 public BuyAutoLiquidity = 0;

    uint256 public buyTaxes = BuyFinanceTax + BuyTreasury + BuyFoundation+ BuyRewards + BuyAutoLiquidity;

    //Sell Taxes
    uint256 public SellFinanceTax = 25;
    uint256 public SellTreasury = 15;
    uint256 public SellFoundation = 20;
    uint256 public SellRewards = 10;
    uint256 public SellAutoLiquidity = 10;

    uint256 public sellTaxes = SellFinanceTax + SellTreasury + SellFoundation + SellRewards + SellAutoLiquidity;

    //Transfer Taxes
    uint256 public transferTaxes = 0;

    //Whitelisting from taxes and trading limits
    mapping(address => bool) private whitelisted;

    //Blacklist wallets
    mapping(address => bool) private blacklisted;

    //Swapping
    uint256 public swapTokensAtAmount = _totalSupply / 100000; //Collect 0.001% of total supply to swap to taxes
    bool public swapAndLiquifyEnabled = true;
    bool public isSwapping = false;
    bool public tradingEnabled = false;
    uint256 public startTradingBlock;

    //Wallets

    address payable public FinanceAddress = payable(0x313DF74b4C441c1aD253D89Bb172141B8bA213b1);
    address payable public TreasuryAddress = payable(0x92C2a076680c0B47f717ac587bf0b895Dde3B252);
    address payable public FoundationAddress = payable(0xE4752A7EBC1948Cb8E01234df49e6e576e1931e3);
    address payable public RewardsAddress = payable(0x16dDbD8D5C7E11Fb7a819B55D6A78E03A909d828);

    //Events
    event FinanceAddressChanged(address indexed _trWallet); 
    event TreasuryAddressChanged(address indexed _trWallet);
    event FoundationAddressChanged(address indexed _trWallet);
    event RewardsAddressChanged(address indexed _trWallet);
    event BuyFeesUpdated(uint256 indexed newBuyFinanceTax, uint256 newBuyTreasury, uint256 newBuyFoundation, uint256 newBuyRewards, uint256 newBuyAutoLiquidity);
    event SellFeesUpdated(uint256 indexed newSellFinanceTax, uint256 newSellTreasury, uint256 newSellFoundation, uint256 newSellRewards, uint256 newSellAutoLiquidity);
    event SwapThresholdUpdated(uint256 indexed _newThreshold);
    event InternalSwapStatusUpdated(bool indexed _status);
    event Whitelist(address indexed _target, bool indexed _status);
    event Blacklist(address indexed _target, bool indexed _status);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    constructor() ERC20("Lillian Token", "LYF") {

        uniswapRouter = DexRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pairAddress = DexFactory(uniswapRouter.factory()).createPair(
            address(this),
            uniswapRouter.WETH()
        );
        whitelisted[msg.sender] = true;
        whitelisted[address(uniswapRouter)] = true;
        whitelisted[FoundationAddress] = true;
        whitelisted[TreasuryAddress] = true;
        whitelisted[FinanceAddress] = true;
        whitelisted[RewardsAddress] = true;
        whitelisted[address(this)] = true;       
        _mint(0xeCe1129c4518dA93C802648d5220D34Bcc7e9AC0, _totalSupply);

    }

    function setFinanceAddress(address _newaddress) external onlyOwner {
        require(_newaddress != address(0), "can not set marketing to dead wallet");
        FinanceAddress = payable(_newaddress);
        emit FinanceAddressChanged(_newaddress);
    }

    function setTreasuryAddress(address _newaddress) external onlyOwner {
        require(_newaddress != address(0), "can not set marketing to dead wallet");
        TreasuryAddress = payable(_newaddress);
        emit TreasuryAddressChanged(_newaddress);
    }

    function setFoundationAddress(address _newaddress) external onlyOwner {
        require(_newaddress != address(0), "can not set marketing to dead wallet");
        FoundationAddress = payable(_newaddress);
        emit FoundationAddressChanged(_newaddress);
    }

    function setRewardsAddress(address _newaddress) external onlyOwner {
        require(_newaddress != address(0), "can not set marketing to dead wallet");
        RewardsAddress = payable(_newaddress);
        emit RewardsAddressChanged(_newaddress);
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        startTradingBlock = block.number;
    }

    function disableTrading() external onlyOwner {
        require(tradingEnabled, "Trading is already disabled");
        tradingEnabled = false;
    }

    function setBuyTaxes(uint256 _newBuyFinanceTax, uint256 _newBuyTreasury, uint256 _newBuyFoundation, uint256 _newBuyRewards, uint256 _newBuyAutoLiquidity) external onlyOwner {
        BuyFinanceTax = _newBuyFinanceTax;
        BuyTreasury = _newBuyTreasury;
        BuyFoundation = _newBuyFoundation;
        BuyRewards = _newBuyRewards;
        BuyAutoLiquidity = _newBuyAutoLiquidity;
        buyTaxes = BuyFinanceTax.add(BuyTreasury).add(BuyFoundation).add(BuyRewards).add(BuyAutoLiquidity);
        emit BuyFeesUpdated(BuyFinanceTax, BuyTreasury, BuyFoundation, BuyRewards, BuyAutoLiquidity);
    }

    function setSellTaxes(uint256 _newSellFinanceTax, uint256 _newSellTreasury, uint256 _newSellFoundation, uint256 _newSellRewards, uint256 _newSellAutoLiquidity) external onlyOwner {
        SellFinanceTax = _newSellFinanceTax;
        SellTreasury = _newSellTreasury;
        SellFoundation = _newSellFoundation;
        SellRewards = _newSellRewards;
        SellAutoLiquidity = _newSellAutoLiquidity;
        sellTaxes = SellFinanceTax.add(SellTreasury).add(SellFoundation).add(SellRewards).add(SellAutoLiquidity);
        emit SellFeesUpdated(SellFinanceTax, SellTreasury, SellFoundation, SellRewards, SellAutoLiquidity);
    }

    function setSwapTokensAtAmount(uint256 _newAmount) external onlyOwner {
        require(_newAmount > 0 && _newAmount <= (_totalSupply * 5) / 1000, "Minimum swap amount must be greater than 0 and less than 0.5% of total supply!");
        swapTokensAtAmount = _newAmount;
        emit SwapThresholdUpdated(swapTokensAtAmount);
    }

    function toggleSwapping() external onlyOwner {
        swapAndLiquifyEnabled = (swapAndLiquifyEnabled) ? false : true;
    }

    function setWhitelistStatus(address _wallet, bool _status) external onlyOwner {
        whitelisted[_wallet] = _status;
        emit Whitelist(_wallet, _status);
    }

    function setBlacklist(address _address, bool _isBlacklisted) external onlyOwner {
        blacklisted[_address] = _isBlacklisted;
        emit Blacklist(_address, _isBlacklisted);
    }

    function checkWhitelist(address _wallet) external view returns (bool) {
        return whitelisted[_wallet];
    }

    function checkBlacklist(address _address) external view returns (bool) {
        return blacklisted[_address];
    }

    // this function is reponsible for managing tax, if _from or _to is whitelisted, we simply return _amount and skip all the limitations
    function _takeTax(
        address _from,
        address _to,
        uint256 _amount
    ) internal returns (uint256) {
        if (whitelisted[_from] || whitelisted[_to]) {
            return _amount;
        }
        uint256 totalTax = transferTaxes;

        if (_to == pairAddress) {
            totalTax = sellTaxes;
        } else if (_from == pairAddress) {
            totalTax = buyTaxes;
        }

        uint256 tax = 0;
        if (totalTax > 0) {
            tax = (_amount * totalTax) / 1000;
            super._transfer(_from, address(this), tax);
        }
        return (_amount - tax);
    }

function _transfer(
    address _from,
    address _to,
    uint256 _amount
) internal virtual override {
    require(_from != address(0), "transfer from address zero");
    require(_to != address(0), "transfer to address zero");
    require(_amount > 0, "Transfer amount must be greater than zero");
    require(!blacklisted[_from], "Transfer from blacklisted address");
    require(!blacklisted[_to], "Transfer to blacklisted address");
    uint256 toTransfer = _takeTax(_from, _to, _amount);

    bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;
    if (
        !whitelisted[_from] &&
        !whitelisted[_to] &&
        !blacklisted[_from] &&
        !blacklisted[_to] 
    ) {
        require(tradingEnabled, "Trading not active");
        if (
            pairAddress == _to &&
            swapAndLiquifyEnabled &&
            canSwap &&
            !isSwapping
        ) {
            internalSwap();
        }
    }
    super._transfer(_from, _to, toTransfer);
}

    function internalSwap() internal {
    isSwapping = true;
    uint256 taxAmount = balanceOf(address(this)); 
    if (taxAmount == 0) {
        return;
    }

    uint256 totalFee = (buyTaxes).add(sellTaxes);

    uint256 FinanceShare =(BuyFinanceTax).add(SellFinanceTax);
    uint256 TreasuryShare = (BuyTreasury).add(SellTreasury);
    uint256 FoundationShare =(BuyFoundation).add(SellFoundation);
    uint256 RewardsShare =(BuyRewards).add(SellRewards);
    uint256 LiquidityShare =(BuyAutoLiquidity).add(SellAutoLiquidity);

    if (LiquidityShare == 0) {
        totalFee = FinanceShare.add(TreasuryShare).add(FoundationShare).add(RewardsShare);
    }

    uint256 halfLPTokens = 0;
    if (totalFee > 0) {
        halfLPTokens = taxAmount.mul(LiquidityShare).div(totalFee).div(2);
    }
    uint256 swapTokens = taxAmount.sub(halfLPTokens);
    uint256 initialBalance = address(this).balance;
    swapToETH(swapTokens);
    uint256 newBalance = address(this).balance.sub(initialBalance);

    uint256 ethForLiquidity = 0;
    if (LiquidityShare > 0) {
        ethForLiquidity = newBalance.mul(LiquidityShare).div(totalFee).div(2);
    
    addLiquidity(halfLPTokens, ethForLiquidity);
    emit SwapAndLiquify(halfLPTokens, ethForLiquidity, halfLPTokens);
    }
    uint256 ethForFinance = newBalance.mul(FinanceShare).div(totalFee);
    uint256 ethForTreasury = newBalance.mul(TreasuryShare).div(totalFee);
    uint256 ethForFoundation = newBalance.mul(FoundationShare).div(totalFee);
    uint256 ethForRewards = newBalance.mul(RewardsShare).div(totalFee);

    transferToAddressETH(FinanceAddress, ethForFinance);
    transferToAddressETH(TreasuryAddress, ethForTreasury);
    transferToAddressETH(FoundationAddress, ethForFoundation);
    transferToAddressETH(RewardsAddress, ethForRewards);

    isSwapping = false;
}

    function transferToAddressETH(address payable recipient, uint256 amount) private 
    {
        recipient.transfer(amount);
    }    

    function swapToETH(uint256 _amount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();
        _approve(address(this), address(uniswapRouter), _amount);
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
    
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapRouter), tokenAmount);

        // add the liquidity
        uniswapRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function withdrawStuckETH() external onlyOwner {
        uint256 balance = address(this).balance;
        require(balance > 0, "No ETH available to withdraw");

        (bool success, ) = address(msg.sender).call{value: balance}("");
        require(success, "transferring ETH failed");
    }

    function withdrawStuckTokens(address ERC20_token) external onlyOwner {
        require(ERC20_token != address(this), "Owner cannot claim native tokens");

        uint256 tokenBalance = IERC20(ERC20_token).balanceOf(address(this));
        require(tokenBalance > 0, "No tokens available to withdraw");

        bool success = IERC20(ERC20_token).transfer(msg.sender, tokenBalance);
        require(success, "transferring tokens failed!");
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_target","type":"address"},{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"Blacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newBuyFinanceTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyFoundation","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyRewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBuyAutoLiquidity","type":"uint256"}],"name":"BuyFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_trWallet","type":"address"}],"name":"FinanceAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_trWallet","type":"address"}],"name":"FoundationAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"InternalSwapStatusUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_trWallet","type":"address"}],"name":"RewardsAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newSellFinanceTax","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellTreasury","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellFoundation","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellRewards","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newSellAutoLiquidity","type":"uint256"}],"name":"SellFeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"_newThreshold","type":"uint256"}],"name":"SwapThresholdUpdated","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":"_trWallet","type":"address"}],"name":"TreasuryAddressChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_target","type":"address"},{"indexed":true,"internalType":"bool","name":"_status","type":"bool"}],"name":"Whitelist","type":"event"},{"inputs":[],"name":"BuyAutoLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyFinanceTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyFoundation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BuyTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FinanceAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FoundationAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RewardsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellAutoLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFinanceTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFoundation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellTreasury","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TreasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"checkBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"checkWhitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisted","type":"bool"}],"name":"setBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newBuyFinanceTax","type":"uint256"},{"internalType":"uint256","name":"_newBuyTreasury","type":"uint256"},{"internalType":"uint256","name":"_newBuyFoundation","type":"uint256"},{"internalType":"uint256","name":"_newBuyRewards","type":"uint256"},{"internalType":"uint256","name":"_newBuyAutoLiquidity","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setFinanceAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setFoundationAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setRewardsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newSellFinanceTax","type":"uint256"},{"internalType":"uint256","name":"_newSellTreasury","type":"uint256"},{"internalType":"uint256","name":"_newSellFoundation","type":"uint256"},{"internalType":"uint256","name":"_newSellRewards","type":"uint256"},{"internalType":"uint256","name":"_newSellAutoLiquidity","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newaddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"setWhitelistStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"toggleSwapping","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTaxes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract DexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"ERC20_token","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526014600655600d6007556011600855600a6009556000600a55600a546009546008546007546006546200003891906200056b565b6200004491906200056b565b6200005091906200056b565b6200005c91906200056b565b600b556019600c55600f600d556014600e55600a600f55600a601055601054600f54600e54600d54600c546200009391906200056b565b6200009f91906200056b565b620000ab91906200056b565b620000b791906200056b565b6011556000601255620000d9620186a06a6342fd08f00f637800000062000593565b6015556016805462ffffff19166001179055601880546001600160a01b031990811673313df74b4c441c1ad253d89bb172141b8ba213b1179091556019805482167392c2a076680c0b47f717ac587bf0b895dde3b252179055601a8054821673e4752a7ebc1948cb8e01234df49e6e576e1931e3179055601b80549091167316ddbd8d5c7e11fb7a819b55d6a78e03a909d8281790553480156200017c57600080fd5b506040518060400160405280600d81526020016c2634b63634b0b7102a37b5b2b760991b81525060405180604001604052806003815260200162262ca360e91b8152508160039081620001d091906200065a565b506004620001df82826200065a565b505050620001fc620001f66200042860201b60201c565b6200042c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000252573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000278919062000726565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000726565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200033c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000362919062000726565b6001600160a01b0390811660a052336000908152601360205260408082208054600160ff199182168117909255608051851684528284208054821683179055601a54851684528284208054821683179055601954851684528284208054821683179055601854851684528284208054821683179055601b5490941683528183208054851682179055308352912080549092161790556200042273ece1129c4518da93c802648d5220d34bcc7e9ac06a6342fd08f00f63780000006200047e565b62000758565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620004d95760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060026000828254620004ed91906200056b565b90915550506001600160a01b038216600090815260208190526040812080548392906200051c9084906200056b565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b808201808211156200058d57634e487b7160e01b600052601160045260246000fd5b92915050565b600082620005b157634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005e157607f821691505b6020821081036200060257634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200056657600081815260208120601f850160051c81016020861015620006315750805b601f850160051c820191505b8181101562000652578281556001016200063d565b505050505050565b81516001600160401b03811115620006765762000676620005b6565b6200068e81620006878454620005cc565b8462000608565b602080601f831160018114620006c65760008415620006ad5750858301515b600019600386901b1c1916600185901b17855562000652565b600085815260208120601f198616915b82811015620006f757888601518255948401946001909101908401620006d6565b5085821015620007165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200073957600080fd5b81516001600160a01b03811681146200075157600080fd5b9392505050565b60805160a0516128cd620007b66000396000818161074601528181611b9a01528181611cc30152611cf701526000818161063201528181612213015281816122cc015281816123080152818161238201526123a901526128cd6000f3fe6080604052600436106103395760003560e01c80638da5cb5b116101ab578063cb963728116100f7578063e7d08c0711610095578063f41377ca1161006f578063f41377ca14610989578063f5648a4f146109a9578063f66895a3146109be578063fa5a8792146109d457600080fd5b8063e7d08c071461093e578063ef586f7114610954578063f2fde38b1461096957600080fd5b8063dd6c7689116100d1578063dd6c7689146108c3578063de5e7f86146108d9578063e2f45605146108ef578063e6807ca91461090557600080fd5b8063cb9637281461083d578063ce7ca6151461085d578063dd62ed3e1461087d57600080fd5b8063a9059cbb11610164578063b88631151161013e578063b8863115146107be578063c054f2f4146107dd578063c2dd47a8146107fd578063c791fc541461081d57600080fd5b8063a9059cbb14610768578063ac4cf0c014610788578063afa4f3b21461079e57600080fd5b80638da5cb5b146106b557806395d89b41146106d3578063a44ae040146106e8578063a457c2d7146106fe578063a4744d731461071e578063a8b089821461073457600080fd5b80634ada218b1161028557806370a082311161022357806376be96f3116101fd57806376be96f314610654578063864701a51461066a5780638906758d146106805780638a8c523c146106a057600080fd5b806370a08231146105d5578063715018a61461060b578063735de9f71461062057600080fd5b80635b5c251f1161025f5780635b5c251f146105515780636605bfda1461058957806368831a80146105a9578063707b51f6146105bf57600080fd5b80634ada218b146104fb5780634e5df7501461051b5780635331803c1461053b57600080fd5b80631950c218116102f2578063313ce567116102cc578063313ce5671461048557806339509351146104a157806340ac48d3146104c15780634a74bb02146104e157600080fd5b80631950c21814610416578063232272ff1461044f57806323b872dd1461046557600080fd5b806306fdde0314610345578063095ea7b3146103705780630c424284146103a0578063153b0d1e146103c257806317700f01146103e257806318160ddd146103f757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109ea565b60405161036791906124b1565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612514565b610a7c565b6040519015158152602001610367565b3480156103ac57600080fd5b506103c06103bb36600461254e565b610a93565b005b3480156103ce57600080fd5b506103c06103dd36600461254e565b610b1a565b3480156103ee57600080fd5b506103c0610b98565b34801561040357600080fd5b506002545b604051908152602001610367565b34801561042257600080fd5b50610390610431366004612587565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561045b57600080fd5b5061040860085481565b34801561047157600080fd5b506103906104803660046125a4565b610c28565b34801561049157600080fd5b5060405160128152602001610367565b3480156104ad57600080fd5b506103906104bc366004612514565b610cd4565b3480156104cd57600080fd5b506103c06104dc3660046125e5565b610d10565b3480156104ed57600080fd5b506016546103909060ff1681565b34801561050757600080fd5b506016546103909062010000900460ff1681565b34801561052757600080fd5b506103c0610536366004612587565b610dca565b34801561054757600080fd5b5061040860125481565b34801561055d57600080fd5b50601954610571906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b34801561059557600080fd5b506103c06105a4366004612587565b610e64565b3480156105b557600080fd5b50610408600a5481565b3480156105cb57600080fd5b5061040860095481565b3480156105e157600080fd5b506104086105f0366004612587565b6001600160a01b031660009081526020819052604090205490565b34801561061757600080fd5b506103c0610efe565b34801561062c57600080fd5b506105717f000000000000000000000000000000000000000000000000000000000000000081565b34801561066057600080fd5b5061040860175481565b34801561067657600080fd5b50610408600b5481565b34801561068c57600080fd5b506103c061069b366004612587565b610f34565b3480156106ac57600080fd5b506103c0610fce565b3480156106c157600080fd5b506005546001600160a01b0316610571565b3480156106df57600080fd5b5061035a611068565b3480156106f457600080fd5b5061040860075481565b34801561070a57600080fd5b50610390610719366004612514565b611077565b34801561072a57600080fd5b5061040860065481565b34801561074057600080fd5b506105717f000000000000000000000000000000000000000000000000000000000000000081565b34801561077457600080fd5b50610390610783366004612514565b611110565b34801561079457600080fd5b50610408600d5481565b3480156107aa57600080fd5b506103c06107b9366004612620565b61111d565b3480156107ca57600080fd5b5060165461039090610100900460ff1681565b3480156107e957600080fd5b50601b54610571906001600160a01b031681565b34801561080957600080fd5b50601854610571906001600160a01b031681565b34801561082957600080fd5b506103c06108383660046125e5565b611235565b34801561084957600080fd5b506103c0610858366004612587565b6112de565b34801561086957600080fd5b50601a54610571906001600160a01b031681565b34801561088957600080fd5b50610408610898366004612639565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108cf57600080fd5b50610408600f5481565b3480156108e557600080fd5b5061040860105481565b3480156108fb57600080fd5b5061040860155481565b34801561091157600080fd5b50610390610920366004612587565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561094a57600080fd5b50610408600c5481565b34801561096057600080fd5b506103c06114e5565b34801561097557600080fd5b506103c0610984366004612587565b611536565b34801561099557600080fd5b506103c06109a4366004612587565b6115d1565b3480156109b557600080fd5b506103c061166b565b3480156109ca57600080fd5b5061040860115481565b3480156109e057600080fd5b50610408600e5481565b6060600380546109f990612667565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2590612667565b8015610a725780601f10610a4757610100808354040283529160200191610a72565b820191906000526020600020905b815481529060010190602001808311610a5557829003601f168201915b5050505050905090565b6000610a8933848461177f565b5060015b92915050565b6005546001600160a01b03163314610ac65760405162461bcd60e51b8152600401610abd906126a1565b60405180910390fd5b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d91a35050565b6005546001600160a01b03163314610b445760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038216600081815260146020526040808220805460ff191685151590811790915590519092917ff7e58a63a036e3a7ef7921f83b6ae47930cf5c293dd3bfe7a857c6863409046d91a35050565b6005546001600160a01b03163314610bc25760405162461bcd60e51b8152600401610abd906126a1565b60165462010000900460ff16610c1a5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c72656164792064697361626c656400000000006044820152606401610abd565b6016805462ff000019169055565b6000610c358484846118a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cba5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abd565b610cc7853385840361177f565b60019150505b9392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a89918590610d0b9086906126ec565b61177f565b6005546001600160a01b03163314610d3a5760405162461bcd60e51b8152600401610abd906126a1565b6006859055600784905560088390556009829055600a819055610d6b81610d65848187818b8b611c0d565b90611c0d565b600b55600654600754600854600954600a546040805194855260208501939093529183015260608201527f733eb8db6a5cd6df046e76030e911fe8600da82fc87cd448268aa418efcad5f9906080015b60405180910390a25050505050565b6005546001600160a01b03163314610df45760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610e1a5760405162461bcd60e51b8152600401610abd906126ff565b601880546001600160a01b0319166001600160a01b0383169081179091556040517f64d07b7b0d48d6c3b5e1005826e76097aaee8adef5bea0f66f453ee05f0f896790600090a250565b6005546001600160a01b03163314610e8e5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610eb45760405162461bcd60e51b8152600401610abd906126ff565b601980546001600160a01b0319166001600160a01b0383169081179091556040517f9073dfac663173e64aa95665faedae52e2246f9bcdd3890fbfaf6733b46bba1390600090a250565b6005546001600160a01b03163314610f285760405162461bcd60e51b8152600401610abd906126a1565b610f326000611c19565b565b6005546001600160a01b03163314610f5e5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610f845760405162461bcd60e51b8152600401610abd906126ff565b601b80546001600160a01b0319166001600160a01b0383169081179091556040517f251a2e4478aadd97db6528862f79a28a6813b79f35d6760c60b67be5e84bba5190600090a250565b6005546001600160a01b03163314610ff85760405162461bcd60e51b8152600401610abd906126a1565b60165462010000900460ff16156110515760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610abd565b6016805462ff000019166201000017905543601755565b6060600480546109f990612667565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abd565b611106338585840361177f565b5060019392505050565b6000610a893384846118a3565b6005546001600160a01b031633146111475760405162461bcd60e51b8152600401610abd906126a1565b60008111801561117957506103e861116b6a6342fd08f00f63780000006005612743565b611175919061275a565b8111155b6112025760405162461bcd60e51b815260206004820152604e60248201527f4d696e696d756d207377617020616d6f756e74206d757374206265206772656160448201527f746572207468616e203020616e64206c657373207468616e20302e3525206f6660648201526d20746f74616c20737570706c792160901b608482015260a401610abd565b601581905560405181907f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690600090a250565b6005546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610abd906126a1565b600c859055600d849055600e839055600f829055601081905561128a81610d65848187818b8b611c0d565b601155600c54600d54600e54600f546010546040805194855260208501939093529183015260608201527fa52bd0cf705f42201d4097dc2e9c2b39d0a1b7529e8d121faed89fd30bcf236f90608001610dbb565b6005546001600160a01b031633146113085760405162461bcd60e51b8152600401610abd906126a1565b306001600160a01b038216036113605760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610abd565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156113a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cb919061277c565b90506000811161141d5760405162461bcd60e51b815260206004820152601f60248201527f4e6f20746f6b656e7320617661696c61626c6520746f207769746864726177006044820152606401610abd565b60405163a9059cbb60e01b8152336004820152602481018290526000906001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561146d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114919190612795565b9050806114e05760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657272696e6720746f6b656e73206661696c65642100000000006044820152606401610abd565b505050565b6005546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610abd906126a1565b60165460ff16611520576001611523565b60005b6016805460ff1916911515919091179055565b6005546001600160a01b031633146115605760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b0381166115c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abd565b6115ce81611c19565b50565b6005546001600160a01b031633146115fb5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b0381166116215760405162461bcd60e51b8152600401610abd906126ff565b601a80546001600160a01b0319166001600160a01b0383169081179091556040517f95203be801b3b4835c73e166c564816fba4ae2f167907273eb1c85263ec9882d90600090a250565b6005546001600160a01b031633146116955760405162461bcd60e51b8152600401610abd906126a1565b47806116e35760405162461bcd60e51b815260206004820152601c60248201527f4e6f2045544820617661696c61626c6520746f207769746864726177000000006044820152606401610abd565b604051600090339083908381818185875af1925050503d8060008114611725576040519150601f19603f3d011682016040523d82523d6000602084013e61172a565b606091505b505090508061177b5760405162461bcd60e51b815260206004820152601760248201527f7472616e7366657272696e6720455448206661696c65640000000000000000006044820152606401610abd565b5050565b6001600160a01b0383166117e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abd565b6001600160a01b0382166118425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118f95760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f0000000000006044820152606401610abd565b6001600160a01b03821661194f5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f00000000000000006044820152606401610abd565b600081116119b15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610abd565b6001600160a01b03831660009081526014602052604090205460ff1615611a245760405162461bcd60e51b815260206004820152602160248201527f5472616e736665722066726f6d20626c61636b6c6973746564206164647265736044820152607360f81b6064820152608401610abd565b6001600160a01b03821660009081526014602052604090205460ff1615611a8d5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220746f20626c61636b6c69737465642061646472657373006044820152606401610abd565b6000611a9a848484611c6b565b60155430600090815260208181526040808320546001600160a01b038a16845260139092529091205492935010159060ff16158015611af257506001600160a01b03841660009081526013602052604090205460ff16155b8015611b1757506001600160a01b03851660009081526014602052604090205460ff16155b8015611b3c57506001600160a01b03841660009081526014602052604090205460ff16155b15611bfb5760165462010000900460ff16611b8e5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610abd565b836001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316148015611bd1575060165460ff165b8015611bda5750805b8015611bee5750601654610100900460ff16155b15611bfb57611bfb611d73565b611c06858584611fc9565b5050505050565b6000610ccd82846126ec565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831660009081526013602052604081205460ff1680611caa57506001600160a01b03831660009081526013602052604090205460ff165b15611cb6575080610ccd565b6012546001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690851603611cf55750601154611d33565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031603611d335750600b545b60008115611d5f576103e8611d488386612743565b611d52919061275a565b9050611d5f863083611fc9565b611d6981856127b2565b9695505050505050565b6016805461ff00191661010017905530600090815260208190526040812054905080600003611d9f5750565b6000611db8601154600b54611c0d90919063ffffffff16565b90506000611dd3600c54600654611c0d90919063ffffffff16565b90506000611dee600d54600754611c0d90919063ffffffff16565b90506000611e09600e54600854611c0d90919063ffffffff16565b90506000611e24600f54600954611c0d90919063ffffffff16565b90506000611e3f601054600a54611c0d90919063ffffffff16565b905080600003611e5c57611e5982610d6585818989611c0d565b95505b60008615611e7e57611e7b6002611e7589818c87612198565b906121a4565b90505b6000611e8a89836121b0565b905047611e96826121bc565b6000611ea247836121b0565b905060008515611f0b57611ebd6002611e758d81868b612198565b9050611ec9858261237c565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611f1b8c611e75858e612198565b90506000611f2d8d611e75868e612198565b90506000611f3f8e611e75878e612198565b90506000611f518f611e75888e612198565b601854909150611f6a906001600160a01b03168561247b565b601954611f80906001600160a01b03168461247b565b601a54611f96906001600160a01b03168361247b565b601b54611fac906001600160a01b03168261247b565b50506016805461ff00191690555050505050505050505050505050565b6001600160a01b03831661202d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610abd565b6001600160a01b03821661208f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610abd565b6001600160a01b038316600090815260208190526040902054818110156121075760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abd565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061213e9084906126ec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161218a91815260200190565b60405180910390a350505050565b6000610ccd8284612743565b6000610ccd828461275a565b6000610ccd82846127b2565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121f1576121f16127c5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229391906127db565b816001815181106122a6576122a66127c5565b60200260200101906001600160a01b031690816001600160a01b0316815250506122f1307f00000000000000000000000000000000000000000000000000000000000000008461177f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123469085906000908690309042906004016127f8565b600060405180830381600087803b15801561236057600080fd5b505af1158015612374573d6000803e3d6000fd5b505050505050565b6123a7307f00000000000000000000000000000000000000000000000000000000000000008461177f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806123ee6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612456573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c069190612869565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156114e0573d6000803e3d6000fd5b600060208083528351808285015260005b818110156124de578581018301518582016040015282016124c2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115ce57600080fd5b6000806040838503121561252757600080fd5b8235612532816124ff565b946020939093013593505050565b80151581146115ce57600080fd5b6000806040838503121561256157600080fd5b823561256c816124ff565b9150602083013561257c81612540565b809150509250929050565b60006020828403121561259957600080fd5b8135610ccd816124ff565b6000806000606084860312156125b957600080fd5b83356125c4816124ff565b925060208401356125d4816124ff565b929592945050506040919091013590565b600080600080600060a086880312156125fd57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561263257600080fd5b5035919050565b6000806040838503121561264c57600080fd5b8235612657816124ff565b9150602083013561257c816124ff565b600181811c9082168061267b57607f821691505b60208210810361269b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8d57610a8d6126d6565b60208082526024908201527f63616e206e6f7420736574206d61726b6574696e6720746f20646561642077616040820152631b1b195d60e21b606082015260800190565b8082028115828204841417610a8d57610a8d6126d6565b60008261277757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561278e57600080fd5b5051919050565b6000602082840312156127a757600080fd5b8151610ccd81612540565b81810381811115610a8d57610a8d6126d6565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127ed57600080fd5b8151610ccd816124ff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128485784516001600160a01b031683529383019391830191600101612823565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561287e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d5059759ec8cb10bd5bcf37fbf0908978c51512d6118ed04673e3007e28f279d64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103395760003560e01c80638da5cb5b116101ab578063cb963728116100f7578063e7d08c0711610095578063f41377ca1161006f578063f41377ca14610989578063f5648a4f146109a9578063f66895a3146109be578063fa5a8792146109d457600080fd5b8063e7d08c071461093e578063ef586f7114610954578063f2fde38b1461096957600080fd5b8063dd6c7689116100d1578063dd6c7689146108c3578063de5e7f86146108d9578063e2f45605146108ef578063e6807ca91461090557600080fd5b8063cb9637281461083d578063ce7ca6151461085d578063dd62ed3e1461087d57600080fd5b8063a9059cbb11610164578063b88631151161013e578063b8863115146107be578063c054f2f4146107dd578063c2dd47a8146107fd578063c791fc541461081d57600080fd5b8063a9059cbb14610768578063ac4cf0c014610788578063afa4f3b21461079e57600080fd5b80638da5cb5b146106b557806395d89b41146106d3578063a44ae040146106e8578063a457c2d7146106fe578063a4744d731461071e578063a8b089821461073457600080fd5b80634ada218b1161028557806370a082311161022357806376be96f3116101fd57806376be96f314610654578063864701a51461066a5780638906758d146106805780638a8c523c146106a057600080fd5b806370a08231146105d5578063715018a61461060b578063735de9f71461062057600080fd5b80635b5c251f1161025f5780635b5c251f146105515780636605bfda1461058957806368831a80146105a9578063707b51f6146105bf57600080fd5b80634ada218b146104fb5780634e5df7501461051b5780635331803c1461053b57600080fd5b80631950c218116102f2578063313ce567116102cc578063313ce5671461048557806339509351146104a157806340ac48d3146104c15780634a74bb02146104e157600080fd5b80631950c21814610416578063232272ff1461044f57806323b872dd1461046557600080fd5b806306fdde0314610345578063095ea7b3146103705780630c424284146103a0578063153b0d1e146103c257806317700f01146103e257806318160ddd146103f757600080fd5b3661034057005b600080fd5b34801561035157600080fd5b5061035a6109ea565b60405161036791906124b1565b60405180910390f35b34801561037c57600080fd5b5061039061038b366004612514565b610a7c565b6040519015158152602001610367565b3480156103ac57600080fd5b506103c06103bb36600461254e565b610a93565b005b3480156103ce57600080fd5b506103c06103dd36600461254e565b610b1a565b3480156103ee57600080fd5b506103c0610b98565b34801561040357600080fd5b506002545b604051908152602001610367565b34801561042257600080fd5b50610390610431366004612587565b6001600160a01b031660009081526013602052604090205460ff1690565b34801561045b57600080fd5b5061040860085481565b34801561047157600080fd5b506103906104803660046125a4565b610c28565b34801561049157600080fd5b5060405160128152602001610367565b3480156104ad57600080fd5b506103906104bc366004612514565b610cd4565b3480156104cd57600080fd5b506103c06104dc3660046125e5565b610d10565b3480156104ed57600080fd5b506016546103909060ff1681565b34801561050757600080fd5b506016546103909062010000900460ff1681565b34801561052757600080fd5b506103c0610536366004612587565b610dca565b34801561054757600080fd5b5061040860125481565b34801561055d57600080fd5b50601954610571906001600160a01b031681565b6040516001600160a01b039091168152602001610367565b34801561059557600080fd5b506103c06105a4366004612587565b610e64565b3480156105b557600080fd5b50610408600a5481565b3480156105cb57600080fd5b5061040860095481565b3480156105e157600080fd5b506104086105f0366004612587565b6001600160a01b031660009081526020819052604090205490565b34801561061757600080fd5b506103c0610efe565b34801561062c57600080fd5b506105717f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561066057600080fd5b5061040860175481565b34801561067657600080fd5b50610408600b5481565b34801561068c57600080fd5b506103c061069b366004612587565b610f34565b3480156106ac57600080fd5b506103c0610fce565b3480156106c157600080fd5b506005546001600160a01b0316610571565b3480156106df57600080fd5b5061035a611068565b3480156106f457600080fd5b5061040860075481565b34801561070a57600080fd5b50610390610719366004612514565b611077565b34801561072a57600080fd5b5061040860065481565b34801561074057600080fd5b506105717f000000000000000000000000c587312213e1cb20b8dff891ca593d896dae240a81565b34801561077457600080fd5b50610390610783366004612514565b611110565b34801561079457600080fd5b50610408600d5481565b3480156107aa57600080fd5b506103c06107b9366004612620565b61111d565b3480156107ca57600080fd5b5060165461039090610100900460ff1681565b3480156107e957600080fd5b50601b54610571906001600160a01b031681565b34801561080957600080fd5b50601854610571906001600160a01b031681565b34801561082957600080fd5b506103c06108383660046125e5565b611235565b34801561084957600080fd5b506103c0610858366004612587565b6112de565b34801561086957600080fd5b50601a54610571906001600160a01b031681565b34801561088957600080fd5b50610408610898366004612639565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156108cf57600080fd5b50610408600f5481565b3480156108e557600080fd5b5061040860105481565b3480156108fb57600080fd5b5061040860155481565b34801561091157600080fd5b50610390610920366004612587565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561094a57600080fd5b50610408600c5481565b34801561096057600080fd5b506103c06114e5565b34801561097557600080fd5b506103c0610984366004612587565b611536565b34801561099557600080fd5b506103c06109a4366004612587565b6115d1565b3480156109b557600080fd5b506103c061166b565b3480156109ca57600080fd5b5061040860115481565b3480156109e057600080fd5b50610408600e5481565b6060600380546109f990612667565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2590612667565b8015610a725780601f10610a4757610100808354040283529160200191610a72565b820191906000526020600020905b815481529060010190602001808311610a5557829003601f168201915b5050505050905090565b6000610a8933848461177f565b5060015b92915050565b6005546001600160a01b03163314610ac65760405162461bcd60e51b8152600401610abd906126a1565b60405180910390fd5b6001600160a01b038216600081815260136020526040808220805460ff191685151590811790915590519092917f5a25e09a5dba33161281055e015f1279b6b10204d8f90dd56a8ce2b82322d43d91a35050565b6005546001600160a01b03163314610b445760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038216600081815260146020526040808220805460ff191685151590811790915590519092917ff7e58a63a036e3a7ef7921f83b6ae47930cf5c293dd3bfe7a857c6863409046d91a35050565b6005546001600160a01b03163314610bc25760405162461bcd60e51b8152600401610abd906126a1565b60165462010000900460ff16610c1a5760405162461bcd60e51b815260206004820152601b60248201527f54726164696e6720697320616c72656164792064697361626c656400000000006044820152606401610abd565b6016805462ff000019169055565b6000610c358484846118a3565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cba5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abd565b610cc7853385840361177f565b60019150505b9392505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a89918590610d0b9086906126ec565b61177f565b6005546001600160a01b03163314610d3a5760405162461bcd60e51b8152600401610abd906126a1565b6006859055600784905560088390556009829055600a819055610d6b81610d65848187818b8b611c0d565b90611c0d565b600b55600654600754600854600954600a546040805194855260208501939093529183015260608201527f733eb8db6a5cd6df046e76030e911fe8600da82fc87cd448268aa418efcad5f9906080015b60405180910390a25050505050565b6005546001600160a01b03163314610df45760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610e1a5760405162461bcd60e51b8152600401610abd906126ff565b601880546001600160a01b0319166001600160a01b0383169081179091556040517f64d07b7b0d48d6c3b5e1005826e76097aaee8adef5bea0f66f453ee05f0f896790600090a250565b6005546001600160a01b03163314610e8e5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610eb45760405162461bcd60e51b8152600401610abd906126ff565b601980546001600160a01b0319166001600160a01b0383169081179091556040517f9073dfac663173e64aa95665faedae52e2246f9bcdd3890fbfaf6733b46bba1390600090a250565b6005546001600160a01b03163314610f285760405162461bcd60e51b8152600401610abd906126a1565b610f326000611c19565b565b6005546001600160a01b03163314610f5e5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b038116610f845760405162461bcd60e51b8152600401610abd906126ff565b601b80546001600160a01b0319166001600160a01b0383169081179091556040517f251a2e4478aadd97db6528862f79a28a6813b79f35d6760c60b67be5e84bba5190600090a250565b6005546001600160a01b03163314610ff85760405162461bcd60e51b8152600401610abd906126a1565b60165462010000900460ff16156110515760405162461bcd60e51b815260206004820152601a60248201527f54726164696e6720697320616c726561647920656e61626c65640000000000006044820152606401610abd565b6016805462ff000019166201000017905543601755565b6060600480546109f990612667565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156110f95760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abd565b611106338585840361177f565b5060019392505050565b6000610a893384846118a3565b6005546001600160a01b031633146111475760405162461bcd60e51b8152600401610abd906126a1565b60008111801561117957506103e861116b6a6342fd08f00f63780000006005612743565b611175919061275a565b8111155b6112025760405162461bcd60e51b815260206004820152604e60248201527f4d696e696d756d207377617020616d6f756e74206d757374206265206772656160448201527f746572207468616e203020616e64206c657373207468616e20302e3525206f6660648201526d20746f74616c20737570706c792160901b608482015260a401610abd565b601581905560405181907f18ff2fc8464635e4f668567019152095047e34d7a2ab4b97661ba4dc7fd0647690600090a250565b6005546001600160a01b0316331461125f5760405162461bcd60e51b8152600401610abd906126a1565b600c859055600d849055600e839055600f829055601081905561128a81610d65848187818b8b611c0d565b601155600c54600d54600e54600f546010546040805194855260208501939093529183015260608201527fa52bd0cf705f42201d4097dc2e9c2b39d0a1b7529e8d121faed89fd30bcf236f90608001610dbb565b6005546001600160a01b031633146113085760405162461bcd60e51b8152600401610abd906126a1565b306001600160a01b038216036113605760405162461bcd60e51b815260206004820181905260248201527f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736044820152606401610abd565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156113a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cb919061277c565b90506000811161141d5760405162461bcd60e51b815260206004820152601f60248201527f4e6f20746f6b656e7320617661696c61626c6520746f207769746864726177006044820152606401610abd565b60405163a9059cbb60e01b8152336004820152602481018290526000906001600160a01b0384169063a9059cbb906044016020604051808303816000875af115801561146d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114919190612795565b9050806114e05760405162461bcd60e51b815260206004820152601b60248201527f7472616e7366657272696e6720746f6b656e73206661696c65642100000000006044820152606401610abd565b505050565b6005546001600160a01b0316331461150f5760405162461bcd60e51b8152600401610abd906126a1565b60165460ff16611520576001611523565b60005b6016805460ff1916911515919091179055565b6005546001600160a01b031633146115605760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b0381166115c55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abd565b6115ce81611c19565b50565b6005546001600160a01b031633146115fb5760405162461bcd60e51b8152600401610abd906126a1565b6001600160a01b0381166116215760405162461bcd60e51b8152600401610abd906126ff565b601a80546001600160a01b0319166001600160a01b0383169081179091556040517f95203be801b3b4835c73e166c564816fba4ae2f167907273eb1c85263ec9882d90600090a250565b6005546001600160a01b031633146116955760405162461bcd60e51b8152600401610abd906126a1565b47806116e35760405162461bcd60e51b815260206004820152601c60248201527f4e6f2045544820617661696c61626c6520746f207769746864726177000000006044820152606401610abd565b604051600090339083908381818185875af1925050503d8060008114611725576040519150601f19603f3d011682016040523d82523d6000602084013e61172a565b606091505b505090508061177b5760405162461bcd60e51b815260206004820152601760248201527f7472616e7366657272696e6720455448206661696c65640000000000000000006044820152606401610abd565b5050565b6001600160a01b0383166117e15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abd565b6001600160a01b0382166118425760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abd565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118f95760405162461bcd60e51b815260206004820152601a60248201527f7472616e736665722066726f6d2061646472657373207a65726f0000000000006044820152606401610abd565b6001600160a01b03821661194f5760405162461bcd60e51b815260206004820152601860248201527f7472616e7366657220746f2061646472657373207a65726f00000000000000006044820152606401610abd565b600081116119b15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610abd565b6001600160a01b03831660009081526014602052604090205460ff1615611a245760405162461bcd60e51b815260206004820152602160248201527f5472616e736665722066726f6d20626c61636b6c6973746564206164647265736044820152607360f81b6064820152608401610abd565b6001600160a01b03821660009081526014602052604090205460ff1615611a8d5760405162461bcd60e51b815260206004820152601f60248201527f5472616e7366657220746f20626c61636b6c69737465642061646472657373006044820152606401610abd565b6000611a9a848484611c6b565b60155430600090815260208181526040808320546001600160a01b038a16845260139092529091205492935010159060ff16158015611af257506001600160a01b03841660009081526013602052604090205460ff16155b8015611b1757506001600160a01b03851660009081526014602052604090205460ff16155b8015611b3c57506001600160a01b03841660009081526014602052604090205460ff16155b15611bfb5760165462010000900460ff16611b8e5760405162461bcd60e51b815260206004820152601260248201527154726164696e67206e6f742061637469766560701b6044820152606401610abd565b836001600160a01b03167f000000000000000000000000c587312213e1cb20b8dff891ca593d896dae240a6001600160a01b0316148015611bd1575060165460ff165b8015611bda5750805b8015611bee5750601654610100900460ff16155b15611bfb57611bfb611d73565b611c06858584611fc9565b5050505050565b6000610ccd82846126ec565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03831660009081526013602052604081205460ff1680611caa57506001600160a01b03831660009081526013602052604090205460ff165b15611cb6575080610ccd565b6012546001600160a01b037f000000000000000000000000c587312213e1cb20b8dff891ca593d896dae240a811690851603611cf55750601154611d33565b7f000000000000000000000000c587312213e1cb20b8dff891ca593d896dae240a6001600160a01b0316856001600160a01b031603611d335750600b545b60008115611d5f576103e8611d488386612743565b611d52919061275a565b9050611d5f863083611fc9565b611d6981856127b2565b9695505050505050565b6016805461ff00191661010017905530600090815260208190526040812054905080600003611d9f5750565b6000611db8601154600b54611c0d90919063ffffffff16565b90506000611dd3600c54600654611c0d90919063ffffffff16565b90506000611dee600d54600754611c0d90919063ffffffff16565b90506000611e09600e54600854611c0d90919063ffffffff16565b90506000611e24600f54600954611c0d90919063ffffffff16565b90506000611e3f601054600a54611c0d90919063ffffffff16565b905080600003611e5c57611e5982610d6585818989611c0d565b95505b60008615611e7e57611e7b6002611e7589818c87612198565b906121a4565b90505b6000611e8a89836121b0565b905047611e96826121bc565b6000611ea247836121b0565b905060008515611f0b57611ebd6002611e758d81868b612198565b9050611ec9858261237c565b60408051868152602081018390529081018690527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6000611f1b8c611e75858e612198565b90506000611f2d8d611e75868e612198565b90506000611f3f8e611e75878e612198565b90506000611f518f611e75888e612198565b601854909150611f6a906001600160a01b03168561247b565b601954611f80906001600160a01b03168461247b565b601a54611f96906001600160a01b03168361247b565b601b54611fac906001600160a01b03168261247b565b50506016805461ff00191690555050505050505050505050505050565b6001600160a01b03831661202d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610abd565b6001600160a01b03821661208f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610abd565b6001600160a01b038316600090815260208190526040902054818110156121075760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abd565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061213e9084906126ec565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161218a91815260200190565b60405180910390a350505050565b6000610ccd8284612743565b6000610ccd828461275a565b6000610ccd82846127b2565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106121f1576121f16127c5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561226f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229391906127db565b816001815181106122a6576122a66127c5565b60200260200101906001600160a01b031690816001600160a01b0316815250506122f1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461177f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123469085906000908690309042906004016127f8565b600060405180830381600087803b15801561236057600080fd5b505af1158015612374573d6000803e3d6000fd5b505050505050565b6123a7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461177f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806123ee6005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612456573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611c069190612869565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156114e0573d6000803e3d6000fd5b600060208083528351808285015260005b818110156124de578581018301518582016040015282016124c2565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146115ce57600080fd5b6000806040838503121561252757600080fd5b8235612532816124ff565b946020939093013593505050565b80151581146115ce57600080fd5b6000806040838503121561256157600080fd5b823561256c816124ff565b9150602083013561257c81612540565b809150509250929050565b60006020828403121561259957600080fd5b8135610ccd816124ff565b6000806000606084860312156125b957600080fd5b83356125c4816124ff565b925060208401356125d4816124ff565b929592945050506040919091013590565b600080600080600060a086880312156125fd57600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b60006020828403121561263257600080fd5b5035919050565b6000806040838503121561264c57600080fd5b8235612657816124ff565b9150602083013561257c816124ff565b600181811c9082168061267b57607f821691505b60208210810361269b57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8d57610a8d6126d6565b60208082526024908201527f63616e206e6f7420736574206d61726b6574696e6720746f20646561642077616040820152631b1b195d60e21b606082015260800190565b8082028115828204841417610a8d57610a8d6126d6565b60008261277757634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561278e57600080fd5b5051919050565b6000602082840312156127a757600080fd5b8151610ccd81612540565b81810381811115610a8d57610a8d6126d6565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156127ed57600080fd5b8151610ccd816124ff565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156128485784516001600160a01b031683529383019391830191600101612823565b50506001600160a01b03969096166060850152505050608001529392505050565b60008060006060848603121561287e57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220d5059759ec8cb10bd5bcf37fbf0908978c51512d6118ed04673e3007e28f279d64736f6c63430008130033

Deployed Bytecode Sourcemap

10788:12951:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1610:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2524:169;;;;;;;;;;-1:-1:-1;2524:169:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;2524:169:0;1023:187:1;17513:170:0;;;;;;;;;;-1:-1:-1;17513:170:0;;;;;:::i;:::-;;:::i;:::-;;17691:188;;;;;;;;;;-1:-1:-1;17691:188:0;;;;;:::i;:::-;;:::i;15615:151::-;;;;;;;;;;;;;:::i;1931:108::-;;;;;;;;;;-1:-1:-1;2019:12:0;;1931:108;;;1871:25:1;;;1859:2;1844:18;1931:108:0;1725:177:1;17887:116:0;;;;;;;;;;-1:-1:-1;17887:116:0;;;;;:::i;:::-;-1:-1:-1;;;;;17975:20:0;17951:4;17975:20;;;:11;:20;;;;;;;;;17887:116;11131:33;;;;;;;;;;;;;;;;2701:490;;;;;;;;;;-1:-1:-1;2701:490:0;;;;;:::i;:::-;;:::i;1830:93::-;;;;;;;;;;-1:-1:-1;1830:93:0;;1913:2;2762:36:1;;2750:2;2735:18;1830:93:0;2620:184:1;3199:215:0;;;;;;;;;;-1:-1:-1;3199:215:0;;;;;:::i;:::-;;:::i;15774:609::-;;;;;;;;;;-1:-1:-1;15774:609:0;;;;;:::i;:::-;;:::i;12074:40::-;;;;;;;;;;-1:-1:-1;12074:40:0;;;;;;;;12158:34;;;;;;;;;;-1:-1:-1;12158:34:0;;;;;;;;;;;14339:258;;;;;;;;;;-1:-1:-1;14339:258:0;;;;;:::i;:::-;;:::i;11722:32::-;;;;;;;;;;;;;;;;12355:92;;;;;;;;;;-1:-1:-1;12355:92:0;;;;-1:-1:-1;;;;;12355:92:0;;;;;;-1:-1:-1;;;;;3448:32:1;;;3430:51;;3418:2;3403:18;12355:92:0;3268:219:1;14605:261:0;;;;;;;;;;-1:-1:-1;14605:261:0;;;;;:::i;:::-;;:::i;11208:35::-;;;;;;;;;;;;;;;;11171:30;;;;;;;;;;;;;;;;2047:127;;;;;;;;;;-1:-1:-1;2047:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;2148:18:0;2121:7;2148:18;;;;;;;;;;;;2047:127;6694:94;;;;;;;;;;;;;:::i;10944:40::-;;;;;;;;;;;;;;;12199:32;;;;;;;;;;;;;;;;11252:100;;;;;;;;;;;;;;;;15149:258;;;;;;;;;;-1:-1:-1;15149:258:0;;;;;:::i;:::-;;:::i;15415:192::-;;;;;;;;;;;;;:::i;6471:87::-;;;;;;;;;;-1:-1:-1;6544:6:0;;-1:-1:-1;;;;;6544:6:0;6471:87;;1718:104;;;;;;;;;;;;;:::i;11093:31::-;;;;;;;;;;;;;;;;3422:411;;;;;;;;;;-1:-1:-1;3422:411:0;;;;;:::i;:::-;;:::i;11053:33::-;;;;;;;;;;;;;;;;10991:36;;;;;;;;;;;;;;;2182:175;;;;;;;;;;-1:-1:-1;2182:175:0;;;;;:::i;:::-;;:::i;11420:32::-;;;;;;;;;;;;;;;;17036:335;;;;;;;;;;-1:-1:-1;17036:335:0;;;;;:::i;:::-;;:::i;12121:30::-;;;;;;;;;;-1:-1:-1;12121:30:0;;;;;;;;;;;12555:91;;;;;;;;;;-1:-1:-1;12555:91:0;;;;-1:-1:-1;;;;;12555:91:0;;;12257;;;;;;;;;;-1:-1:-1;12257:91:0;;;;-1:-1:-1;;;;;12257:91:0;;;16391:637;;;;;;;;;;-1:-1:-1;16391:637:0;;;;;:::i;:::-;;:::i;23247:452::-;;;;;;;;;;-1:-1:-1;23247:452:0;;;;;:::i;:::-;;:::i;12454:94::-;;;;;;;;;;-1:-1:-1;12454:94:0;;;;-1:-1:-1;;;;;12454:94:0;;;2365:151;;;;;;;;;;-1:-1:-1;2365:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2481:18:0;;;2454:7;2481:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2365:151;11500:31;;;;;;;;;;;;;;;;11538:37;;;;;;;;;;;;;;;;11960:57;;;;;;;;;;;;;;;;18011:118;;;;;;;;;;-1:-1:-1;18011:118:0;;;;;:::i;:::-;-1:-1:-1;;;;;18100:21:0;18076:4;18100:21;;;:11;:21;;;;;;;;;18011:118;11379:34;;;;;;;;;;;;;;;;17379:126;;;;;;;;;;;;;:::i;6796:192::-;;;;;;;;;;-1:-1:-1;6796:192:0;;;;;:::i;:::-;;:::i;14874:267::-;;;;;;;;;;-1:-1:-1;14874:267:0;;;;;:::i;:::-;;:::i;22941:298::-;;;;;;;;;;;;;:::i;11584:107::-;;;;;;;;;;;;;;;;11459:34;;;;;;;;;;;;;;;;1610:100;1664:13;1697:5;1690:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1610:100;:::o;2524:169::-;2607:4;2624:39;1072:10;2647:7;2656:6;2624:8;:39::i;:::-;-1:-1:-1;2681:4:0;2524:169;;;;;:::o;17513:170::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;17602:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;:30;;-1:-1:-1;;17602:30:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17648:27;;17602:30;;:20;17648:27:::1;::::0;::::1;17513:170:::0;;:::o;17691:188::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17782:21:0;::::1;;::::0;;;:11:::1;:21;::::0;;;;;:38;;-1:-1:-1;;17782:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;17836:35;;17782:38;;:21;17836:35:::1;::::0;::::1;17691:188:::0;;:::o;15615:151::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;15679:14:::1;::::0;;;::::1;;;15671:54;;;::::0;-1:-1:-1;;;15671:54:0;;5452:2:1;15671:54:0::1;::::0;::::1;5434:21:1::0;5491:2;5471:18;;;5464:30;5530:29;5510:18;;;5503:57;5577:18;;15671:54:0::1;5250:351:1::0;15671:54:0::1;15736:14;:22:::0;;-1:-1:-1;;15736:22:0::1;::::0;;15615:151::o;2701:490::-;2841:4;2858:36;2868:6;2876:9;2887:6;2858:9;:36::i;:::-;-1:-1:-1;;;;;2934:19:0;;2907:24;2934:19;;;:11;:19;;;;;;;;1072:10;2934:33;;;;;;;;2986:26;;;;2978:79;;;;-1:-1:-1;;;2978:79:0;;5808:2:1;2978:79:0;;;5790:21:1;5847:2;5827:18;;;5820:30;5886:34;5866:18;;;5859:62;-1:-1:-1;;;5937:18:1;;;5930:38;5985:19;;2978:79:0;5606:404:1;2978:79:0;3093:57;3102:6;1072:10;3143:6;3124:16;:25;3093:8;:57::i;:::-;3179:4;3172:11;;;2701:490;;;;;;:::o;3199:215::-;1072:10;3287:4;3336:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3336:34:0;;;;;;;;;;3287:4;;3304:80;;3327:7;;3336:47;;3373:10;;3336:47;:::i;:::-;3304:8;:80::i;15774:609::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;15958:13:::1;:33:::0;;;16002:11:::1;:29:::0;;;16042:13:::1;:33:::0;;;16086:10:::1;:27:::0;;;16124:16:::1;:39:::0;;;16185:87:::1;16143:20:::0;16185:65:::1;16099:14:::0;16185:65;16058:17;16185:65;15974:17;16016:15;16185:17:::1;:30::i;:::-;:34:::0;::::1;:49::i;:87::-;16174:8;:98:::0;16303:13:::1;::::0;16318:11:::1;::::0;16331:13:::1;::::0;16346:10:::1;::::0;16358:16:::1;::::0;16288:87:::1;::::0;;6508:25:1;;;6564:2;6549:18;;6542:34;;;;6592:18;;;6585:34;6650:2;6635:18;;6628:34;16288:87:0::1;::::0;6495:3:1;6480:19;16288:87:0::1;;;;;;;;15774:609:::0;;;;;:::o;14339:258::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14425:25:0;::::1;14417:74;;;;-1:-1:-1::0;;;14417:74:0::1;;;;;;;:::i;:::-;14502:14;:37:::0;;-1:-1:-1;;;;;;14502:37:0::1;-1:-1:-1::0;;;;;14502:37:0;::::1;::::0;;::::1;::::0;;;14555:34:::1;::::0;::::1;::::0;-1:-1:-1;;14555:34:0::1;14339:258:::0;:::o;14605:261::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14692:25:0;::::1;14684:74;;;;-1:-1:-1::0;;;14684:74:0::1;;;;;;;:::i;:::-;14769:15;:38:::0;;-1:-1:-1;;;;;;14769:38:0::1;-1:-1:-1::0;;;;;14769:38:0;::::1;::::0;;::::1;::::0;;;14823:35:::1;::::0;::::1;::::0;-1:-1:-1;;14823:35:0::1;14605:261:::0;:::o;6694:94::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;6759:21:::1;6777:1;6759:9;:21::i;:::-;6694:94::o:0;15149:258::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15235:25:0;::::1;15227:74;;;;-1:-1:-1::0;;;15227:74:0::1;;;;;;;:::i;:::-;15312:14;:37:::0;;-1:-1:-1;;;;;;15312:37:0::1;-1:-1:-1::0;;;;;15312:37:0;::::1;::::0;;::::1;::::0;;;15365:34:::1;::::0;::::1;::::0;-1:-1:-1;;15365:34:0::1;15149:258:::0;:::o;15415:192::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;15479:14:::1;::::0;;;::::1;;;15478:15;15470:54;;;::::0;-1:-1:-1;;;15470:54:0;;7280:2:1;15470:54:0::1;::::0;::::1;7262:21:1::0;7319:2;7299:18;;;7292:30;7358:28;7338:18;;;7331:56;7404:18;;15470:54:0::1;7078:350:1::0;15470:54:0::1;15535:14;:21:::0;;-1:-1:-1;;15535:21:0::1;::::0;::::1;::::0;;15587:12:::1;15567:17;:32:::0;15415:192::o;1718:104::-;1774:13;1807:7;1800:14;;;;;:::i;3422:411::-;1072:10;3515:4;3559:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3559:34:0;;;;;;;;;;3612:35;;;;3604:85;;;;-1:-1:-1;;;3604:85:0;;7635:2:1;3604:85:0;;;7617:21:1;7674:2;7654:18;;;7647:30;7713:34;7693:18;;;7686:62;-1:-1:-1;;;7764:18:1;;;7757:35;7809:19;;3604:85:0;7433:401:1;3604:85:0;3725:67;1072:10;3748:7;3776:15;3757:16;:34;3725:8;:67::i;:::-;-1:-1:-1;3821:4:0;;3422:411;-1:-1:-1;;;3422:411:0:o;2182:175::-;2268:4;2285:42;1072:10;2309:9;2320:6;2285:9;:42::i;17036:335::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;17138:1:::1;17125:10;:14;:57;;;;-1:-1:-1::0;17178:4:0::1;17158:16;10903:18;17173:1;17158:16;:::i;:::-;17157:25;;;;:::i;:::-;17143:10;:39;;17125:57;17117:148;;;::::0;-1:-1:-1;;;17117:148:0;;8436:2:1;17117:148:0::1;::::0;::::1;8418:21:1::0;8475:2;8455:18;;;8448:30;8514:34;8494:18;;;8487:62;8585:34;8565:18;;;8558:62;-1:-1:-1;;;8636:19:1;;;8629:45;8691:19;;17117:148:0::1;8234:482:1::0;17117:148:0::1;17276:18;:31:::0;;;17323:40:::1;::::0;17297:10;;17323:40:::1;::::0;;;::::1;17036:335:::0;:::o;16391:637::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;16581:14:::1;:35:::0;;;16627:12:::1;:31:::0;;;16669:14:::1;:35:::0;;;16715:11:::1;:29:::0;;;16755:17:::1;:41:::0;;;16819:92:::1;16775:21:::0;16819:69:::1;16729:15:::0;16819:69;16686:18;16819:69;16598:18;16642:16;16819:18:::1;:32::i;:92::-;16807:9;:104:::0;16943:14:::1;::::0;16959:12:::1;::::0;16973:14:::1;::::0;16989:11:::1;::::0;17002:17:::1;::::0;16927:93:::1;::::0;;6508:25:1;;;6564:2;6549:18;;6542:34;;;;6592:18;;;6585:34;6650:2;6635:18;;6628:34;16927:93:0::1;::::0;6495:3:1;6480:19;16927:93:0::1;6277:391:1::0;23247:452:0;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;23358:4:::1;-1:-1:-1::0;;;;;23335:28:0;::::1;::::0;23327:73:::1;;;::::0;-1:-1:-1;;;23327:73:0;;8923:2:1;23327:73:0::1;::::0;::::1;8905:21:1::0;;;8942:18;;;8935:30;9001:34;8981:18;;;8974:62;9053:18;;23327:73:0::1;8721:356:1::0;23327:73:0::1;23436:44;::::0;-1:-1:-1;;;23436:44:0;;23474:4:::1;23436:44;::::0;::::1;3430:51:1::0;23413:20:0::1;::::0;-1:-1:-1;;;;;23436:29:0;::::1;::::0;::::1;::::0;3403:18:1;;23436:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23413:67;;23514:1;23499:12;:16;23491:60;;;::::0;-1:-1:-1;;;23491:60:0;;9473:2:1;23491:60:0::1;::::0;::::1;9455:21:1::0;9512:2;9492:18;;;9485:30;9551:33;9531:18;;;9524:61;9602:18;;23491:60:0::1;9271:355:1::0;23491:60:0::1;23579:54;::::0;-1:-1:-1;;;23579:54:0;;23608:10:::1;23579:54;::::0;::::1;9805:51:1::0;9872:18;;;9865:34;;;23564:12:0::1;::::0;-1:-1:-1;;;;;23579:28:0;::::1;::::0;::::1;::::0;9778:18:1;;23579:54:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23564:69;;23652:7;23644:47;;;::::0;-1:-1:-1;;;23644:47:0;;10362:2:1;23644:47:0::1;::::0;::::1;10344:21:1::0;10401:2;10381:18;;;10374:30;10440:29;10420:18;;;10413:57;10487:18;;23644:47:0::1;10160:351:1::0;23644:47:0::1;23316:383;;23247:452:::0;:::o;17379:126::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;17460:21:::1;::::0;::::1;;17459:38;;17493:4;17459:38;;;17485:5;17459:38;17435:21;:62:::0;;-1:-1:-1;;17435:62:0::1;::::0;::::1;;::::0;;;::::1;::::0;;17379:126::o;6796:192::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6885:22:0;::::1;6877:73;;;::::0;-1:-1:-1;;;6877:73:0;;10718:2:1;6877:73:0::1;::::0;::::1;10700:21:1::0;10757:2;10737:18;;;10730:30;10796:34;10776:18;;;10769:62;-1:-1:-1;;;10847:18:1;;;10840:36;10893:19;;6877:73:0::1;10516:402:1::0;6877:73:0::1;6961:19;6971:8;6961:9;:19::i;:::-;6796:192:::0;:::o;14874:267::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14963:25:0;::::1;14955:74;;;;-1:-1:-1::0;;;14955:74:0::1;;;;;;;:::i;:::-;15040:17;:40:::0;;-1:-1:-1;;;;;;15040:40:0::1;-1:-1:-1::0;;;;;15040:40:0;::::1;::::0;;::::1;::::0;;;15096:37:::1;::::0;::::1;::::0;-1:-1:-1;;15096:37:0::1;14874:267:::0;:::o;22941:298::-;6544:6;;-1:-1:-1;;;;;6544:6:0;1072:10;6606:23;6598:68;;;;-1:-1:-1;;;6598:68:0;;;;;;;:::i;:::-;23017:21:::1;23057:11:::0;23049:52:::1;;;::::0;-1:-1:-1;;;23049:52:0;;11125:2:1;23049:52:0::1;::::0;::::1;11107:21:1::0;11164:2;11144:18;;;11137:30;11203;11183:18;;;11176:58;11251:18;;23049:52:0::1;10923:352:1::0;23049:52:0::1;23133:44;::::0;23115:12:::1;::::0;23141:10:::1;::::0;23165:7;;23115:12;23133:44;23115:12;23133:44;23165:7;23141:10;23133:44:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23114:63;;;23196:7;23188:43;;;::::0;-1:-1:-1;;;23188:43:0;;11692:2:1;23188:43:0::1;::::0;::::1;11674:21:1::0;11731:2;11711:18;;;11704:30;11770:25;11750:18;;;11743:53;11813:18;;23188:43:0::1;11490:347:1::0;23188:43:0::1;22988:251;;22941:298::o:0;5588:380::-;-1:-1:-1;;;;;5724:19:0;;5716:68;;;;-1:-1:-1;;;5716:68:0;;12044:2:1;5716:68:0;;;12026:21:1;12083:2;12063:18;;;12056:30;12122:34;12102:18;;;12095:62;-1:-1:-1;;;12173:18:1;;;12166:34;12217:19;;5716:68:0;11842:400:1;5716:68:0;-1:-1:-1;;;;;5803:21:0;;5795:68;;;;-1:-1:-1;;;5795:68:0;;12449:2:1;5795:68:0;;;12431:21:1;12488:2;12468:18;;;12461:30;12527:34;12507:18;;;12500:62;-1:-1:-1;;;12578:18:1;;;12571:32;12620:19;;5795:68:0;12247:398:1;5795:68:0;-1:-1:-1;;;;;5876:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5928:32;;1871:25:1;;;5928:32:0;;1844:18:1;5928:32:0;;;;;;;5588:380;;;:::o;18918:1016::-;-1:-1:-1;;;;;19041:19:0;;19033:58;;;;-1:-1:-1;;;19033:58:0;;12852:2:1;19033:58:0;;;12834:21:1;12891:2;12871:18;;;12864:30;12930:28;12910:18;;;12903:56;12976:18;;19033:58:0;12650:350:1;19033:58:0;-1:-1:-1;;;;;19106:17:0;;19098:54;;;;-1:-1:-1;;;19098:54:0;;13207:2:1;19098:54:0;;;13189:21:1;13246:2;13226:18;;;13219:30;13285:26;13265:18;;;13258:54;13329:18;;19098:54:0;13005:348:1;19098:54:0;19177:1;19167:7;:11;19159:65;;;;-1:-1:-1;;;19159:65:0;;13560:2:1;19159:65:0;;;13542:21:1;13599:2;13579:18;;;13572:30;13638:34;13618:18;;;13611:62;-1:-1:-1;;;13689:18:1;;;13682:39;13738:19;;19159:65:0;13358:405:1;19159:65:0;-1:-1:-1;;;;;19240:18:0;;;;;;:11;:18;;;;;;;;19239:19;19231:65;;;;-1:-1:-1;;;19231:65:0;;13970:2:1;19231:65:0;;;13952:21:1;14009:2;13989:18;;;13982:30;14048:34;14028:18;;;14021:62;-1:-1:-1;;;14099:18:1;;;14092:31;14140:19;;19231:65:0;13768:397:1;19231:65:0;-1:-1:-1;;;;;19312:16:0;;;;;;:11;:16;;;;;;;;19311:17;19303:61;;;;-1:-1:-1;;;19303:61:0;;14372:2:1;19303:61:0;;;14354:21:1;14411:2;14391:18;;;14384:30;14450:33;14430:18;;;14423:61;14501:18;;19303:61:0;14170:355:1;19303:61:0;19371:18;19392:29;19401:5;19408:3;19413:7;19392:8;:29::i;:::-;19473:18;;19463:4;19430:12;2148:18;;;;;;;;;;;;-1:-1:-1;;;;;19513:18:0;;;;:11;:18;;;;;;;19371:50;;-1:-1:-1;;19445:46:0;;19513:18;;19512:19;:49;;;;-1:-1:-1;;;;;;19545:16:0;;;;;;:11;:16;;;;;;;;19544:17;19512:49;:81;;;;-1:-1:-1;;;;;;19575:18:0;;;;;;:11;:18;;;;;;;;19574:19;19512:81;:111;;;;-1:-1:-1;;;;;;19607:16:0;;;;;;:11;:16;;;;;;;;19606:17;19512:111;19498:387;;;19651:14;;;;;;;19643:45;;;;-1:-1:-1;;;19643:45:0;;14732:2:1;19643:45:0;;;14714:21:1;14771:2;14751:18;;;14744:30;-1:-1:-1;;;14790:18:1;;;14783:48;14848:18;;19643:45:0;14530:342:1;19643:45:0;19732:3;-1:-1:-1;;;;;19717:18:0;:11;-1:-1:-1;;;;;19717:18:0;;:56;;;;-1:-1:-1;19752:21:0;;;;19717:56;:80;;;;;19790:7;19717:80;:108;;;;-1:-1:-1;19815:10:0;;;;;;;19814:11;19717:108;19699:179;;;19852:14;:12;:14::i;:::-;19891:39;19907:5;19914:3;19919:10;19891:15;:39::i;:::-;19026:908;;18918:1016;;;:::o;8708:98::-;8766:7;8793:5;8797:1;8793;:5;:::i;6996:173::-;7071:6;;;-1:-1:-1;;;;;7088:17:0;;;-1:-1:-1;;;;;;7088:17:0;;;;;;;7121:40;;7071:6;;;7088:17;7071:6;;7121:40;;7052:16;;7121:40;7041:128;6996:173;:::o;18277:637::-;-1:-1:-1;;;;;18416:18:0;;18392:7;18416:18;;;:11;:18;;;;;;;;;:38;;-1:-1:-1;;;;;;18438:16:0;;;;;;:11;:16;;;;;;;;18416:38;18412:85;;;-1:-1:-1;18478:7:0;18471:14;;18412:85;18526:13;;-1:-1:-1;;;;;18563:11:0;18556:18;;;;;;18552:149;;-1:-1:-1;18602:9:0;;18552:149;;;18642:11;-1:-1:-1;;;;;18633:20:0;:5;-1:-1:-1;;;;;18633:20:0;;18629:72;;-1:-1:-1;18681:8:0;;18629:72;18713:11;18743:12;;18739:135;;18801:4;18779:18;18789:8;18779:7;:18;:::i;:::-;18778:27;;;;:::i;:::-;18772:33;;18820:42;18836:5;18851:4;18858:3;18820:15;:42::i;:::-;18892:13;18902:3;18892:7;:13;:::i;:::-;18884:22;18277:637;-1:-1:-1;;;;;;18277:637:0:o;19942:1871::-;19982:10;:17;;-1:-1:-1;;19982:17:0;;;;;20044:4;-1:-1:-1;2148:18:0;;;;;;;;;;;20006:44;;20062:9;20075:1;20062:14;20058:45;;20089:7;19942:1871::o;20058:45::-;20111:16;20130:25;20145:9;;20131:8;;20130:14;;:25;;;;:::i;:::-;20111:44;;20164:20;20186:35;20206:14;;20187:13;;20186:19;;:35;;;;:::i;:::-;20164:57;;20228:21;20252:31;20270:12;;20253:11;;20252:17;;:31;;;;:::i;:::-;20228:55;;20290:23;20315:35;20335:14;;20316:13;;20315:19;;:35;;;;:::i;:::-;20290:60;;20357:20;20379:29;20396:11;;20380:10;;20379:16;;:29;;;;:::i;:::-;20357:51;;20415:22;20439:41;20462:17;;20440:16;;20439:22;;:41;;;;:::i;:::-;20415:65;;20493:14;20511:1;20493:19;20489:125;;20536:70;20593:12;20536:52;20572:15;20536:52;:12;20553:13;20536:16;:31::i;:70::-;20525:81;;20489:125;20622:20;20657:12;;20653:102;;20697:50;20745:1;20697:43;20731:8;20697:43;:9;20711:14;20697:13;:29::i;:::-;:33;;:43::i;:50::-;20682:65;;20653:102;20761:18;20782:27;:9;20796:12;20782:13;:27::i;:::-;20761:48;-1:-1:-1;20841:21:0;20869;20761:48;20869:9;:21::i;:::-;20897:18;20918:41;:21;20944:14;20918:25;:41::i;:::-;20897:62;-1:-1:-1;20968:23:0;21006:18;;21002:239;;21055:51;21104:1;21055:44;21090:8;21055:44;:10;21070:14;21055;:30::i;:51::-;21037:69;;21119:43;21132:12;21146:15;21119:12;:43::i;:::-;21174:59;;;15212:25:1;;;15268:2;15253:18;;15246:34;;;15296:18;;;15289:34;;;21174:59:0;;15200:2:1;15185:18;21174:59:0;;;;;;;21002:239;21247:21;21271:42;21304:8;21271:28;:10;21286:12;21271:14;:28::i;:42::-;21247:66;-1:-1:-1;21320:22:0;21345:43;21379:8;21345:29;:10;21360:13;21345:14;:29::i;:43::-;21320:68;-1:-1:-1;21395:24:0;21422:45;21458:8;21422:31;:10;21437:15;21422:14;:31::i;:45::-;21395:72;-1:-1:-1;21474:21:0;21498:42;21531:8;21498:28;:10;21513:12;21498:14;:28::i;:42::-;21570:14;;21474:66;;-1:-1:-1;21549:51:0;;-1:-1:-1;;;;;21570:14:0;21586:13;21549:20;:51::i;:::-;21628:15;;21607:53;;-1:-1:-1;;;;;21628:15:0;21645:14;21607:20;:53::i;:::-;21688:17;;21667:57;;-1:-1:-1;;;;;21688:17:0;21707:16;21667:20;:57::i;:::-;21752:14;;21731:51;;-1:-1:-1;;;;;21752:14:0;21768:13;21731:20;:51::i;:::-;-1:-1:-1;;21791:10:0;:18;;-1:-1:-1;;21791:18:0;;;-1:-1:-1;;;;;;;;;;;;;;19942:1871:0:o;3841:733::-;-1:-1:-1;;;;;3981:20:0;;3973:70;;;;-1:-1:-1;;;3973:70:0;;15536:2:1;3973:70:0;;;15518:21:1;15575:2;15555:18;;;15548:30;15614:34;15594:18;;;15587:62;-1:-1:-1;;;15665:18:1;;;15658:35;15710:19;;3973:70:0;15334:401:1;3973:70:0;-1:-1:-1;;;;;4062:23:0;;4054:71;;;;-1:-1:-1;;;4054:71:0;;15942:2:1;4054:71:0;;;15924:21:1;15981:2;15961:18;;;15954:30;16020:34;16000:18;;;15993:62;-1:-1:-1;;;16071:18:1;;;16064:33;16114:19;;4054:71:0;15740:399:1;4054:71:0;-1:-1:-1;;;;;4222:17:0;;4198:21;4222:17;;;;;;;;;;;4258:23;;;;4250:74;;;;-1:-1:-1;;;4250:74:0;;16346:2:1;4250:74:0;;;16328:21:1;16385:2;16365:18;;;16358:30;16424:34;16404:18;;;16397:62;-1:-1:-1;;;16475:18:1;;;16468:36;16521:19;;4250:74:0;16144:402:1;4250:74:0;-1:-1:-1;;;;;4360:17:0;;;:9;:17;;;;;;;;;;;4380:22;;;4360:42;;4424:20;;;;;;;;:30;;4396:6;;4360:9;4424:30;;4396:6;;4424:30;:::i;:::-;;;;;;;;4489:9;-1:-1:-1;;;;;4472:35:0;4481:6;-1:-1:-1;;;;;4472:35:0;;4500:6;4472:35;;;;1871:25:1;;1859:2;1844:18;;1725:177;4472:35:0;;;;;;;;3962:612;3841:733;;;:::o;8920:98::-;8978:7;9005:5;9009:1;9005;:5;:::i;9026:98::-;9084:7;9111:5;9115:1;9111;:5;:::i;8814:98::-;8872:7;8899:5;8903:1;8899;:5;:::i;21965:447::-;22045:16;;;22059:1;22045:16;;;;;;;;22021:21;;22045:16;;;;;;;;;;-1:-1:-1;22045:16:0;22021:40;;22090:4;22072;22077:1;22072:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;22072:23:0;;;-1:-1:-1;;;;;22072:23:0;;;;;22116:13;-1:-1:-1;;;;;22116:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22106:4;22111:1;22106:7;;;;;;;;:::i;:::-;;;;;;:30;-1:-1:-1;;;;;22106:30:0;;;-1:-1:-1;;;;;22106:30:0;;;;;22147:56;22164:4;22179:13;22195:7;22147:8;:56::i;:::-;22214:190;;-1:-1:-1;;;22214:190:0;;-1:-1:-1;;;;;22214:13:0;:64;;;;:190;;22293:7;;22315:1;;22331:4;;22358;;22378:15;;22214:190;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22010:402;21965:447;:::o;22424:509::-;22572:60;22589:4;22604:13;22620:11;22572:8;:60::i;:::-;22675:13;-1:-1:-1;;;;;22675:29:0;;22712:9;22745:4;22765:11;22791:1;22834;22877:7;6544:6;;-1:-1:-1;;;;;6544:6:0;;6471:87;22877:7;22675:250;;;;;;-1:-1:-1;;;;;;22675:250:0;;;-1:-1:-1;;;;;18415:15:1;;;22675:250:0;;;18397:34:1;18447:18;;;18440:34;;;;18490:18;;;18483:34;;;;18533:18;;;18526:34;18597:15;;;18576:19;;;18569:44;22899:15:0;18629:19:1;;;18622:35;18331:19;;22675:250:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;21821:132::-;21919:26;;-1:-1:-1;;;;;21919:18:0;;;:26;;;;;21938:6;;21919:26;;;;21938:6;21919:18;:26;;;;;;;;;;;;;;;;;;;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;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;1215:118::-;1301:5;1294:13;1287:21;1280:5;1277:32;1267:60;;1323:1;1320;1313:12;1338:382;1403:6;1411;1464:2;1452:9;1443:7;1439:23;1435:32;1432:52;;;1480:1;1477;1470:12;1432:52;1519:9;1506:23;1538:31;1563:5;1538:31;:::i;:::-;1588:5;-1:-1:-1;1645:2:1;1630:18;;1617:32;1658:30;1617:32;1658:30;:::i;:::-;1707:7;1697:17;;;1338:382;;;;;:::o;1907:247::-;1966:6;2019:2;2007:9;1998:7;1994:23;1990:32;1987:52;;;2035:1;2032;2025:12;1987:52;2074:9;2061:23;2093:31;2118:5;2093:31;:::i;2159:456::-;2236:6;2244;2252;2305:2;2293:9;2284:7;2280:23;2276:32;2273:52;;;2321:1;2318;2311:12;2273:52;2360:9;2347:23;2379:31;2404:5;2379:31;:::i;:::-;2429:5;-1:-1:-1;2486:2:1;2471:18;;2458:32;2499:33;2458:32;2499:33;:::i;:::-;2159:456;;2551:7;;-1:-1:-1;;;2605:2:1;2590:18;;;;2577:32;;2159:456::o;2809:454::-;2904:6;2912;2920;2928;2936;2989:3;2977:9;2968:7;2964:23;2960:33;2957:53;;;3006:1;3003;2996:12;2957:53;-1:-1:-1;;3029:23:1;;;3099:2;3084:18;;3071:32;;-1:-1:-1;3150:2:1;3135:18;;3122:32;;3201:2;3186:18;;3173:32;;-1:-1:-1;3252:3:1;3237:19;3224:33;;-1:-1:-1;2809:454:1;-1:-1:-1;2809:454:1:o;3926:180::-;3985:6;4038:2;4026:9;4017:7;4013:23;4009:32;4006:52;;;4054:1;4051;4044:12;4006:52;-1:-1:-1;4077:23:1;;3926:180;-1:-1:-1;3926:180:1:o;4111:388::-;4179:6;4187;4240:2;4228:9;4219:7;4215:23;4211:32;4208:52;;;4256:1;4253;4246:12;4208:52;4295:9;4282:23;4314:31;4339:5;4314:31;:::i;:::-;4364:5;-1:-1:-1;4421:2:1;4406:18;;4393:32;4434:33;4393:32;4434:33;:::i;4504:380::-;4583:1;4579:12;;;;4626;;;4647:61;;4701:4;4693:6;4689:17;4679:27;;4647:61;4754:2;4746:6;4743:14;4723:18;4720:38;4717:161;;4800:10;4795:3;4791:20;4788:1;4781:31;4835:4;4832:1;4825:15;4863:4;4860:1;4853:15;4717:161;;4504:380;;;:::o;4889:356::-;5091:2;5073:21;;;5110:18;;;5103:30;5169:34;5164:2;5149:18;;5142:62;5236:2;5221:18;;4889:356::o;6015:127::-;6076:10;6071:3;6067:20;6064:1;6057:31;6107:4;6104:1;6097:15;6131:4;6128:1;6121:15;6147:125;6212:9;;;6233:10;;;6230:36;;;6246:18;;:::i;6673:400::-;6875:2;6857:21;;;6914:2;6894:18;;;6887:30;6953:34;6948:2;6933:18;;6926:62;-1:-1:-1;;;7019:2:1;7004:18;;6997:34;7063:3;7048:19;;6673:400::o;7839:168::-;7912:9;;;7943;;7960:15;;;7954:22;;7940:37;7930:71;;7981:18;;:::i;8012:217::-;8052:1;8078;8068:132;;8122:10;8117:3;8113:20;8110:1;8103:31;8157:4;8154:1;8147:15;8185:4;8182:1;8175:15;8068:132;-1:-1:-1;8214:9:1;;8012:217::o;9082:184::-;9152:6;9205:2;9193:9;9184:7;9180:23;9176:32;9173:52;;;9221:1;9218;9211:12;9173:52;-1:-1:-1;9244:16:1;;9082:184;-1:-1:-1;9082:184:1:o;9910:245::-;9977:6;10030:2;10018:9;10009:7;10005:23;10001:32;9998:52;;;10046:1;10043;10036:12;9998:52;10078:9;10072:16;10097:28;10119:5;10097:28;:::i;14877:128::-;14944:9;;;14965:11;;;14962:37;;;14979:18;;:::i;16683:127::-;16744:10;16739:3;16735:20;16732:1;16725:31;16775:4;16772:1;16765:15;16799:4;16796:1;16789:15;16815:251;16885:6;16938:2;16926:9;16917:7;16913:23;16909:32;16906:52;;;16954:1;16951;16944:12;16906:52;16986:9;16980:16;17005:31;17030:5;17005:31;:::i;17071:980::-;17333:4;17381:3;17370:9;17366:19;17412:6;17401:9;17394:25;17438:2;17476:6;17471:2;17460:9;17456:18;17449:34;17519:3;17514:2;17503:9;17499:18;17492:31;17543:6;17578;17572:13;17609:6;17601;17594:22;17647:3;17636:9;17632:19;17625:26;;17686:2;17678:6;17674:15;17660:29;;17707:1;17717:195;17731:6;17728:1;17725:13;17717:195;;;17796:13;;-1:-1:-1;;;;;17792:39:1;17780:52;;17887:15;;;;17852:12;;;;17828:1;17746:9;17717:195;;;-1:-1:-1;;;;;;;17968:32:1;;;;17963:2;17948:18;;17941:60;-1:-1:-1;;;18032:3:1;18017:19;18010:35;17929:3;17071:980;-1:-1:-1;;;17071:980:1:o;18668:306::-;18756:6;18764;18772;18825:2;18813:9;18804:7;18800:23;18796:32;18793:52;;;18841:1;18838;18831:12;18793:52;18870:9;18864:16;18854:26;;18920:2;18909:9;18905:18;18899:25;18889:35;;18964:2;18953:9;18949:18;18943:25;18933:35;;18668:306;;;;;:::o

Swarm Source

ipfs://d5059759ec8cb10bd5bcf37fbf0908978c51512d6118ed04673e3007e28f279d

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.