ETH Price: $2,401.79 (-4.28%)

Contract

0xA1DB57DEFD15Be659CfBC612A13195adf5b237c6
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve205465222024-08-17 6:21:4718 days ago1723875707IN
ManaCoin: MNC Token
0 ETH0.000139622.9969759
Transfer204444682024-08-03 0:34:4732 days ago1722645287IN
ManaCoin: MNC Token
0 ETH0.000119671.66673136
Transfer204334822024-08-01 11:45:1134 days ago1722512711IN
ManaCoin: MNC Token
0 ETH0.000674627.58854801
Approve202987452024-07-13 16:22:3552 days ago1720887755IN
ManaCoin: MNC Token
0 ETH0.000071282.71
Approve197110502024-04-22 12:50:23134 days ago1713790223IN
ManaCoin: MNC Token
0 ETH0.0002816211.58660649
Approve187301632023-12-06 22:11:11272 days ago1701900671IN
ManaCoin: MNC Token
0 ETH0.0014930961.27761267
Approve187301632023-12-06 22:11:11272 days ago1701900671IN
ManaCoin: MNC Token
0 ETH0.0014894161.27761267
Approve186877432023-11-30 23:38:23278 days ago1701387503IN
ManaCoin: MNC Token
0 ETH0.0010722944.11652336
Approve184721572023-10-31 19:21:11308 days ago1698780071IN
ManaCoin: MNC Token
0 ETH0.001297127.84086087
Transfer184721512023-10-31 19:19:59308 days ago1698779999IN
ManaCoin: MNC Token
0 ETH0.0018319725.51498568
Transfer184605362023-10-30 4:16:23310 days ago1698639383IN
ManaCoin: MNC Token
0 ETH0.0011728113.19248616
Approve184566582023-10-29 15:12:59310 days ago1698592379IN
ManaCoin: MNC Token
0 ETH0.00116925.23441872
Transfer184566352023-10-29 15:08:23310 days ago1698592103IN
ManaCoin: MNC Token
0 ETH0.0025850529.07822304
Approve184538062023-10-29 5:37:35311 days ago1698557855IN
ManaCoin: MNC Token
0 ETH0.000625913.51081277
Approve183494012023-10-14 15:06:11325 days ago1697295971IN
ManaCoin: MNC Token
0 ETH0.000331097.10652067
Approve183474502023-10-14 8:31:59326 days ago1697272319IN
ManaCoin: MNC Token
0 ETH0.000254185.48688536
Approve183425602023-10-13 16:07:59326 days ago1697213279IN
ManaCoin: MNC Token
0 ETH0.000503219.12898807
Approve183234252023-10-10 23:47:11329 days ago1696981631IN
ManaCoin: MNC Token
0 ETH0.000309156.67183571
Approve182964422023-10-07 5:12:11333 days ago1696655531IN
ManaCoin: MNC Token
0 ETH0.000332627.13942728
Approve182930982023-10-06 17:58:23333 days ago1696615103IN
ManaCoin: MNC Token
0 ETH0.000272699.33068715
Approve182920062023-10-06 14:18:11333 days ago1696601891IN
ManaCoin: MNC Token
0 ETH0.0005148111.04994768
Approve182892852023-10-06 5:10:11334 days ago1696569011IN
ManaCoin: MNC Token
0 ETH0.000295346.37534698
Approve182892792023-10-06 5:08:59334 days ago1696568939IN
ManaCoin: MNC Token
0 ETH0.000263635.69083838
Approve182892702023-10-06 5:07:11334 days ago1696568831IN
ManaCoin: MNC Token
0 ETH0.000311016.71368679
Approve182892562023-10-06 5:04:23334 days ago1696568663IN
ManaCoin: MNC Token
0 ETH0.00030656.61631241
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
182683282023-10-03 6:49:47337 days ago1696315787
ManaCoin: MNC Token
1.04059057 ETH
182562912023-10-01 14:30:23338 days ago1696170623
ManaCoin: MNC Token
0.00144112 ETH
182363402023-09-28 19:33:23341 days ago1695929603
ManaCoin: MNC Token
0.19558586 ETH
182263422023-09-27 9:56:23343 days ago1695808583
ManaCoin: MNC Token
0.00469371 ETH
182248342023-09-27 4:51:35343 days ago1695790295
ManaCoin: MNC Token
0.00220963 ETH
182176732023-09-26 4:48:23344 days ago1695703703
ManaCoin: MNC Token
0.00369057 ETH
182154962023-09-25 21:30:47344 days ago1695677447
ManaCoin: MNC Token
0.00491011 ETH
182107442023-09-25 5:33:59345 days ago1695620039
ManaCoin: MNC Token
0.00285209 ETH
182086562023-09-24 22:32:47345 days ago1695594767
ManaCoin: MNC Token
0.00408288 ETH
182080162023-09-24 20:23:35345 days ago1695587015
ManaCoin: MNC Token
0 ETH
182066622023-09-24 15:51:23345 days ago1695570683
ManaCoin: MNC Token
0.38150462 ETH
182053302023-09-24 11:22:23346 days ago1695554543
ManaCoin: MNC Token
0.0463148 ETH
182051972023-09-24 10:55:23346 days ago1695552923
ManaCoin: MNC Token
0.03721256 ETH
182051462023-09-24 10:45:11346 days ago1695552311
ManaCoin: MNC Token
0.17689071 ETH
182020092023-09-24 0:11:47346 days ago1695514307
ManaCoin: MNC Token
0.994289 ETH
182011202023-09-23 21:12:47346 days ago1695503567
ManaCoin: MNC Token
0.40571351 ETH
182008952023-09-23 20:27:23346 days ago1695500843
ManaCoin: MNC Token
0.00536957 ETH
181990682023-09-23 14:18:47346 days ago1695478727
ManaCoin: MNC Token
0.00016059 ETH
181989152023-09-23 13:47:35346 days ago1695476855
ManaCoin: MNC Token
0.22149069 ETH
181968452023-09-23 6:50:47347 days ago1695451847
ManaCoin: MNC Token
0.00016133 ETH
181954662023-09-23 2:13:23347 days ago1695435203
ManaCoin: MNC Token
0.00417999 ETH
181951612023-09-23 1:10:59347 days ago1695431459
ManaCoin: MNC Token
0.02636006 ETH
181936642023-09-22 20:09:47347 days ago1695413387
ManaCoin: MNC Token
0.36934238 ETH
181925762023-09-22 16:30:11347 days ago1695400211
ManaCoin: MNC Token
0.00246334 ETH
181922932023-09-22 15:32:47347 days ago1695396767
ManaCoin: MNC Token
0.27232442 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ManaCoin

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-09-20
*/

/**
 * Website :  https://www.manacoin.io/
 * DApp :     https://app.manacoin.io/
 * Twitter :  https://twitter.com/ManaCoinETH
 * Medium :   https://medium.com/@ManaCoinETH
 * Telegram : https://t.me/ManaCoinETH
**/

// SPDX-License-Identifier: MIT
pragma solidity = 0.8.18;

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, 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 from, address to, uint256 amount) external returns (bool);
}

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

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

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    
    constructor() {
        _transferOwnership(_msgSender());
    }
    
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract ManaCoin is Ownable, IERC20{
    string  private _name;
    string  private _symbol;
    uint256 private _decimals;
    uint256 private _totalSupply;

    uint256 public  maxTxLimit;
    uint256 public  maxWalletLimit;
    uint256 public minTokenSwapAmount;
    address payable public treasuryWallet;
    uint256 public  swapableRefection;
    uint256 public  swapableTreasuryTax;
    bool private _swapping;
    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 public sellTax;
    uint256 public buyTax;
    uint256 public taxSharePercentage;
    uint256 public totalBurned;
    uint256 public totalReflected;
    uint256 public totalLP;

    IUniswapV2Router02 public dexRouter;
    address public  lpPair;
    bool    public  tradingActive;
    bool    public  isLimit;
    uint256 public  ethReflectionBasis;
    uint256 public  reflectionLockPeriod;

    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool)    private _reflectionExcluded;
    mapping(address => uint256) public  lastReflectionBasis;
    mapping(address => uint256) public  lastReflectionTimeStamp;
    mapping(address => uint256) public  totalClaimedReflection;
    mapping(address => uint256) private _claimableReflection;

    mapping(address => bool)    public  lpPairs;
    mapping(address => bool)    private _isExcludedFromTax;

    event functionType (uint Type, address sender, uint256 amount);
    event reflectionClaimed (address indexed recipient, uint256 amount);
    event recoverAllEths(uint256 amount);
    event excludedFromTaxes (address account);
    event includeInTaxes(address account);
    event buyTaxUpdated(uint256 tax);
    event sellTaxUpdated(uint256 tax);
    event taxSharePercentageUpdated(uint256 percentage);
    event reflectionExcluded(address account);
    event recoverERC20Tokens(address token, uint256 amount);

    constructor(){
        _name              = "ManaCoin";
        _symbol            = "MNC";
        _decimals          = 18;
        _totalSupply       = 100000000 * (10 ** _decimals);
        _balances[owner()] = _balances[owner()] + _totalSupply;

        treasuryWallet     = payable(0x0aDEAE6683eFB0408542350E89B7B8311C4b6CE2);
        sellTax            = 20;
        buyTax             = 15;
        maxTxLimit         = 2000000000000000000000000;
        maxWalletLimit     = 2000000000000000000000000;
        minTokenSwapAmount = (_totalSupply * 21) / 10000;
        taxSharePercentage   = 50;
        reflectionLockPeriod = 60; 
        isLimit = true;

        dexRouter = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        lpPair    = IUniswapV2Factory(dexRouter.factory()).createPair(address(this), dexRouter.WETH());
        lpPairs[lpPair] = true;

        _approve(owner(), address(dexRouter), type(uint256).max);
        _approve(address(this), address(dexRouter), type(uint256).max);

        _isExcludedFromTax[owner()]        = true;
        _isExcludedFromTax[treasuryWallet] = true;
        _isExcludedFromTax[address(this)]  = true;
        _isExcludedFromTax[lpPair]         = true;

        emit Transfer(address(0), owner(), _totalSupply);
    }

    receive() external payable {}

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

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

    function decimals() public view returns (uint256) {
        return _decimals;
    }

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

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(msg.sender, spender, amount);
        return true;
    }

    function _approve(address sender, address spender, uint256 amount) private {
        require(sender  != address(0), "ERC20: Zero Address");
        require(spender != address(0), "ERC20: Zero Address");

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

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Zero Address");
        require(recipient != address(0), "ERC20: Zero Address");
        require(recipient != DEAD, "ERC20: Dead Address");
        require(_balances[msg.sender] >= amount, "ERC20: Amount exceeds account balance");

        _transfer(msg.sender, recipient, amount);

        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(_msgSender() != address(0), "ERC20: Zero Address");
        require(recipient != address(0), "ERC20: Zero Address");
        require(recipient != DEAD, "ERC20: Dead Address");
        require(_allowances[sender][msg.sender] >= amount, "ERC20: Insufficient allowance.");
        require(_balances[sender] >= amount, "ERC20: Amount exceeds sender's account balance");

        if (_allowances[sender][msg.sender] != type(uint256).max) {
            _allowances[sender][msg.sender]  = _allowances[sender][msg.sender] + (amount);
        }
        _transfer(sender, recipient, amount);

        return true;
    }

    function _transfer(address sender, address recipient, uint256 amount) private {

        if (sender == owner() && lpPairs[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        }
        else if (lpPairs[sender] || lpPairs[recipient]){
            require(tradingActive == true, "ERC20: Trading is not active.");
            
            if (_isExcludedFromTax[sender] && !_isExcludedFromTax[recipient]){
                if (_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)) {
                    _transferBuy(sender, recipient, amount); //user buy process
                } 
            }   
            else if (!_isExcludedFromTax[sender] && _isExcludedFromTax[recipient]){
                if (_checkTxLimit(amount)) {
                    _transferSell(sender, recipient, amount); //user sell process
                }
            }
            else if (_isExcludedFromTax[sender] && _isExcludedFromTax[recipient]) {
                if (sender == owner() || recipient == owner() || sender == address(this) || recipient == address(this)) {
                    _transferBothExcluded(sender, recipient, amount);
                } else if (lpPairs[recipient]) {
                    if (_checkTxLimit(amount)) {
                        _transferBothExcluded(sender, recipient, amount);
                    }
                } else if (_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)){
                    _transferBothExcluded(sender, recipient, amount);
                }
            } 
        } else {
            if (sender == owner() || recipient == owner() || sender == address(this) || recipient == address(this)) {
                    _transferBothExcluded(sender, recipient, amount);
            } else if(_checkWalletLimit(recipient, amount) && _checkTxLimit(amount)){
                    _transferBothExcluded(sender, recipient, amount);
            }
        }
    }

    function _transferBuy(address sender, address recipient, uint256 amount) private { 
        /// users buy process
        uint256 randomTaxType  = _generateRandomTaxType();
        uint256 taxAmount     = amount * (buyTax)/100;
        uint256 receiveAmount = amount - (taxAmount);
        // get tax details
        ( uint256 treasuryAmount, uint256 burnAmount, uint256 lpAmount, uint256 reflectionAmount ) = _getTaxAmount(taxAmount);
        
        _claimableReflection[recipient] = _claimableReflection[recipient] + unclaimedReflection(recipient); 
        lastReflectionBasis[recipient]  = ethReflectionBasis;

        _balances[sender]        = _balances[sender] - (amount);
        _balances[recipient]     = _balances[recipient] + (receiveAmount);
        _balances[address(this)] = _balances[address(this)] + (treasuryAmount);
        swapableTreasuryTax      = swapableTreasuryTax + (treasuryAmount);

        if (randomTaxType == 1) {
            // true burn
            _burn(sender, burnAmount);
            emit functionType(randomTaxType, sender, burnAmount);
        } else if (randomTaxType == 2) {
            // smart lp
            _takeLP(sender, lpAmount);
            emit functionType(randomTaxType, sender, lpAmount);
        } else if (randomTaxType == 3) {
            // reflection adding
            _balances[address(this)] = _balances[address(this)] + (reflectionAmount);
            swapableRefection        = swapableRefection + (reflectionAmount);
            totalReflected           = totalReflected + (reflectionAmount);
            emit functionType(randomTaxType, sender, reflectionAmount);
        }
        emit Transfer(sender, recipient, amount);
    }

    function _transferSell(address sender, address recipient, uint256 amount) private { 
        /// users sell process
        uint256 randomTaxType = _generateRandomTaxType();
        uint256 taxAmount    = amount * sellTax/100;
        uint256 sentAmount   = amount - taxAmount;
        // get sell tax details
        ( uint256 treasuryAmount, uint256 burnAmount, uint256 lpAmount, uint256 reflectionAmount ) = _getTaxAmount(taxAmount);
        bool canSwap = swapableTreasuryTax >= minTokenSwapAmount;

        if(canSwap && !_swapping ) {
            _swapping = true;
            _swap(treasuryWallet, minTokenSwapAmount); // treasury swap function
            _swapping = false;
            swapableTreasuryTax = swapableTreasuryTax - (minTokenSwapAmount);
        }

        _balances[sender]        = _balances[sender] - (amount);
        _balances[recipient]     = _balances[recipient] + (sentAmount);
        _balances[address(this)] = _balances[address(this)] + (treasuryAmount);
        swapableTreasuryTax      = swapableTreasuryTax + (treasuryAmount);
        
        if(_balances[sender] == 0) {
            _claimableReflection[recipient] = 0; // claimable reflection amount initilize
        }
        
        if (randomTaxType == 1) {
            // true burn
            _burn(sender, burnAmount); 
            emit functionType(randomTaxType, sender, burnAmount);
        } else if (randomTaxType == 2) {
            // smart lp
            _takeLP(sender, lpAmount); 
            emit functionType(randomTaxType, sender, lpAmount);
        } else if (randomTaxType == 3) {
            // reflection adding
            _balances[address(this)] = _balances[address(this)] + (reflectionAmount);
            swapableRefection        = swapableRefection + (reflectionAmount);
            totalReflected           = totalReflected + (reflectionAmount);
            emit functionType(randomTaxType, sender, reflectionAmount);
        }
        emit Transfer(sender, recipient, amount);
    }

    function _transferBothExcluded(address sender, address recipient, uint256 amount) private {
        if(recipient == owner() || recipient == address(this)){
            _balances[sender]    = _balances[sender] - amount;
            _balances[recipient] = _balances[recipient] + amount;
        } else {
            _claimableReflection[recipient] = _claimableReflection[recipient] + unclaimedReflection(recipient); 
            lastReflectionBasis[recipient]  = ethReflectionBasis;

            _balances[sender]    = _balances[sender] - amount;
            _balances[recipient] = _balances[recipient] + amount;
        }

        emit Transfer(sender, recipient, amount);
    }

    function burn(uint256 amountTokens) public {
        address sender = msg.sender;
        require(_balances[sender] >= amountTokens, "ERC20: Burn Amount exceeds account balance");
        require(amountTokens > 0, "ERC20: Enter some amount to burn");

        if (amountTokens > 0) {
            _balances[sender] = _balances[sender] - amountTokens;
            _burn(sender, amountTokens);
        }
    }

    function _burn(address from, uint256 amount) private {
        _totalSupply = _totalSupply - amount;
        totalBurned  = totalBurned + amount;
        
        emit Transfer(from, address(0), amount);
    }

    function _takeLP(address from, uint256 tax) private {
        if (tax > 0) {
            (, , uint256 lp, ) = _getTaxAmount(tax);
            _balances[lpPair]  = _balances[lpPair] + lp;
            totalLP = totalLP + lp;

            emit Transfer(from, lpPair, lp);
        }
    }

    function addReflection() external payable {
        require (msg.value > 0);
        ethReflectionBasis = ethReflectionBasis + (msg.value);
    }

    function isReflectionExcluded(address account) public view returns (bool) {
        return _reflectionExcluded[account];
    }

    function removeReflectionExcluded(address account) external onlyOwner {
        require(isReflectionExcluded(account), "ERC20: Account must be excluded");

        _reflectionExcluded[account] = false;
    }

    function addReflectionExcluded(address account) external onlyOwner {
        _addReflectionExcluded(account);
        emit reflectionExcluded(account);
    }

    function _addReflectionExcluded(address account) internal {
        require(!isReflectionExcluded(account), "ERC20: Account must not be excluded");
        _reflectionExcluded[account] = true;
    }

    function unclaimedReflection(address addr) public view returns (uint256) {
        if (addr == lpPair || addr == address(dexRouter)) return 0;

        uint256 basisDifference = ethReflectionBasis - lastReflectionBasis[addr];
        return ((basisDifference * balanceOf(addr)) / _totalSupply) + _claimableReflection[addr];
    }

    function _claimReflection(address payable addr) internal {
        uint256 unclaimed = unclaimedReflection(addr);
        require(unclaimed > 0, "ERC20: Claim amount should be more then 0");
        require(isReflectionExcluded(addr) == false, "ERC20: Address is excluded to claim reflection");
        
        lastReflectionBasis[addr] = ethReflectionBasis;
        lastReflectionTimeStamp[addr] = block.timestamp; // adding last claim Timestamp
        _claimableReflection[addr] = 0;
        addr.transfer(unclaimed);
        totalClaimedReflection[addr] = totalClaimedReflection[addr] + unclaimed;
        emit reflectionClaimed(addr, unclaimed);
    }

    function claimReflection() external returns (bool) {
        address _sender = _msgSender();
        require(!_isContract(_sender), "ERC20: Sender can't be a contract"); 
        require(lastReflectionTimeStamp[_sender] + reflectionLockPeriod <= block.timestamp, "ERC20: Reflection lock period exists,  try again later");
        _claimReflection(payable(_sender));
        return true;
    }

    function swapReflection(uint256 amount) public returns (bool) {
        // everyone can call this function to generate eth reflection
        require(swapableRefection > 0, "ERC20: Insufficient token to swap");
        require(swapableRefection >= amount);
        uint256 currentBalance = address(this).balance;
        _swap(address(this), amount);
        swapableRefection = swapableRefection - amount;
        uint256 ethTransfer = (address(this).balance) - currentBalance;
        ethReflectionBasis  = ethReflectionBasis + ethTransfer;
        return true;
    }

    function setMinTokensSwapAmount(uint256 newValue) external onlyOwner {
        require(
            newValue != minTokenSwapAmount,
            "Cannot update minTokenSwapAmount to same value"
        );
        minTokenSwapAmount = newValue;
    }

    function setsellTax(uint256 tax) public onlyOwner {
        require(tax <= 6, "ERC20: The percentage can't more 6%.");
        sellTax = tax;
        emit sellTaxUpdated(tax);
    }

    function setbuyTax(uint256 tax) public onlyOwner {
        require(tax <= 6, "ERC20: The percentage can't more 6%.");
        buyTax = tax;
        emit buyTaxUpdated(tax);
    }

    function setTaxSharePercentage(uint256 percentage) public onlyOwner {
        require(percentage <= 100, "ERC20: The percentage can't more then 100");
        taxSharePercentage = percentage;
        emit taxSharePercentageUpdated(percentage);
    }

    function enableTrading() external onlyOwner {
        tradingActive = true;
    }

    function addLpPair(address pair, bool status) public onlyOwner{
        lpPairs[pair] = status;
        _isExcludedFromTax[pair] = status;
    }

    function returnNormalTax() public onlyOwner {
        sellTax = 5;
        buyTax  = 5;
        taxSharePercentage = 50;
    }

    function removeAllTax() public onlyOwner {
        sellTax = 0;
        buyTax  = 0;
        taxSharePercentage = 0;
    }

    function removeAllLimits() public onlyOwner {
        isLimit = false;
    }

    function excludeFromTax(address account) public onlyOwner {
        require(!_isExcludedFromTax[account], "ERC20: Account is already excluded.");
        _isExcludedFromTax[account] = true;
        emit excludedFromTaxes(account);
    }

    function includeInTax(address _account) public onlyOwner {
        require(_isExcludedFromTax[_account], "ERC20: Account is already included.");
        _isExcludedFromTax[_account] = false;
        emit includeInTaxes(_account);
    }
    
    function recoverAllEth() public {
        (bool success, ) = address(treasuryWallet).call{value: address(this).balance}("");
        if (success) {
            emit recoverAllEths(address(this).balance);
        }
    }

    function recoverErc20token(address token, uint256 amount) public onlyOwner {
        require(token != address(this),"can't claim own tokens");
        IERC20(token).transfer(owner(), amount);
        emit recoverERC20Tokens(token, amount);
    }

    function checkExludedFromTax(address _account) public view returns (bool) {
        return _isExcludedFromTax[_account];
    }

    function _generateRandomTaxType() private view returns (uint256) {
        return (uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty, block.gaslimit, tx.origin, block.number, tx.gasprice))) % 3) + 1;
    }

    function _getTaxAmount(uint256 _tax) private view returns (uint256 _treasuryAmount, uint256 Burn, uint256 LP, uint256 Reflection) {
        uint256 treasuryAmount;
        uint256 burnAmount;
        uint256 lpAmount;
        uint256 reflectionAmount;

        if (_tax > 0) {
            treasuryAmount = _tax * ((100 - taxSharePercentage))/100;
            burnAmount = _tax * (taxSharePercentage)/100;
            lpAmount = _tax * (taxSharePercentage)/100;
            reflectionAmount = _tax * (taxSharePercentage)/100;
        }
        return (treasuryAmount, burnAmount, lpAmount, reflectionAmount);
    }

    function _checkWalletLimit(address recipient, uint256 amount) private view returns(bool){
        if (isLimit) {
        require(maxWalletLimit >= balanceOf(recipient) + amount, "ERC20: Wallet limit exceeds");
        }
        return true;
    }

    function _checkTxLimit(uint256 amount) private view returns(bool){
        if (isLimit) {
        require(amount <= maxTxLimit, "ERC20: Transaction limit exceeds");
        }
        return true;
    }

    function _isContract(address _addr) private view returns (bool){
        uint32 size;
        assembly {
            size := extcodesize(_addr)
        }
        return (size > 0);
    }

    function _swap(address recipient, uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();

        dexRouter.swapExactTokensForETH(
            amount,
            0,
            path,
            recipient,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"buyTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"excludedFromTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"Type","type":"uint256"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"functionType","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"includeInTaxes","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverAllEths","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverERC20Tokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"reflectionClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"reflectionExcluded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tax","type":"uint256"}],"name":"sellTaxUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"taxSharePercentageUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addLpPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addReflection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountTokens","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"checkExludedFromTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"}],"name":"includeInTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReflectionExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lpPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokenSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"recoverAllEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"recoverErc20token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionLockPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeAllTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"returnNormalTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setMinTokensSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percentage","type":"uint256"}],"name":"setTaxSharePercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setbuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tax","type":"uint256"}],"name":"setsellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"swapReflection","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapableRefection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapableTreasuryTax","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":"taxSharePercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalClaimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalLP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","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":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"unclaimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506200001d336200047b565b60408051808201909152600881526726b0b730a1b7b4b760c11b60208201526001906200004b908262000671565b506040805180820190915260038152624d4e4360e81b602082015260029062000075908262000671565b50601260038190556200008a90600a62000852565b6200009a906305f5e10062000867565b600481905560166000620000b66000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002054620000e3919062000881565b60166000620000fa6000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055600880546001600160a01b031916730adeae6683efb0408542350e89b7b8311c4b6ce21790556014600c55600f600d556a01a784379d99db420000006005819055600655600454612710906200016c90601562000867565b62000178919062000897565b6007556032600e55603c6015556013805460ff60a81b1916600160a81b179055601280546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002239190620008ba565b6001600160a01b031663c9c6539630601260009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000286573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ac9190620008ba565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003209190620008ba565b601380546001600160a01b0319166001600160a01b039283169081179091556000908152601d60205260408120805460ff19166001179055546200037491166012546001600160a01b0316600019620004cb565b601254620003909030906001600160a01b0316600019620004cb565b6001601e6000620003a96000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905560085482168152601e9093528183208054851660019081179091553084528284208054861682179055601354909116835291208054909216179055620004256000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6004546040516200046d91815260200190565b60405180910390a3620008e5565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0383166200051d5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b60448201526064015b60405180910390fd5b6001600160a01b0382166200056b5760405162461bcd60e51b815260206004820152601360248201527245524332303a205a65726f204164647265737360681b604482015260640162000514565b6001600160a01b0383811660008181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620005f757607f821691505b6020821081036200061857634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200066c57600081815260208120601f850160051c81016020861015620006475750805b601f850160051c820191505b81811015620006685782815560010162000653565b5050505b505050565b81516001600160401b038111156200068d576200068d620005cc565b620006a5816200069e8454620005e2565b846200061e565b602080601f831160018114620006dd5760008415620006c45750858301515b600019600386901b1c1916600185901b17855562000668565b600085815260208120601f198616915b828110156200070e57888601518255948401946001909101908401620006ed565b50858210156200072d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620007945781600019048211156200077857620007786200073d565b808516156200078657918102915b93841c939080029062000758565b509250929050565b600082620007ad575060016200084c565b81620007bc575060006200084c565b8160018114620007d55760028114620007e05762000800565b60019150506200084c565b60ff841115620007f457620007f46200073d565b50506001821b6200084c565b5060208310610133831016604e8410600b841016171562000825575081810a6200084c565b62000831838362000753565b80600019048211156200084857620008486200073d565b0290505b92915050565b60006200086083836200079c565b9392505050565b80820281158282048414176200084c576200084c6200073d565b808201808211156200084c576200084c6200073d565b600082620008b557634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215620008cd57600080fd5b81516001600160a01b03811681146200086057600080fd5b612ffb80620008f56000396000f3fe60806040526004361061036f5760003560e01c806370a08231116101c65780639daa30e3116100f7578063d89135cd11610095578063dd62ed3e1161006f578063dd62ed3e146109b5578063e17c4c74146109fb578063f2fde38b14610a1b578063f98be8ad14610a3b57600080fd5b8063d89135cd14610974578063daed12af1461098a578063db05e5cb146109a057600080fd5b8063b4fe8f6a116100d1578063b4fe8f6a146108fb578063bbc0c74214610910578063cba38f6214610931578063cc1776d31461095e57600080fd5b80639daa30e3146108a5578063a5332f2d146108c5578063a9059cbb146108db57600080fd5b80638da5cb5b116101645780639579d5141161013e5780639579d5141461080a57806395d89b411461083757806396bc05881461084c5780639cc1af631461086c57600080fd5b80638da5cb5b1461079d5780638dc70e82146107bb5780639045be58146107d157600080fd5b80638036d590116101a05780638036d5901461073257806384ff58bd146107485780638a516513146107685780638a8c523c1461078857600080fd5b806370a08231146106d1578063715018a6146107075780637e5f83e81461071c57600080fd5b806342966c68116102a05780635196aadb1161023e57806360d1259e1161021857806360d1259e1461066557806361db244614610685578063664fa9721461069b57806366a88d96146106bb57600080fd5b80635196aadb146105f8578063588d5189146106185780635facf12e1461064557600080fd5b80634626402b1161027a5780634626402b1461059a5780634d5b15d4146105ba5780634e6be544146105da5780634f7041a5146105e257600080fd5b806342966c681461052a57806343cc8c2a1461054a578063452ed4f11461057a57600080fd5b806325e7e3cf1161030d5780633732e214116102e75780633732e214146104ca57806337563293146104e05780633e8c4873146104f55780634048a3741461051557600080fd5b806325e7e3cf1461047d5780632757805514610494578063313ce567146104b557600080fd5b8063132c4feb11610349578063132c4feb1461040e578063165c91e81461043257806318160ddd1461044857806323b872dd1461045d57600080fd5b806306fdde031461037b5780630758d924146103a6578063095ea7b3146103de57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610a5b565b60405161039d9190612b1a565b60405180910390f35b3480156103b257600080fd5b506012546103c6906001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156103ea57600080fd5b506103fe6103f9366004612b7d565b610aed565b604051901515815260200161039d565b34801561041a57600080fd5b5061042460115481565b60405190815260200161039d565b34801561043e57600080fd5b5061042460075481565b34801561045457600080fd5b50600454610424565b34801561046957600080fd5b506103fe610478366004612ba9565b610b04565b34801561048957600080fd5b50610492610d2a565b005b3480156104a057600080fd5b506013546103fe90600160a81b900460ff1681565b3480156104c157600080fd5b50600354610424565b3480156104d657600080fd5b5061042460105481565b3480156104ec57600080fd5b506103fe610dbe565b34801561050157600080fd5b506103fe610510366004612bea565b610ec5565b34801561052157600080fd5b50610492610f76565b34801561053657600080fd5b50610492610545366004612bea565b610f8f565b34801561055657600080fd5b506103fe610565366004612c03565b601d6020526000908152604090205460ff1681565b34801561058657600080fd5b506013546103c6906001600160a01b031681565b3480156105a657600080fd5b506008546103c6906001600160a01b031681565b3480156105c657600080fd5b506104926105d5366004612bea565b6110a2565b610492611100565b3480156105ee57600080fd5b50610424600d5481565b34801561060457600080fd5b50610492610613366004612c03565b611120565b34801561062457600080fd5b50610424610633366004612c03565b601b6020526000908152604090205481565b34801561065157600080fd5b50610424610660366004612c03565b61116a565b34801561067157600080fd5b50610492610680366004612c03565b61121a565b34801561069157600080fd5b5061042460145481565b3480156106a757600080fd5b506104926106b6366004612bea565b6112eb565b3480156106c757600080fd5b5061042460065481565b3480156106dd57600080fd5b506104246106ec366004612c03565b6001600160a01b031660009081526016602052604090205490565b34801561071357600080fd5b5061049261138b565b34801561072857600080fd5b50610424600a5481565b34801561073e57600080fd5b5061042460055481565b34801561075457600080fd5b50610492610763366004612c2e565b61139f565b34801561077457600080fd5b50610492610783366004612b7d565b6113e5565b34801561079457600080fd5b50610492611517565b3480156107a957600080fd5b506000546001600160a01b03166103c6565b3480156107c757600080fd5b5061042460155481565b3480156107dd57600080fd5b506103fe6107ec366004612c03565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561081657600080fd5b50610424610825366004612c03565b60196020526000908152604090205481565b34801561084357600080fd5b50610390611534565b34801561085857600080fd5b50610492610867366004612bea565b611543565b34801561087857600080fd5b506103fe610887366004612c03565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156108b157600080fd5b506104926108c0366004612c03565b6115b8565b3480156108d157600080fd5b5061042460095481565b3480156108e757600080fd5b506103fe6108f6366004612b7d565b611649565b34801561090757600080fd5b50610492611757565b34801561091c57600080fd5b506013546103fe90600160a01b900460ff1681565b34801561093d57600080fd5b5061042461094c366004612c03565b601a6020526000908152604090205481565b34801561096a57600080fd5b50610424600c5481565b34801561098057600080fd5b50610424600f5481565b34801561099657600080fd5b50610424600e5481565b3480156109ac57600080fd5b50610492611770565b3480156109c157600080fd5b506104246109d0366004612c67565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b348015610a0757600080fd5b50610492610a16366004612c03565b611787565b348015610a2757600080fd5b50610492610a36366004612c03565b611854565b348015610a4757600080fd5b50610492610a56366004612bea565b6118ca565b606060018054610a6a90612c95565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690612c95565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b5050505050905090565b6000610afa338484611928565b5060015b92915050565b600033610b2c5760405162461bcd60e51b8152600401610b2390612ccf565b60405180910390fd5b6001600160a01b038316610b525760405162461bcd60e51b8152600401610b2390612ccf565b61deac196001600160a01b03841601610ba35760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610b23565b6001600160a01b0384166000908152601760209081526040808320338452909152902054821115610c165760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20496e73756666696369656e7420616c6c6f77616e63652e00006044820152606401610b23565b6001600160a01b038416600090815260166020526040902054821115610c955760405162461bcd60e51b815260206004820152602e60248201527f45524332303a20416d6f756e7420657863656564732073656e6465722773206160448201526d63636f756e742062616c616e636560901b6064820152608401610b23565b6001600160a01b038416600090815260176020908152604080832033845290915290205460001914610d15576001600160a01b0384166000908152601760209081526040808320338452909152902054610cf0908390612d12565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b610d208484846119d6565b5060019392505050565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610d77576040519150601f19603f3d011682016040523d82523d6000602084013e610d7c565b606091505b505090508015610dbb576040514781527f3a0133def75e9eba8b4be20bfdf7c2800f92d0b460b9718735a2de781d0cab30906020015b60405180910390a15b50565b60003363ffffffff813b1615610e205760405162461bcd60e51b815260206004820152602160248201527f45524332303a2053656e6465722063616e2774206265206120636f6e747261636044820152601d60fa1b6064820152608401610b23565b6015546001600160a01b0382166000908152601a60205260409020544291610e4791612d12565b1115610eb45760405162461bcd60e51b815260206004820152603660248201527f45524332303a205265666c656374696f6e206c6f636b20706572696f6420657860448201527534b9ba399610103a393c9030b3b0b4b7103630ba32b960511b6064820152608401610b23565b610ebd81611ce8565b600191505090565b60008060095411610f225760405162461bcd60e51b815260206004820152602160248201527f45524332303a20496e73756666696369656e7420746f6b656e20746f207377616044820152600760fc1b6064820152608401610b23565b816009541015610f3157600080fd5b47610f3c3084611eb7565b82600954610f4a9190612d25565b6009556000610f598247612d25565b905080601454610f699190612d12565b6014555060019392505050565b610f7e61200f565b6005600c819055600d556032600e55565b336000818152601660205260409020548211156110015760405162461bcd60e51b815260206004820152602a60248201527f45524332303a204275726e20416d6f756e742065786365656473206163636f756044820152696e742062616c616e636560b01b6064820152608401610b23565b600082116110515760405162461bcd60e51b815260206004820181905260248201527f45524332303a20456e74657220736f6d6520616d6f756e7420746f206275726e6044820152606401610b23565b811561109e576001600160a01b03811660009081526016602052604090205461107b908390612d25565b6001600160a01b03821660009081526016602052604090205561109e8183612069565b5050565b6110aa61200f565b60068111156110cb5760405162461bcd60e51b8152600401610b2390612d38565b600d8190556040518181527f7dcc5c536517abaa6eb281914d04431307a734c37f1f9d4a0b6ea5776a455a2d90602001610db2565b6000341161110d57600080fd5b3460145461111b9190612d12565b601455565b61112861200f565b611131816120be565b6040516001600160a01b03821681527f8bf83848cb943ff3c2e2704617248fcebaccbfafd3881cee3738bc2c032fe99090602001610db2565b6013546000906001600160a01b038381169116148061119657506012546001600160a01b038381169116145b156111a357506000919050565b6001600160a01b0382166000908152601960205260408120546014546111c99190612d25565b6001600160a01b0384166000908152601c6020908152604080832054600454601690935292205492935090916111ff9084612d7c565b6112099190612da9565b6112139190612d12565b9392505050565b61122261200f565b6001600160a01b0381166000908152601e602052604090205460ff16156112975760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e7420697320616c7265616479206578636c756460448201526232b21760e91b6064820152608401610b23565b6001600160a01b0381166000818152601e6020908152604091829020805460ff1916600117905590519182527ffbf18c6c9ec09319f6c830e6c7d8e2a42cdd8f8a642daff024aa9eb809ab12309101610db2565b6112f361200f565b60648111156113565760405162461bcd60e51b815260206004820152602960248201527f45524332303a205468652070657263656e746167652063616e2774206d6f72656044820152680207468656e203130360bc1b6064820152608401610b23565b600e8190556040518181527fc3540e43c066c181c7201382c8d897826efdc788cfeeeacbad255a2a70dd1fdc90602001610db2565b61139361200f565b61139d6000612157565b565b6113a761200f565b6001600160a01b039091166000908152601d60209081526040808320805494151560ff199586168117909155601e9092529091208054909216179055565b6113ed61200f565b306001600160a01b0383160361143e5760405162461bcd60e51b815260206004820152601660248201527563616e277420636c61696d206f776e20746f6b656e7360501b6044820152606401610b23565b816001600160a01b031663a9059cbb61145f6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d09190612dbd565b50604080516001600160a01b0384168152602081018390527fb6cba7eb069007df60bbb1d3a04b15577e1c155a265fd323e0fee07da17ab0eb910160405180910390a15050565b61151f61200f565b6013805460ff60a01b1916600160a01b179055565b606060028054610a6a90612c95565b61154b61200f565b60075481036115b35760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420757064617465206d696e546f6b656e53776170416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608401610b23565b600755565b6115c061200f565b6001600160a01b03811660009081526018602052604090205460ff166116285760405162461bcd60e51b815260206004820152601f60248201527f45524332303a204163636f756e74206d757374206265206578636c75646564006044820152606401610b23565b6001600160a01b03166000908152601860205260409020805460ff19169055565b6000336116685760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b03831661168e5760405162461bcd60e51b8152600401610b2390612ccf565b61deac196001600160a01b038416016116df5760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610b23565b3360009081526016602052604090205482111561174c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a20416d6f756e742065786365656473206163636f756e742062616044820152646c616e636560d81b6064820152608401610b23565b610afa3384846119d6565b61175f61200f565b6000600c819055600d819055600e55565b61177861200f565b6013805460ff60a81b19169055565b61178f61200f565b6001600160a01b0381166000908152601e602052604090205460ff166118035760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e7420697320616c726561647920696e636c756460448201526232b21760e91b6064820152608401610b23565b6001600160a01b0381166000818152601e6020908152604091829020805460ff1916905590519182527f983e915867979aef6807d457eb95f90775b6d8f0e49009cff53c6fa4473cb3759101610db2565b61185c61200f565b6001600160a01b0381166118c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b23565b610dbb81612157565b6118d261200f565b60068111156118f35760405162461bcd60e51b8152600401610b2390612d38565b600c8190556040518181527f10caeb50fe0e719f0abd8c74740443c36472c79bf0f0553e9476a3c131e2b35b90602001610db2565b6001600160a01b03831661194e5760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b0382166119745760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b0383811660008181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b038481169116148015611a0b57506001600160a01b0382166000908152601d602052604090205460ff165b15611a2057611a1b8383836121a7565b505050565b6001600160a01b0383166000908152601d602052604090205460ff1680611a5f57506001600160a01b0382166000908152601d602052604090205460ff165b15611c8957601354600160a01b900460ff161515600114611ac25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610b23565b6001600160a01b0383166000908152601e602052604090205460ff168015611b0357506001600160a01b0382166000908152601e602052604090205460ff16155b15611b3257611b12828261232d565b8015611b225750611b22816123bd565b15611a1b57611a1b83838361242c565b6001600160a01b0383166000908152601e602052604090205460ff16158015611b7357506001600160a01b0382166000908152601e602052604090205460ff165b15611b9157611b81816123bd565b15611a1b57611a1b8383836126a2565b6001600160a01b0383166000908152601e602052604090205460ff168015611bd157506001600160a01b0382166000908152601e602052604090205460ff165b15611a1b576000546001600160a01b0384811691161480611bff57506000546001600160a01b038381169116145b80611c1257506001600160a01b03831630145b80611c2557506001600160a01b03821630145b15611c3557611a1b8383836121a7565b6001600160a01b0382166000908152601d602052604090205460ff1615611c6f57611c5f816123bd565b15611a1b57611a1b8383836121a7565b611c79828261232d565b8015611c5f5750611c5f816123bd565b6000546001600160a01b0384811691161480611cb257506000546001600160a01b038381169116145b80611cc557506001600160a01b03831630145b80611cd857506001600160a01b03821630145b15611c6f57611a1b8383836121a7565b6000611cf38261116a565b905060008111611d575760405162461bcd60e51b815260206004820152602960248201527f45524332303a20436c61696d20616d6f756e742073686f756c64206265206d6f60448201526807265207468656e20360bc1b6064820152608401610b23565b6001600160a01b03821660009081526018602052604090205460ff1615611dd75760405162461bcd60e51b815260206004820152602e60248201527f45524332303a2041646472657373206973206578636c7564656420746f20636c60448201526d30b4b6903932b33632b1ba34b7b760911b6064820152608401610b23565b6014546001600160a01b038316600081815260196020908152604080832094909455601a8152838220429055601c90528281208190559151909183156108fc02918491818181858888f19350505050158015611e37573d6000803e3d6000fd5b506001600160a01b0382166000908152601b6020526040902054611e5c908290612d12565b6001600160a01b0383166000818152601b6020526040908190209290925590517faba62311dcf381aba06c0e76b1bb8e427e7c715edb8c84fc169cc1d1f51ac84e90611eab9084815260200190565b60405180910390a25050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611eec57611eec612df0565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f699190612e06565b81600181518110611f7c57611f7c612df0565b6001600160a01b0392831660209182029290920101526012546040516318cbafe560e01b81529116906318cbafe590611fc2908590600090869089904290600401612e23565b6000604051808303816000875af1158015611fe1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120099190810190612e94565b50505050565b6000546001600160a01b0316331461139d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b23565b806004546120779190612d25565b600455600f54612088908290612d12565b600f556040518181526000906001600160a01b03841690600080516020612fa68339815191529060200160405180910390a35050565b6001600160a01b03811660009081526018602052604090205460ff16156121335760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e74206d757374206e6f74206265206578636c7560448201526219195960ea1b6064820152608401610b23565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03838116911614806121cb57506001600160a01b03821630145b15612242576001600160a01b0383166000908152601660205260409020546121f4908290612d25565b6001600160a01b038085166000908152601660205260408082209390935590841681522054612224908290612d12565b6001600160a01b0383166000908152601660205260409020556122fa565b61224b8261116a565b6001600160a01b0383166000908152601c602052604090205461226e9190612d12565b6001600160a01b038084166000908152601c602090815260408083209490945560145460198252848320559186168152601690915220546122b0908290612d25565b6001600160a01b0380851660009081526016602052604080822093909355908416815220546122e0908290612d12565b6001600160a01b0383166000908152601660205260409020555b816001600160a01b0316836001600160a01b0316600080516020612fa6833981519152836040516119c991815260200190565b601354600090600160a81b900460ff1615610afa5781612362846001600160a01b031660009081526016602052604090205490565b61236c9190612d12565b6006541015610afa5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2057616c6c6574206c696d6974206578636565647300000000006044820152606401610b23565b601354600090600160a81b900460ff1615612424576005548211156124245760405162461bcd60e51b815260206004820181905260248201527f45524332303a205472616e73616374696f6e206c696d697420657863656564736044820152606401610b23565b506001919050565b600061243661296c565b905060006064600d548461244a9190612d7c565b6124549190612da9565b905060006124628285612d25565b9050600080600080612473866129e7565b93509350935093506124848961116a565b6001600160a01b038a166000908152601c60205260409020546124a79190612d12565b6001600160a01b03808b166000908152601c60209081526040808320949094556014546019825284832055918d168152601690915220546124e9908990612d25565b6001600160a01b03808c1660009081526016602052604080822093909355908b1681522054612519908690612d12565b6001600160a01b038a16600090815260166020526040808220929092553081522054612546908590612d12565b30600090815260166020526040902055600a54612564908590612d12565b600a5560018790036125a85761257a8a84612069565b600080516020612f86833981519152878b8560405161259b93929190612f52565b60405180910390a161265b565b866002036125db576125ba8a83612a81565b600080516020612f86833981519152878b8460405161259b93929190612f52565b8660030361265b57306000908152601660205260409020546125fe908290612d12565b3060009081526016602052604090205560095461261c908290612d12565b60095560105461262d908290612d12565b601055604051600080516020612f86833981519152906126529089908d908590612f52565b60405180910390a15b886001600160a01b03168a6001600160a01b0316600080516020612fa68339815191528a60405161268e91815260200190565b60405180910390a350505050505050505050565b60006126ac61296c565b905060006064600c54846126c09190612d7c565b6126ca9190612da9565b905060006126d88285612d25565b90506000806000806126e9866129e7565b93509350935093506000600754600a541015905080801561270d5750600b5460ff16155b1561275657600b805460ff19166001179055600854600754612738916001600160a01b031690611eb7565b600b805460ff19169055600754600a546127529190612d25565b600a555b6001600160a01b038b1660009081526016602052604090205461277a908a90612d25565b6001600160a01b03808d1660009081526016602052604080822093909355908c16815220546127aa908790612d12565b6001600160a01b038b166000908152601660205260408082209290925530815220546127d7908690612d12565b30600090815260166020526040902055600a546127f5908690612d12565b600a556001600160a01b038b166000908152601660205260408120549003612831576001600160a01b038a166000908152601c60205260408120555b87600103612871576128438b85612069565b600080516020612f86833981519152888c8660405161286493929190612f52565b60405180910390a1612924565b876002036128a4576128838b84612a81565b600080516020612f86833981519152888c8560405161286493929190612f52565b8760030361292457306000908152601660205260409020546128c7908390612d12565b306000908152601660205260409020556009546128e5908390612d12565b6009556010546128f6908390612d12565b601055604051600080516020612f868339815191529061291b908a908e908690612f52565b60405180910390a15b896001600160a01b03168b6001600160a01b0316600080516020612fa68339815191528b60405161295791815260200190565b60405180910390a35050505050505050505050565b6040805142602082015244918101919091524560608083019190915232901b6bffffffffffffffffffffffff191660808201524360948201523a60b482015260009060039060d4016040516020818303038152906040528051906020012060001c6129d79190612f71565b6129e2906001612d12565b905090565b6000808080808080808815612a72576064600e546064612a079190612d25565b612a11908b612d7c565b612a1b9190612da9565b93506064600e548a612a2d9190612d7c565b612a379190612da9565b92506064600e548a612a499190612d7c565b612a539190612da9565b91506064600e548a612a659190612d7c565b612a6f9190612da9565b90505b92989197509550909350915050565b801561109e576000612a92826129e7565b506013546001600160a01b0316600090815260166020526040902054909350612abe9250839150612d12565b6013546001600160a01b0316600090815260166020526040902055601154612ae7908290612d12565b6011556013546040518281526001600160a01b0391821691851690600080516020612fa6833981519152906020016119c9565b600060208083528351808285015260005b81811015612b4757858101830151858201604001528201612b2b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610dbb57600080fd5b60008060408385031215612b9057600080fd5b8235612b9b81612b68565b946020939093013593505050565b600080600060608486031215612bbe57600080fd5b8335612bc981612b68565b92506020840135612bd981612b68565b929592945050506040919091013590565b600060208284031215612bfc57600080fd5b5035919050565b600060208284031215612c1557600080fd5b813561121381612b68565b8015158114610dbb57600080fd5b60008060408385031215612c4157600080fd5b8235612c4c81612b68565b91506020830135612c5c81612c20565b809150509250929050565b60008060408385031215612c7a57600080fd5b8235612c8581612b68565b91506020830135612c5c81612b68565b600181811c90821680612ca957607f821691505b602082108103612cc957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610afe57610afe612cfc565b81810381811115610afe57610afe612cfc565b60208082526024908201527f45524332303a205468652070657263656e746167652063616e2774206d6f7265604082015263101b129760e11b606082015260800190565b8082028115828204841417610afe57610afe612cfc565b634e487b7160e01b600052601260045260246000fd5b600082612db857612db8612d93565b500490565b600060208284031215612dcf57600080fd5b815161121381612c20565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e1857600080fd5b815161121381612b68565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e735784516001600160a01b031683529383019391830191600101612e4e565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215612ea757600080fd5b825167ffffffffffffffff80821115612ebf57600080fd5b818501915085601f830112612ed357600080fd5b815181811115612ee557612ee5612dda565b8060051b604051601f19603f83011681018181108582111715612f0a57612f0a612dda565b604052918252848201925083810185019188831115612f2857600080fd5b938501935b82851015612f4657845184529385019392850192612f2d565b98975050505050505050565b9283526001600160a01b03919091166020830152604082015260600190565b600082612f8057612f80612d93565b50069056fe43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220834f7c2f4cb233063dc582bfa9eb28aec2a93aee48953f8a863f3eb8e59233bc64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806370a08231116101c65780639daa30e3116100f7578063d89135cd11610095578063dd62ed3e1161006f578063dd62ed3e146109b5578063e17c4c74146109fb578063f2fde38b14610a1b578063f98be8ad14610a3b57600080fd5b8063d89135cd14610974578063daed12af1461098a578063db05e5cb146109a057600080fd5b8063b4fe8f6a116100d1578063b4fe8f6a146108fb578063bbc0c74214610910578063cba38f6214610931578063cc1776d31461095e57600080fd5b80639daa30e3146108a5578063a5332f2d146108c5578063a9059cbb146108db57600080fd5b80638da5cb5b116101645780639579d5141161013e5780639579d5141461080a57806395d89b411461083757806396bc05881461084c5780639cc1af631461086c57600080fd5b80638da5cb5b1461079d5780638dc70e82146107bb5780639045be58146107d157600080fd5b80638036d590116101a05780638036d5901461073257806384ff58bd146107485780638a516513146107685780638a8c523c1461078857600080fd5b806370a08231146106d1578063715018a6146107075780637e5f83e81461071c57600080fd5b806342966c68116102a05780635196aadb1161023e57806360d1259e1161021857806360d1259e1461066557806361db244614610685578063664fa9721461069b57806366a88d96146106bb57600080fd5b80635196aadb146105f8578063588d5189146106185780635facf12e1461064557600080fd5b80634626402b1161027a5780634626402b1461059a5780634d5b15d4146105ba5780634e6be544146105da5780634f7041a5146105e257600080fd5b806342966c681461052a57806343cc8c2a1461054a578063452ed4f11461057a57600080fd5b806325e7e3cf1161030d5780633732e214116102e75780633732e214146104ca57806337563293146104e05780633e8c4873146104f55780634048a3741461051557600080fd5b806325e7e3cf1461047d5780632757805514610494578063313ce567146104b557600080fd5b8063132c4feb11610349578063132c4feb1461040e578063165c91e81461043257806318160ddd1461044857806323b872dd1461045d57600080fd5b806306fdde031461037b5780630758d924146103a6578063095ea7b3146103de57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b50610390610a5b565b60405161039d9190612b1a565b60405180910390f35b3480156103b257600080fd5b506012546103c6906001600160a01b031681565b6040516001600160a01b03909116815260200161039d565b3480156103ea57600080fd5b506103fe6103f9366004612b7d565b610aed565b604051901515815260200161039d565b34801561041a57600080fd5b5061042460115481565b60405190815260200161039d565b34801561043e57600080fd5b5061042460075481565b34801561045457600080fd5b50600454610424565b34801561046957600080fd5b506103fe610478366004612ba9565b610b04565b34801561048957600080fd5b50610492610d2a565b005b3480156104a057600080fd5b506013546103fe90600160a81b900460ff1681565b3480156104c157600080fd5b50600354610424565b3480156104d657600080fd5b5061042460105481565b3480156104ec57600080fd5b506103fe610dbe565b34801561050157600080fd5b506103fe610510366004612bea565b610ec5565b34801561052157600080fd5b50610492610f76565b34801561053657600080fd5b50610492610545366004612bea565b610f8f565b34801561055657600080fd5b506103fe610565366004612c03565b601d6020526000908152604090205460ff1681565b34801561058657600080fd5b506013546103c6906001600160a01b031681565b3480156105a657600080fd5b506008546103c6906001600160a01b031681565b3480156105c657600080fd5b506104926105d5366004612bea565b6110a2565b610492611100565b3480156105ee57600080fd5b50610424600d5481565b34801561060457600080fd5b50610492610613366004612c03565b611120565b34801561062457600080fd5b50610424610633366004612c03565b601b6020526000908152604090205481565b34801561065157600080fd5b50610424610660366004612c03565b61116a565b34801561067157600080fd5b50610492610680366004612c03565b61121a565b34801561069157600080fd5b5061042460145481565b3480156106a757600080fd5b506104926106b6366004612bea565b6112eb565b3480156106c757600080fd5b5061042460065481565b3480156106dd57600080fd5b506104246106ec366004612c03565b6001600160a01b031660009081526016602052604090205490565b34801561071357600080fd5b5061049261138b565b34801561072857600080fd5b50610424600a5481565b34801561073e57600080fd5b5061042460055481565b34801561075457600080fd5b50610492610763366004612c2e565b61139f565b34801561077457600080fd5b50610492610783366004612b7d565b6113e5565b34801561079457600080fd5b50610492611517565b3480156107a957600080fd5b506000546001600160a01b03166103c6565b3480156107c757600080fd5b5061042460155481565b3480156107dd57600080fd5b506103fe6107ec366004612c03565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561081657600080fd5b50610424610825366004612c03565b60196020526000908152604090205481565b34801561084357600080fd5b50610390611534565b34801561085857600080fd5b50610492610867366004612bea565b611543565b34801561087857600080fd5b506103fe610887366004612c03565b6001600160a01b03166000908152601e602052604090205460ff1690565b3480156108b157600080fd5b506104926108c0366004612c03565b6115b8565b3480156108d157600080fd5b5061042460095481565b3480156108e757600080fd5b506103fe6108f6366004612b7d565b611649565b34801561090757600080fd5b50610492611757565b34801561091c57600080fd5b506013546103fe90600160a01b900460ff1681565b34801561093d57600080fd5b5061042461094c366004612c03565b601a6020526000908152604090205481565b34801561096a57600080fd5b50610424600c5481565b34801561098057600080fd5b50610424600f5481565b34801561099657600080fd5b50610424600e5481565b3480156109ac57600080fd5b50610492611770565b3480156109c157600080fd5b506104246109d0366004612c67565b6001600160a01b03918216600090815260176020908152604080832093909416825291909152205490565b348015610a0757600080fd5b50610492610a16366004612c03565b611787565b348015610a2757600080fd5b50610492610a36366004612c03565b611854565b348015610a4757600080fd5b50610492610a56366004612bea565b6118ca565b606060018054610a6a90612c95565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9690612c95565b8015610ae35780601f10610ab857610100808354040283529160200191610ae3565b820191906000526020600020905b815481529060010190602001808311610ac657829003601f168201915b5050505050905090565b6000610afa338484611928565b5060015b92915050565b600033610b2c5760405162461bcd60e51b8152600401610b2390612ccf565b60405180910390fd5b6001600160a01b038316610b525760405162461bcd60e51b8152600401610b2390612ccf565b61deac196001600160a01b03841601610ba35760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610b23565b6001600160a01b0384166000908152601760209081526040808320338452909152902054821115610c165760405162461bcd60e51b815260206004820152601e60248201527f45524332303a20496e73756666696369656e7420616c6c6f77616e63652e00006044820152606401610b23565b6001600160a01b038416600090815260166020526040902054821115610c955760405162461bcd60e51b815260206004820152602e60248201527f45524332303a20416d6f756e7420657863656564732073656e6465722773206160448201526d63636f756e742062616c616e636560901b6064820152608401610b23565b6001600160a01b038416600090815260176020908152604080832033845290915290205460001914610d15576001600160a01b0384166000908152601760209081526040808320338452909152902054610cf0908390612d12565b6001600160a01b03851660009081526017602090815260408083203384529091529020555b610d208484846119d6565b5060019392505050565b6008546040516000916001600160a01b03169047908381818185875af1925050503d8060008114610d77576040519150601f19603f3d011682016040523d82523d6000602084013e610d7c565b606091505b505090508015610dbb576040514781527f3a0133def75e9eba8b4be20bfdf7c2800f92d0b460b9718735a2de781d0cab30906020015b60405180910390a15b50565b60003363ffffffff813b1615610e205760405162461bcd60e51b815260206004820152602160248201527f45524332303a2053656e6465722063616e2774206265206120636f6e747261636044820152601d60fa1b6064820152608401610b23565b6015546001600160a01b0382166000908152601a60205260409020544291610e4791612d12565b1115610eb45760405162461bcd60e51b815260206004820152603660248201527f45524332303a205265666c656374696f6e206c6f636b20706572696f6420657860448201527534b9ba399610103a393c9030b3b0b4b7103630ba32b960511b6064820152608401610b23565b610ebd81611ce8565b600191505090565b60008060095411610f225760405162461bcd60e51b815260206004820152602160248201527f45524332303a20496e73756666696369656e7420746f6b656e20746f207377616044820152600760fc1b6064820152608401610b23565b816009541015610f3157600080fd5b47610f3c3084611eb7565b82600954610f4a9190612d25565b6009556000610f598247612d25565b905080601454610f699190612d12565b6014555060019392505050565b610f7e61200f565b6005600c819055600d556032600e55565b336000818152601660205260409020548211156110015760405162461bcd60e51b815260206004820152602a60248201527f45524332303a204275726e20416d6f756e742065786365656473206163636f756044820152696e742062616c616e636560b01b6064820152608401610b23565b600082116110515760405162461bcd60e51b815260206004820181905260248201527f45524332303a20456e74657220736f6d6520616d6f756e7420746f206275726e6044820152606401610b23565b811561109e576001600160a01b03811660009081526016602052604090205461107b908390612d25565b6001600160a01b03821660009081526016602052604090205561109e8183612069565b5050565b6110aa61200f565b60068111156110cb5760405162461bcd60e51b8152600401610b2390612d38565b600d8190556040518181527f7dcc5c536517abaa6eb281914d04431307a734c37f1f9d4a0b6ea5776a455a2d90602001610db2565b6000341161110d57600080fd5b3460145461111b9190612d12565b601455565b61112861200f565b611131816120be565b6040516001600160a01b03821681527f8bf83848cb943ff3c2e2704617248fcebaccbfafd3881cee3738bc2c032fe99090602001610db2565b6013546000906001600160a01b038381169116148061119657506012546001600160a01b038381169116145b156111a357506000919050565b6001600160a01b0382166000908152601960205260408120546014546111c99190612d25565b6001600160a01b0384166000908152601c6020908152604080832054600454601690935292205492935090916111ff9084612d7c565b6112099190612da9565b6112139190612d12565b9392505050565b61122261200f565b6001600160a01b0381166000908152601e602052604090205460ff16156112975760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e7420697320616c7265616479206578636c756460448201526232b21760e91b6064820152608401610b23565b6001600160a01b0381166000818152601e6020908152604091829020805460ff1916600117905590519182527ffbf18c6c9ec09319f6c830e6c7d8e2a42cdd8f8a642daff024aa9eb809ab12309101610db2565b6112f361200f565b60648111156113565760405162461bcd60e51b815260206004820152602960248201527f45524332303a205468652070657263656e746167652063616e2774206d6f72656044820152680207468656e203130360bc1b6064820152608401610b23565b600e8190556040518181527fc3540e43c066c181c7201382c8d897826efdc788cfeeeacbad255a2a70dd1fdc90602001610db2565b61139361200f565b61139d6000612157565b565b6113a761200f565b6001600160a01b039091166000908152601d60209081526040808320805494151560ff199586168117909155601e9092529091208054909216179055565b6113ed61200f565b306001600160a01b0383160361143e5760405162461bcd60e51b815260206004820152601660248201527563616e277420636c61696d206f776e20746f6b656e7360501b6044820152606401610b23565b816001600160a01b031663a9059cbb61145f6000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af11580156114ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d09190612dbd565b50604080516001600160a01b0384168152602081018390527fb6cba7eb069007df60bbb1d3a04b15577e1c155a265fd323e0fee07da17ab0eb910160405180910390a15050565b61151f61200f565b6013805460ff60a01b1916600160a01b179055565b606060028054610a6a90612c95565b61154b61200f565b60075481036115b35760405162461bcd60e51b815260206004820152602e60248201527f43616e6e6f7420757064617465206d696e546f6b656e53776170416d6f756e7460448201526d20746f2073616d652076616c756560901b6064820152608401610b23565b600755565b6115c061200f565b6001600160a01b03811660009081526018602052604090205460ff166116285760405162461bcd60e51b815260206004820152601f60248201527f45524332303a204163636f756e74206d757374206265206578636c75646564006044820152606401610b23565b6001600160a01b03166000908152601860205260409020805460ff19169055565b6000336116685760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b03831661168e5760405162461bcd60e51b8152600401610b2390612ccf565b61deac196001600160a01b038416016116df5760405162461bcd60e51b815260206004820152601360248201527245524332303a2044656164204164647265737360681b6044820152606401610b23565b3360009081526016602052604090205482111561174c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a20416d6f756e742065786365656473206163636f756e742062616044820152646c616e636560d81b6064820152608401610b23565b610afa3384846119d6565b61175f61200f565b6000600c819055600d819055600e55565b61177861200f565b6013805460ff60a81b19169055565b61178f61200f565b6001600160a01b0381166000908152601e602052604090205460ff166118035760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e7420697320616c726561647920696e636c756460448201526232b21760e91b6064820152608401610b23565b6001600160a01b0381166000818152601e6020908152604091829020805460ff1916905590519182527f983e915867979aef6807d457eb95f90775b6d8f0e49009cff53c6fa4473cb3759101610db2565b61185c61200f565b6001600160a01b0381166118c15760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b23565b610dbb81612157565b6118d261200f565b60068111156118f35760405162461bcd60e51b8152600401610b2390612d38565b600c8190556040518181527f10caeb50fe0e719f0abd8c74740443c36472c79bf0f0553e9476a3c131e2b35b90602001610db2565b6001600160a01b03831661194e5760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b0382166119745760405162461bcd60e51b8152600401610b2390612ccf565b6001600160a01b0383811660008181526017602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000546001600160a01b038481169116148015611a0b57506001600160a01b0382166000908152601d602052604090205460ff165b15611a2057611a1b8383836121a7565b505050565b6001600160a01b0383166000908152601d602052604090205460ff1680611a5f57506001600160a01b0382166000908152601d602052604090205460ff165b15611c8957601354600160a01b900460ff161515600114611ac25760405162461bcd60e51b815260206004820152601d60248201527f45524332303a2054726164696e67206973206e6f74206163746976652e0000006044820152606401610b23565b6001600160a01b0383166000908152601e602052604090205460ff168015611b0357506001600160a01b0382166000908152601e602052604090205460ff16155b15611b3257611b12828261232d565b8015611b225750611b22816123bd565b15611a1b57611a1b83838361242c565b6001600160a01b0383166000908152601e602052604090205460ff16158015611b7357506001600160a01b0382166000908152601e602052604090205460ff165b15611b9157611b81816123bd565b15611a1b57611a1b8383836126a2565b6001600160a01b0383166000908152601e602052604090205460ff168015611bd157506001600160a01b0382166000908152601e602052604090205460ff165b15611a1b576000546001600160a01b0384811691161480611bff57506000546001600160a01b038381169116145b80611c1257506001600160a01b03831630145b80611c2557506001600160a01b03821630145b15611c3557611a1b8383836121a7565b6001600160a01b0382166000908152601d602052604090205460ff1615611c6f57611c5f816123bd565b15611a1b57611a1b8383836121a7565b611c79828261232d565b8015611c5f5750611c5f816123bd565b6000546001600160a01b0384811691161480611cb257506000546001600160a01b038381169116145b80611cc557506001600160a01b03831630145b80611cd857506001600160a01b03821630145b15611c6f57611a1b8383836121a7565b6000611cf38261116a565b905060008111611d575760405162461bcd60e51b815260206004820152602960248201527f45524332303a20436c61696d20616d6f756e742073686f756c64206265206d6f60448201526807265207468656e20360bc1b6064820152608401610b23565b6001600160a01b03821660009081526018602052604090205460ff1615611dd75760405162461bcd60e51b815260206004820152602e60248201527f45524332303a2041646472657373206973206578636c7564656420746f20636c60448201526d30b4b6903932b33632b1ba34b7b760911b6064820152608401610b23565b6014546001600160a01b038316600081815260196020908152604080832094909455601a8152838220429055601c90528281208190559151909183156108fc02918491818181858888f19350505050158015611e37573d6000803e3d6000fd5b506001600160a01b0382166000908152601b6020526040902054611e5c908290612d12565b6001600160a01b0383166000818152601b6020526040908190209290925590517faba62311dcf381aba06c0e76b1bb8e427e7c715edb8c84fc169cc1d1f51ac84e90611eab9084815260200190565b60405180910390a25050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611eec57611eec612df0565b6001600160a01b03928316602091820292909201810191909152601254604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f699190612e06565b81600181518110611f7c57611f7c612df0565b6001600160a01b0392831660209182029290920101526012546040516318cbafe560e01b81529116906318cbafe590611fc2908590600090869089904290600401612e23565b6000604051808303816000875af1158015611fe1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120099190810190612e94565b50505050565b6000546001600160a01b0316331461139d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b23565b806004546120779190612d25565b600455600f54612088908290612d12565b600f556040518181526000906001600160a01b03841690600080516020612fa68339815191529060200160405180910390a35050565b6001600160a01b03811660009081526018602052604090205460ff16156121335760405162461bcd60e51b815260206004820152602360248201527f45524332303a204163636f756e74206d757374206e6f74206265206578636c7560448201526219195960ea1b6064820152608401610b23565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b03838116911614806121cb57506001600160a01b03821630145b15612242576001600160a01b0383166000908152601660205260409020546121f4908290612d25565b6001600160a01b038085166000908152601660205260408082209390935590841681522054612224908290612d12565b6001600160a01b0383166000908152601660205260409020556122fa565b61224b8261116a565b6001600160a01b0383166000908152601c602052604090205461226e9190612d12565b6001600160a01b038084166000908152601c602090815260408083209490945560145460198252848320559186168152601690915220546122b0908290612d25565b6001600160a01b0380851660009081526016602052604080822093909355908416815220546122e0908290612d12565b6001600160a01b0383166000908152601660205260409020555b816001600160a01b0316836001600160a01b0316600080516020612fa6833981519152836040516119c991815260200190565b601354600090600160a81b900460ff1615610afa5781612362846001600160a01b031660009081526016602052604090205490565b61236c9190612d12565b6006541015610afa5760405162461bcd60e51b815260206004820152601b60248201527f45524332303a2057616c6c6574206c696d6974206578636565647300000000006044820152606401610b23565b601354600090600160a81b900460ff1615612424576005548211156124245760405162461bcd60e51b815260206004820181905260248201527f45524332303a205472616e73616374696f6e206c696d697420657863656564736044820152606401610b23565b506001919050565b600061243661296c565b905060006064600d548461244a9190612d7c565b6124549190612da9565b905060006124628285612d25565b9050600080600080612473866129e7565b93509350935093506124848961116a565b6001600160a01b038a166000908152601c60205260409020546124a79190612d12565b6001600160a01b03808b166000908152601c60209081526040808320949094556014546019825284832055918d168152601690915220546124e9908990612d25565b6001600160a01b03808c1660009081526016602052604080822093909355908b1681522054612519908690612d12565b6001600160a01b038a16600090815260166020526040808220929092553081522054612546908590612d12565b30600090815260166020526040902055600a54612564908590612d12565b600a5560018790036125a85761257a8a84612069565b600080516020612f86833981519152878b8560405161259b93929190612f52565b60405180910390a161265b565b866002036125db576125ba8a83612a81565b600080516020612f86833981519152878b8460405161259b93929190612f52565b8660030361265b57306000908152601660205260409020546125fe908290612d12565b3060009081526016602052604090205560095461261c908290612d12565b60095560105461262d908290612d12565b601055604051600080516020612f86833981519152906126529089908d908590612f52565b60405180910390a15b886001600160a01b03168a6001600160a01b0316600080516020612fa68339815191528a60405161268e91815260200190565b60405180910390a350505050505050505050565b60006126ac61296c565b905060006064600c54846126c09190612d7c565b6126ca9190612da9565b905060006126d88285612d25565b90506000806000806126e9866129e7565b93509350935093506000600754600a541015905080801561270d5750600b5460ff16155b1561275657600b805460ff19166001179055600854600754612738916001600160a01b031690611eb7565b600b805460ff19169055600754600a546127529190612d25565b600a555b6001600160a01b038b1660009081526016602052604090205461277a908a90612d25565b6001600160a01b03808d1660009081526016602052604080822093909355908c16815220546127aa908790612d12565b6001600160a01b038b166000908152601660205260408082209290925530815220546127d7908690612d12565b30600090815260166020526040902055600a546127f5908690612d12565b600a556001600160a01b038b166000908152601660205260408120549003612831576001600160a01b038a166000908152601c60205260408120555b87600103612871576128438b85612069565b600080516020612f86833981519152888c8660405161286493929190612f52565b60405180910390a1612924565b876002036128a4576128838b84612a81565b600080516020612f86833981519152888c8560405161286493929190612f52565b8760030361292457306000908152601660205260409020546128c7908390612d12565b306000908152601660205260409020556009546128e5908390612d12565b6009556010546128f6908390612d12565b601055604051600080516020612f868339815191529061291b908a908e908690612f52565b60405180910390a15b896001600160a01b03168b6001600160a01b0316600080516020612fa68339815191528b60405161295791815260200190565b60405180910390a35050505050505050505050565b6040805142602082015244918101919091524560608083019190915232901b6bffffffffffffffffffffffff191660808201524360948201523a60b482015260009060039060d4016040516020818303038152906040528051906020012060001c6129d79190612f71565b6129e2906001612d12565b905090565b6000808080808080808815612a72576064600e546064612a079190612d25565b612a11908b612d7c565b612a1b9190612da9565b93506064600e548a612a2d9190612d7c565b612a379190612da9565b92506064600e548a612a499190612d7c565b612a539190612da9565b91506064600e548a612a659190612d7c565b612a6f9190612da9565b90505b92989197509550909350915050565b801561109e576000612a92826129e7565b506013546001600160a01b0316600090815260166020526040902054909350612abe9250839150612d12565b6013546001600160a01b0316600090815260166020526040902055601154612ae7908290612d12565b6011556013546040518281526001600160a01b0391821691851690600080516020612fa6833981519152906020016119c9565b600060208083528351808285015260005b81811015612b4757858101830151858201604001528201612b2b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610dbb57600080fd5b60008060408385031215612b9057600080fd5b8235612b9b81612b68565b946020939093013593505050565b600080600060608486031215612bbe57600080fd5b8335612bc981612b68565b92506020840135612bd981612b68565b929592945050506040919091013590565b600060208284031215612bfc57600080fd5b5035919050565b600060208284031215612c1557600080fd5b813561121381612b68565b8015158114610dbb57600080fd5b60008060408385031215612c4157600080fd5b8235612c4c81612b68565b91506020830135612c5c81612c20565b809150509250929050565b60008060408385031215612c7a57600080fd5b8235612c8581612b68565b91506020830135612c5c81612b68565b600181811c90821680612ca957607f821691505b602082108103612cc957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526013908201527245524332303a205a65726f204164647265737360681b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610afe57610afe612cfc565b81810381811115610afe57610afe612cfc565b60208082526024908201527f45524332303a205468652070657263656e746167652063616e2774206d6f7265604082015263101b129760e11b606082015260800190565b8082028115828204841417610afe57610afe612cfc565b634e487b7160e01b600052601260045260246000fd5b600082612db857612db8612d93565b500490565b600060208284031215612dcf57600080fd5b815161121381612c20565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060208284031215612e1857600080fd5b815161121381612b68565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612e735784516001600160a01b031683529383019391830191600101612e4e565b50506001600160a01b03969096166060850152505050608001529392505050565b60006020808385031215612ea757600080fd5b825167ffffffffffffffff80821115612ebf57600080fd5b818501915085601f830112612ed357600080fd5b815181811115612ee557612ee5612dda565b8060051b604051601f19603f83011681018181108582111715612f0a57612f0a612dda565b604052918252848201925083810185019188831115612f2857600080fd5b938501935b82851015612f4657845184529385019392850192612f2d565b98975050505050505050565b9283526001600160a01b03919091166020830152604082015260600190565b600082612f8057612f80612d93565b50069056fe43430960b1421ddf891d3754c233acfb8948fc4b9912cbd819ca4f09701fbf58ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220834f7c2f4cb233063dc582bfa9eb28aec2a93aee48953f8a863f3eb8e59233bc64736f6c63430008120033

Deployed Bytecode Sourcemap

10039:20601:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13432:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10754:35;;;;;;;;;;-1:-1:-1;10754:35:0;;;;-1:-1:-1;;;;;10754:35:0;;;;;;-1:-1:-1;;;;;757:32:1;;;739:51;;727:2;712:18;10754:35:0;567:229:1;14099:159:0;;;;;;;;;;-1:-1:-1;14099:159:0;;;;;:::i;:::-;;:::i;:::-;;;1422:14:1;;1415:22;1397:41;;1385:2;1370:18;14099:159:0;1257:187:1;10723:22:0;;;;;;;;;;;;;;;;;;;1595:25:1;;;1583:2;1568:18;10723:22:0;1449:177:1;10279:33:0;;;;;;;;;;;;;;;;13711:100;;;;;;;;;;-1:-1:-1;13791:12:0;;13711:100;;15048:744;;;;;;;;;;-1:-1:-1;15048:744:0;;;;;:::i;:::-;;:::i;28118:224::-;;;;;;;;;;;;;:::i;:::-;;10861:23;;;;;;;;;;-1:-1:-1;10861:23:0;;;;-1:-1:-1;;;10861:23:0;;;;;;13618:85;;;;;;;;;;-1:-1:-1;13686:9:0;;13618:85;;10687:29;;;;;;;;;;;;;;;;25116:398;;;;;;;;;;;;;:::i;25522:579::-;;;;;;;;;;-1:-1:-1;25522:579:0;;;;;:::i;:::-;;:::i;27261:130::-;;;;;;;;;;;;;:::i;22265:415::-;;;;;;;;;;-1:-1:-1;22265:415:0;;;;;:::i;:::-;;:::i;11425:43::-;;;;;;;;;;-1:-1:-1;11425:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;10796:22;;;;;;;;;;-1:-1:-1;10796:22:0;;;;-1:-1:-1;;;;;10796:22:0;;;10319:37;;;;;;;;;;-1:-1:-1;10319:37:0;;;;-1:-1:-1;;;;;10319:37:0;;;26564:182;;;;;;;;;;-1:-1:-1;26564:182:0;;;;;:::i;:::-;;:::i;23210:148::-;;;:::i;10586:21::-;;;;;;;;;;;;;;;;23721:160;;;;;;;;;;-1:-1:-1;23721:160:0;;;;;:::i;:::-;;:::i;11295:58::-;;;;;;;;;;-1:-1:-1;11295:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;24098:334;;;;;;;;;;-1:-1:-1;24098:334:0;;;;;:::i;:::-;;:::i;27619:240::-;;;;;;;;;;-1:-1:-1;27619:240:0;;;;;:::i;:::-;;:::i;10891:34::-;;;;;;;;;;;;;;;;26754:253;;;;;;;;;;-1:-1:-1;26754:253:0;;;;;:::i;:::-;;:::i;10242:30::-;;;;;;;;;;;;;;;;13819:119;;;;;;;;;;-1:-1:-1;13819:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;13912:18:0;13885:7;13912:18;;;:9;:18;;;;;;;13819:119;1754:103;;;;;;;;;;;;;:::i;10403:35::-;;;;;;;;;;;;;;;;10209:26;;;;;;;;;;;;;;;;27106:147;;;;;;;;;;-1:-1:-1;27106:147:0;;;;;:::i;:::-;;:::i;28350:249::-;;;;;;;;;;-1:-1:-1;28350:249:0;;;;;:::i;:::-;;:::i;27015:83::-;;;;;;;;;;;;;:::i;1519:87::-;;;;;;;;;;-1:-1:-1;1565:7:0;1592:6;-1:-1:-1;;;;;1592:6:0;1519:87;;10932:36;;;;;;;;;;;;;;;;23366:128;;;;;;;;;;-1:-1:-1;23366:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;23458:28:0;23434:4;23458:28;;;:19;:28;;;;;;;;;23366:128;11167:55;;;;;;;;;;-1:-1:-1;11167:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;13523:87;;;;;;;;;;;;;:::i;26109:254::-;;;;;;;;;;-1:-1:-1;26109:254:0;;;;;:::i;:::-;;:::i;28607:128::-;;;;;;;;;;-1:-1:-1;28607:128:0;;;;;:::i;:::-;-1:-1:-1;;;;;28699:28:0;28675:4;28699:28;;;:18;:28;;;;;;;;;28607:128;23502:211;;;;;;;;;;-1:-1:-1;23502:211:0;;;;;:::i;:::-;;:::i;10363:33::-;;;;;;;;;;;;;;;;14584:456;;;;;;;;;;-1:-1:-1;14584:456:0;;;;;:::i;:::-;;:::i;27399:126::-;;;;;;;;;;;;;:::i;10825:29::-;;;;;;;;;;-1:-1:-1;10825:29:0;;;;-1:-1:-1;;;10825:29:0;;;;;;11229:59;;;;;;;;;;-1:-1:-1;11229:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;10557:22;;;;;;;;;;;;;;;;10654:26;;;;;;;;;;;;;;;;10614:33;;;;;;;;;;;;;;;;27533:78;;;;;;;;;;;;;:::i;13946:145::-;;;;;;;;;;-1:-1:-1;13946:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;14055:19:0;;;14028:7;14055:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;13946:145;27867:239;;;;;;;;;;-1:-1:-1;27867:239:0;;;;;:::i;:::-;;:::i;1865:201::-;;;;;;;;;;-1:-1:-1;1865:201:0;;;;;:::i;:::-;;:::i;26371:185::-;;;;;;;;;;-1:-1:-1;26371:185:0;;;;;:::i;:::-;;:::i;13432:83::-;13469:13;13502:5;13495:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13432:83;:::o;14099:159::-;14174:4;14191:37;14200:10;14212:7;14221:6;14191:8;:37::i;:::-;-1:-1:-1;14246:4:0;14099:159;;;;;:::o;15048:744::-;15146:4;1064:10;15163:58;;;;-1:-1:-1;;;15163:58:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;15240:23:0;;15232:55;;;;-1:-1:-1;;;15232:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;15306:17:0;;;15298:49;;;;-1:-1:-1;;;15298:49:0;;4799:2:1;15298:49:0;;;4781:21:1;4838:2;4818:18;;;4811:30;-1:-1:-1;;;4857:18:1;;;4850:49;4916:18;;15298:49:0;4597:343:1;15298:49:0;-1:-1:-1;;;;;15366:19:0;;;;;;:11;:19;;;;;;;;15386:10;15366:31;;;;;;;;:41;-1:-1:-1;15366:41:0;15358:84;;;;-1:-1:-1;;;15358:84:0;;5147:2:1;15358:84:0;;;5129:21:1;5186:2;5166:18;;;5159:30;5225:32;5205:18;;;5198:60;5275:18;;15358:84:0;4945:354:1;15358:84:0;-1:-1:-1;;;;;15461:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;15461:27:0;15453:86;;;;-1:-1:-1;;;15453:86:0;;5506:2:1;15453:86:0;;;5488:21:1;5545:2;5525:18;;;5518:30;5584:34;5564:18;;;5557:62;-1:-1:-1;;;5635:18:1;;;5628:44;5689:19;;15453:86:0;5304:410:1;15453:86:0;-1:-1:-1;;;;;15556:19:0;;;;;;:11;:19;;;;;;;;15576:10;15556:31;;;;;;;;-1:-1:-1;;15556:52:0;15552:162;;-1:-1:-1;;;;;15660:19:0;;;;;;:11;:19;;;;;;;;15680:10;15660:31;;;;;;;;:42;;15695:6;;15660:42;:::i;:::-;-1:-1:-1;;;;;15625:19:0;;;;;;:11;:19;;;;;;;;15645:10;15625:31;;;;;;;:77;15552:162;15724:36;15734:6;15742:9;15753:6;15724:9;:36::i;:::-;-1:-1:-1;15780:4:0;15048:744;;;;;:::o;28118:224::-;28188:14;;28180:62;;28162:12;;-1:-1:-1;;;;;28188:14:0;;28216:21;;28162:12;28180:62;28162:12;28180:62;28216:21;28188:14;28180:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28161:81;;;28257:7;28253:82;;;28286:37;;28301:21;1595:25:1;;28286:37:0;;1583:2:1;1568:18;28286:37:0;;;;;;;;28253:82;28150:192;28118:224::o;25116:398::-;25161:4;1064:10;30259:8;30212:18;;30259:8;;25219:67;;;;-1:-1:-1;;;25219:67:0;;6393:2:1;25219:67:0;;;6375:21:1;6432:2;6412:18;;;6405:30;6471:34;6451:18;;;6444:62;-1:-1:-1;;;6522:18:1;;;6515:31;6563:19;;25219:67:0;6191:397:1;25219:67:0;25341:20;;-1:-1:-1;;;;;25306:32:0;;;;;;:23;:32;;;;;;25365:15;;25306:55;;;:::i;:::-;:74;;25298:141;;;;-1:-1:-1;;;25298:141:0;;6795:2:1;25298:141:0;;;6777:21:1;6834:2;6814:18;;;6807:30;6873:34;6853:18;;;6846:62;-1:-1:-1;;;6924:18:1;;;6917:52;6986:19;;25298:141:0;6593:418:1;25298:141:0;25450:34;25475:7;25450:16;:34::i;:::-;25502:4;25495:11;;;25116:398;:::o;25522:579::-;25578:4;25694:1;25674:17;;:21;25666:67;;;;-1:-1:-1;;;25666:67:0;;7218:2:1;25666:67:0;;;7200:21:1;7257:2;7237:18;;;7230:30;7296:34;7276:18;;;7269:62;-1:-1:-1;;;7347:18:1;;;7340:31;7388:19;;25666:67:0;7016:397:1;25666:67:0;25773:6;25752:17;;:27;;25744:36;;;;;;25816:21;25848:28;25862:4;25869:6;25848:5;:28::i;:::-;25927:6;25907:17;;:26;;;;:::i;:::-;25887:17;:46;25944:19;25966:40;25992:14;25967:21;25966:40;:::i;:::-;25944:62;;26060:11;26039:18;;:32;;;;:::i;:::-;26017:18;:54;-1:-1:-1;26089:4:0;;25522:579;-1:-1:-1;;;25522:579:0:o;27261:130::-;1478:13;:11;:13::i;:::-;27326:1:::1;27316:7;:11:::0;;;27338:6:::1;:11:::0;27381:2:::1;27360:18;:23:::0;27261:130::o;22265:415::-;22336:10;22319:14;22365:17;;;:9;:17;;;;;;:33;-1:-1:-1;22365:33:0;22357:88;;;;-1:-1:-1;;;22357:88:0;;7753:2:1;22357:88:0;;;7735:21:1;7792:2;7772:18;;;7765:30;7831:34;7811:18;;;7804:62;-1:-1:-1;;;7882:18:1;;;7875:40;7932:19;;22357:88:0;7551:406:1;22357:88:0;22479:1;22464:12;:16;22456:61;;;;-1:-1:-1;;;22456:61:0;;8164:2:1;22456:61:0;;;8146:21:1;;;8183:18;;;8176:30;8242:34;8222:18;;;8215:62;8294:18;;22456:61:0;7962:356:1;22456:61:0;22534:16;;22530:143;;-1:-1:-1;;;;;22587:17:0;;;;;;:9;:17;;;;;;:32;;22607:12;;22587:32;:::i;:::-;-1:-1:-1;;;;;22567:17:0;;;;;;:9;:17;;;;;:52;22634:27;22577:6;22648:12;22634:5;:27::i;:::-;22308:372;22265:415;:::o;26564:182::-;1478:13;:11;:13::i;:::-;26639:1:::1;26632:3;:8;;26624:57;;;;-1:-1:-1::0;;;26624:57:0::1;;;;;;;:::i;:::-;26692:6;:12:::0;;;26720:18:::1;::::0;1595:25:1;;;26720:18:0::1;::::0;1583:2:1;1568:18;26720::0::1;1449:177:1::0;23210:148:0;23284:1;23272:9;:13;23263:23;;;;;;23340:9;23318:18;;:32;;;;:::i;:::-;23297:18;:53;23210:148::o;23721:160::-;1478:13;:11;:13::i;:::-;23799:31:::1;23822:7;23799:22;:31::i;:::-;23846:27;::::0;-1:-1:-1;;;;;757:32:1;;739:51;;23846:27:0::1;::::0;727:2:1;712:18;23846:27:0::1;567:229:1::0;24098:334:0;24194:6;;24162:7;;-1:-1:-1;;;;;24186:14:0;;;24194:6;;24186:14;;:44;;-1:-1:-1;24220:9:0;;-1:-1:-1;;;;;24204:26:0;;;24220:9;;24204:26;24186:44;24182:58;;;-1:-1:-1;24239:1:0;;24098:334;-1:-1:-1;24098:334:0:o;24182:58::-;-1:-1:-1;;;;;24300:25:0;;24253:23;24300:25;;;:19;:25;;;;;;24279:18;;:46;;24300:25;24279:46;:::i;:::-;-1:-1:-1;;;;;24398:26:0;;;;;;:20;:26;;;;;;;;;24382:12;;13912:9;:18;;;;;;24253:72;;-1:-1:-1;24398:26:0;;24345:33;;:15;:33;:::i;:::-;24344:50;;;;:::i;:::-;24343:81;;;;:::i;:::-;24336:88;24098:334;-1:-1:-1;;;24098:334:0:o;27619:240::-;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;27697:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;::::1;;27696:28;27688:76;;;::::0;-1:-1:-1;;;27688:76:0;;9360:2:1;27688:76:0::1;::::0;::::1;9342:21:1::0;9399:2;9379:18;;;9372:30;9438:34;9418:18;;;9411:62;-1:-1:-1;;;9489:18:1;;;9482:33;9532:19;;27688:76:0::1;9158:399:1::0;27688:76:0::1;-1:-1:-1::0;;;;;27775:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:34;;-1:-1:-1;;27775:34:0::1;27805:4;27775:34;::::0;;27825:26;;739:51:1;;;27825:26:0::1;::::0;712:18:1;27825:26:0::1;567:229:1::0;26754:253:0;1478:13;:11;:13::i;:::-;26855:3:::1;26841:10;:17;;26833:71;;;::::0;-1:-1:-1;;;26833:71:0;;9764:2:1;26833:71:0::1;::::0;::::1;9746:21:1::0;9803:2;9783:18;;;9776:30;9842:34;9822:18;;;9815:62;-1:-1:-1;;;9893:18:1;;;9886:39;9942:19;;26833:71:0::1;9562:405:1::0;26833:71:0::1;26915:18;:31:::0;;;26962:37:::1;::::0;1595:25:1;;;26962:37:0::1;::::0;1583:2:1;1568:18;26962:37:0::1;1449:177:1::0;1754:103:0;1478:13;:11;:13::i;:::-;1819:30:::1;1846:1;1819:18;:30::i;:::-;1754:103::o:0;27106:147::-;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;27179:13:0;;::::1;;::::0;;;:7:::1;:13;::::0;;;;;;;:22;;;::::1;;-1:-1:-1::0;;27179:22:0;;::::1;::::0;::::1;::::0;;;27212:18:::1;:24:::0;;;;;;:33;;;;::::1;;::::0;;27106:147::o;28350:249::-;1478:13;:11;:13::i;:::-;28461:4:::1;-1:-1:-1::0;;;;;28444:22:0;::::1;::::0;28436:56:::1;;;::::0;-1:-1:-1;;;28436:56:0;;10174:2:1;28436:56:0::1;::::0;::::1;10156:21:1::0;10213:2;10193:18;;;10186:30;-1:-1:-1;;;10232:18:1;;;10225:52;10294:18;;28436:56:0::1;9972:346:1::0;28436:56:0::1;28510:5;-1:-1:-1::0;;;;;28503:22:0::1;;28526:7;1565::::0;1592:6;-1:-1:-1;;;;;1592:6:0;;1519:87;28526:7:::1;28503:39;::::0;-1:-1:-1;;;;;;28503:39:0::1;::::0;;;;;;-1:-1:-1;;;;;10515:32:1;;;28503:39:0::1;::::0;::::1;10497:51:1::0;10564:18;;;10557:34;;;10470:18;;28503:39:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;28558:33:0::1;::::0;;-1:-1:-1;;;;;10515:32:1;;10497:51;;10579:2;10564:18;;10557:34;;;28558:33:0::1;::::0;10470:18:1;28558:33:0::1;;;;;;;28350:249:::0;;:::o;27015:83::-;1478:13;:11;:13::i;:::-;27070::::1;:20:::0;;-1:-1:-1;;;;27070:20:0::1;-1:-1:-1::0;;;27070:20:0::1;::::0;;27015:83::o;13523:87::-;13562:13;13595:7;13588:14;;;;;:::i;26109:254::-;1478:13;:11;:13::i;:::-;26223:18:::1;;26211:8;:30:::0;26189:126:::1;;;::::0;-1:-1:-1;;;26189:126:0;;11054:2:1;26189:126:0::1;::::0;::::1;11036:21:1::0;11093:2;11073:18;;;11066:30;11132:34;11112:18;;;11105:62;-1:-1:-1;;;11183:18:1;;;11176:44;11237:19;;26189:126:0::1;10852:410:1::0;26189:126:0::1;26326:18;:29:::0;26109:254::o;23502:211::-;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;23458:28:0;;23434:4;23458:28;;;:19;:28;;;;;;;;23583:73:::1;;;::::0;-1:-1:-1;;;23583:73:0;;11469:2:1;23583:73:0::1;::::0;::::1;11451:21:1::0;11508:2;11488:18;;;11481:30;11547:33;11527:18;;;11520:61;11598:18;;23583:73:0::1;11267:355:1::0;23583:73:0::1;-1:-1:-1::0;;;;;23669:28:0::1;23700:5;23669:28:::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;23669:36:0::1;::::0;;23502:211::o;14584:456::-;14662:4;1064:10;14679:58;;;;-1:-1:-1;;;14679:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14756:23:0;;14748:55;;;;-1:-1:-1;;;14748:55:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;14822:17:0;;;14814:49;;;;-1:-1:-1;;;14814:49:0;;4799:2:1;14814:49:0;;;4781:21:1;4838:2;4818:18;;;4811:30;-1:-1:-1;;;4857:18:1;;;4850:49;4916:18;;14814:49:0;4597:343:1;14814:49:0;14892:10;14882:21;;;;:9;:21;;;;;;:31;-1:-1:-1;14882:31:0;14874:81;;;;-1:-1:-1;;;14874:81:0;;11829:2:1;14874:81:0;;;11811:21:1;11868:2;11848:18;;;11841:30;11907:34;11887:18;;;11880:62;-1:-1:-1;;;11958:18:1;;;11951:35;12003:19;;14874:81:0;11627:401:1;14874:81:0;14968:40;14978:10;14990:9;15001:6;14968:9;:40::i;27399:126::-;1478:13;:11;:13::i;:::-;27461:1:::1;27451:7;:11:::0;;;27473:6:::1;:11:::0;;;27495:18:::1;:22:::0;27399:126::o;27533:78::-;1478:13;:11;:13::i;:::-;27588:7:::1;:15:::0;;-1:-1:-1;;;;27588:15:0::1;::::0;;27533:78::o;27867:239::-;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;27943:28:0;::::1;;::::0;;;:18:::1;:28;::::0;;;;;::::1;;27935:76;;;::::0;-1:-1:-1;;;27935:76:0;;12235:2:1;27935:76:0::1;::::0;::::1;12217:21:1::0;12274:2;12254:18;;;12247:30;12313:34;12293:18;;;12286:62;-1:-1:-1;;;12364:18:1;;;12357:33;12407:19;;27935:76:0::1;12033:399:1::0;27935:76:0::1;-1:-1:-1::0;;;;;28022:28:0;::::1;28053:5;28022:28:::0;;;:18:::1;:28;::::0;;;;;;;;:36;;-1:-1:-1;;28022:36:0::1;::::0;;28074:24;;739:51:1;;;28074:24:0::1;::::0;712:18:1;28074:24:0::1;567:229:1::0;1865:201:0;1478:13;:11;:13::i;:::-;-1:-1:-1;;;;;1954:22:0;::::1;1946:73;;;::::0;-1:-1:-1;;;1946:73:0;;12639:2:1;1946:73:0::1;::::0;::::1;12621:21:1::0;12678:2;12658:18;;;12651:30;12717:34;12697:18;;;12690:62;-1:-1:-1;;;12768:18:1;;;12761:36;12814:19;;1946:73:0::1;12437:402:1::0;1946:73:0::1;2030:28;2049:8;2030:18;:28::i;26371:185::-:0;1478:13;:11;:13::i;:::-;26447:1:::1;26440:3;:8;;26432:57;;;;-1:-1:-1::0;;;26432:57:0::1;;;;;;;:::i;:::-;26500:7;:13:::0;;;26529:19:::1;::::0;1595:25:1;;;26529:19:0::1;::::0;1583:2:1;1568:18;26529:19:0::1;1449:177:1::0;14266:310:0;-1:-1:-1;;;;;14360:21:0;;14352:53;;;;-1:-1:-1;;;14352:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14424:21:0;;14416:53;;;;-1:-1:-1;;;14416:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14482:19:0;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:37;;;14535:33;;1595:25:1;;;14535:33:0;;1568:18:1;14535:33:0;;;;;;;;14266:310;;;:::o;15800:1968::-;1565:7;1592:6;-1:-1:-1;;;;;15895:17:0;;;1592:6;;15895:17;:39;;;;-1:-1:-1;;;;;;15916:18:0;;;;;;:7;:18;;;;;;;;15895:39;15891:1870;;;15951:48;15973:6;15981:9;15992:6;15951:21;:48::i;:::-;15800:1968;;;:::o;15891:1870::-;-1:-1:-1;;;;;16030:15:0;;;;;;:7;:15;;;;;;;;;:37;;-1:-1:-1;;;;;;16049:18:0;;;;;;:7;:18;;;;;;;;16030:37;16026:1735;;;16091:13;;-1:-1:-1;;;16091:13:0;;;;:21;;16108:4;16091:21;16083:63;;;;-1:-1:-1;;;16083:63:0;;13046:2:1;16083:63:0;;;13028:21:1;13085:2;13065:18;;;13058:30;13124:31;13104:18;;;13097:59;13173:18;;16083:63:0;12844:353:1;16083:63:0;-1:-1:-1;;;;;16179:26:0;;;;;;:18;:26;;;;;;;;:60;;;;-1:-1:-1;;;;;;16210:29:0;;;;;;:18;:29;;;;;;;;16209:30;16179:60;16175:1193;;;16263:36;16281:9;16292:6;16263:17;:36::i;:::-;:61;;;;;16303:21;16317:6;16303:13;:21::i;:::-;16259:168;;;16349:39;16362:6;16370:9;16381:6;16349:12;:39::i;16175:1193::-;-1:-1:-1;;;;;16470:26:0;;;;;;:18;:26;;;;;;;;16469:27;:60;;;;-1:-1:-1;;;;;;16500:29:0;;;;;;:18;:29;;;;;;;;16469:60;16465:903;;;16553:21;16567:6;16553:13;:21::i;:::-;16549:130;;;16599:40;16613:6;16621:9;16632:6;16599:13;:40::i;16465:903::-;-1:-1:-1;;;;;16717:26:0;;;;;;:18;:26;;;;;;;;:59;;;;-1:-1:-1;;;;;;16747:29:0;;;;;;:18;:29;;;;;;;;16717:59;16713:655;;;1565:7;1592:6;-1:-1:-1;;;;;16801:17:0;;;1592:6;;16801:17;;:41;;-1:-1:-1;1565:7:0;1592:6;-1:-1:-1;;;;;16822:20:0;;;1592:6;;16822:20;16801:41;:68;;;-1:-1:-1;;;;;;16846:23:0;;16864:4;16846:23;16801:68;:98;;;-1:-1:-1;;;;;;16873:26:0;;16894:4;16873:26;16801:98;16797:556;;;16924:48;16946:6;16954:9;16965:6;16924:21;:48::i;16797:556::-;-1:-1:-1;;;;;17002:18:0;;;;;;:7;:18;;;;;;;;16998:355;;;17049:21;17063:6;17049:13;:21::i;:::-;17045:126;;;17099:48;17121:6;17129:9;17140:6;17099:21;:48::i;16998:355::-;17200:36;17218:9;17229:6;17200:17;:36::i;:::-;:61;;;;;17240:21;17254:6;17240:13;:21::i;16026:1735::-;1565:7;1592:6;-1:-1:-1;;;;;17405:17:0;;;1592:6;;17405:17;;:41;;-1:-1:-1;1565:7:0;1592:6;-1:-1:-1;;;;;17426:20:0;;;1592:6;;17426:20;17405:41;:68;;;-1:-1:-1;;;;;;17450:23:0;;17468:4;17450:23;17405:68;:98;;;-1:-1:-1;;;;;;17477:26:0;;17498:4;17477:26;17405:98;17401:349;;;17528:48;17550:6;17558:9;17569:6;17528:21;:48::i;24440:668::-;24508:17;24528:25;24548:4;24528:19;:25::i;:::-;24508:45;;24584:1;24572:9;:13;24564:67;;;;-1:-1:-1;;;24564:67:0;;13404:2:1;24564:67:0;;;13386:21:1;13443:2;13423:18;;;13416:30;13482:34;13462:18;;;13455:62;-1:-1:-1;;;13533:18:1;;;13526:39;13582:19;;24564:67:0;13202:405:1;24564:67:0;-1:-1:-1;;;;;23458:28:0;;23434:4;23458:28;;;:19;:28;;;;;;;;24650:35;24642:94;;;;-1:-1:-1;;;24642:94:0;;13814:2:1;24642:94:0;;;13796:21:1;13853:2;13833:18;;;13826:30;13892:34;13872:18;;;13865:62;-1:-1:-1;;;13943:18:1;;;13936:44;13997:19;;24642:94:0;13612:410:1;24642:94:0;24785:18;;-1:-1:-1;;;;;24757:25:0;;;;;;:19;:25;;;;;;;;:46;;;;24814:23;:29;;;;;24846:15;24814:47;;24903:20;:26;;;;;:30;;;24944:24;;24757:25;;24944:24;;;;;24958:9;;24944:24;24757:25;24944:24;24958:9;24757:25;24944:24;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25010:28:0;;;;;;:22;:28;;;;;;:40;;25041:9;;25010:40;:::i;:::-;-1:-1:-1;;;;;24979:28:0;;;;;;:22;:28;;;;;;;:71;;;;25066:34;;;;;;25090:9;1595:25:1;;1583:2;1568:18;;1449:177;25066:34:0;;;;;;;;24497:611;24440:668;:::o;30284:353::-;30377:16;;;30391:1;30377:16;;;;;;;;30353:21;;30377:16;;;;;;;;;;-1:-1:-1;30377:16:0;30353:40;;30422:4;30404;30409:1;30404:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30404:23:0;;;:7;;;;;;;;;;:23;;;;30448:9;;:16;;;-1:-1:-1;;;30448:16:0;;;;:9;;;;;:14;;:16;;;;;30404:7;;30448:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30438:4;30443:1;30438:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;30438:26:0;;;:7;;;;;;;;;:26;30477:9;;:152;;-1:-1:-1;;;30477:152:0;;:9;;;:31;;:152;;30523:6;;30477:9;;30560:4;;30579:9;;30603:15;;30477:152;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;30477:152:0;;;;;;;;;;;;:::i;:::-;;30342:295;30284:353;;:::o;1614:132::-;1565:7;1592:6;-1:-1:-1;;;;;1592:6:0;1064:10;1678:23;1670:68;;;;-1:-1:-1;;;1670:68:0;;16844:2:1;1670:68:0;;;16826:21:1;;;16863:18;;;16856:30;16922:34;16902:18;;;16895:62;16974:18;;1670:68:0;16642:356:1;22688:214:0;22782:6;22767:12;;:21;;;;:::i;:::-;22752:12;:36;22814:11;;:20;;22828:6;;22814:20;:::i;:::-;22799:11;:35;22860:34;;1595:25:1;;;22883:1:0;;-1:-1:-1;;;;;22860:34:0;;;-1:-1:-1;;;;;;;;;;;22860:34:0;1583:2:1;1568:18;22860:34:0;;;;;;;22688:214;;:::o;23889:201::-;-1:-1:-1;;;;;23458:28:0;;23434:4;23458:28;;;:19;:28;;;;;;;;23966:30;23958:78;;;;-1:-1:-1;;;23958:78:0;;17205:2:1;23958:78:0;;;17187:21:1;17244:2;17224:18;;;17217:30;17283:34;17263:18;;;17256:62;-1:-1:-1;;;17334:18:1;;;17327:33;17377:19;;23958:78:0;17003:399:1;23958:78:0;-1:-1:-1;;;;;24047:28:0;;;;;:19;:28;;;;;:35;;-1:-1:-1;;24047:35:0;24078:4;24047:35;;;23889:201::o;2074:191::-;2148:16;2167:6;;-1:-1:-1;;;;;2184:17:0;;;-1:-1:-1;;;;;;2184:17:0;;;;;;2217:40;;2167:6;;;;;;;2217:40;;2148:16;2217:40;2137:128;2074:191;:::o;21567:690::-;1565:7;1592:6;-1:-1:-1;;;;;21671:20:0;;;1592:6;;21671:20;;:50;;-1:-1:-1;;;;;;21695:26:0;;21716:4;21695:26;21671:50;21668:529;;;-1:-1:-1;;;;;21760:17:0;;;;;;:9;:17;;;;;;:26;;21780:6;;21760:26;:::i;:::-;-1:-1:-1;;;;;21737:17:0;;;;;;;:9;:17;;;;;;:49;;;;21824:20;;;;;;;:29;;21847:6;;21824:29;:::i;:::-;-1:-1:-1;;;;;21801:20:0;;;;;;:9;:20;;;;;:52;21668:529;;;21954:30;21974:9;21954:19;:30::i;:::-;-1:-1:-1;;;;;21920:31:0;;;;;;:20;:31;;;;;;:64;;;;:::i;:::-;-1:-1:-1;;;;;21886:31:0;;;;;;;:20;:31;;;;;;;;:98;;;;22034:18;;22000:19;:30;;;;;:52;22092:17;;;;;:9;:17;;;;;:26;;22112:6;;22092:26;:::i;:::-;-1:-1:-1;;;;;22069:17:0;;;;;;;:9;:17;;;;;;:49;;;;22156:20;;;;;;;:29;;22179:6;;22156:29;:::i;:::-;-1:-1:-1;;;;;22133:20:0;;;;;;:9;:20;;;;;:52;21668:529;22231:9;-1:-1:-1;;;;;22214:35:0;22223:6;-1:-1:-1;;;;;22214:35:0;-1:-1:-1;;;;;;;;;;;22242:6:0;22214:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;29611:251:0;29714:7;;29694:4;;-1:-1:-1;;;29714:7:0;;;;29710:123;;;29783:6;29760:20;29770:9;-1:-1:-1;;;;;13912:18:0;13885:7;13912:18;;;:9;:18;;;;;;;13819:119;29760:20;:29;;;;:::i;:::-;29742:14;;:47;;29734:87;;;;-1:-1:-1;;;29734:87:0;;17609:2:1;29734:87:0;;;17591:21:1;17648:2;17628:18;;;17621:30;17687:29;17667:18;;;17660:57;17734:18;;29734:87:0;17407:351:1;29870:206:0;29950:7;;29930:4;;-1:-1:-1;;;29950:7:0;;;;29946:101;;;29988:10;;29978:6;:20;;29970:65;;;;-1:-1:-1;;;29970:65:0;;17965:2:1;29970:65:0;;;17947:21:1;;;17984:18;;;17977:30;18043:34;18023:18;;;18016:62;18095:18;;29970:65:0;17763:356:1;29970:65:0;-1:-1:-1;30064:4:0;;29870:206;-1:-1:-1;29870:206:0:o;17776:1729::-;17900:21;17925:24;:22;:24::i;:::-;17900:49;;17960:17;18002:3;17994:6;;17984;:17;;;;:::i;:::-;:21;;;;:::i;:::-;17960:45;-1:-1:-1;18016:21:0;18040:20;17960:45;18040:6;:20;:::i;:::-;18016:44;;18101:22;18125:18;18145:16;18163:24;18192;18206:9;18192:13;:24::i;:::-;18099:117;;;;;;;;18305:30;18325:9;18305:19;:30::i;:::-;-1:-1:-1;;;;;18271:31:0;;;;;;:20;:31;;;;;;:64;;;;:::i;:::-;-1:-1:-1;;;;;18237:31:0;;;;;;;:20;:31;;;;;;;;:98;;;;18381:18;;18347:19;:30;;;;;:52;18439:17;;;;;:9;:17;;;;;:28;;18460:6;;18439:28;:::i;:::-;-1:-1:-1;;;;;18412:17:0;;;;;;;:9;:17;;;;;;:55;;;;18505:20;;;;;;;:38;;18529:13;;18505:38;:::i;:::-;-1:-1:-1;;;;;18478:20:0;;;;;;:9;:20;;;;;;:65;;;;18599:4;18581:24;;;;:43;;18609:14;;18581:43;:::i;:::-;18572:4;18554:24;;;;:9;:24;;;;;:70;18662:19;;:38;;18685:14;;18662:38;:::i;:::-;18635:19;:65;18734:1;18717:18;;;18713:734;;18778:25;18784:6;18792:10;18778:5;:25::i;:::-;-1:-1:-1;;;;;;;;;;;18836:13:0;18851:6;18859:10;18823:47;;;;;;;;:::i;:::-;;;;;;;;18713:734;;;18892:13;18909:1;18892:18;18888:559;;18952:25;18960:6;18968:8;18952:7;:25::i;:::-;-1:-1:-1;;;;;;;;;;;19010:13:0;19025:6;19033:8;18997:45;;;;;;;;:::i;18888:559::-;19064:13;19081:1;19064:18;19060:387;;19178:4;19160:24;;;;:9;:24;;;;;;:45;;19188:16;;19160:45;:::i;:::-;19151:4;19133:24;;;;:9;:24;;;;;:72;19247:17;;:38;;19268:16;;19247:38;:::i;:::-;19220:17;:65;19327:14;;:35;;19345:16;;19327:35;:::i;:::-;19300:14;:62;19382:53;;-1:-1:-1;;;;;;;;;;;19382:53:0;;;19395:13;;19410:6;;19418:16;;19382:53;:::i;:::-;;;;;;;;19060:387;19479:9;-1:-1:-1;;;;;19462:35:0;19471:6;-1:-1:-1;;;;;19462:35:0;-1:-1:-1;;;;;;;;;;;19490:6:0;19462:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;19462:35:0;;;;;;;;17857:1648;;;;;;;17776:1729;;;:::o;19513:2046::-;19639:21;19663:24;:22;:24::i;:::-;19639:48;;19698:17;19738:3;19730:7;;19721:6;:16;;;;:::i;:::-;:20;;;;:::i;:::-;19698:43;-1:-1:-1;19752:18:0;19775;19698:43;19775:6;:18;:::i;:::-;19752:41;;19839:22;19863:18;19883:16;19901:24;19930;19944:9;19930:13;:24::i;:::-;19837:117;;;;;;;;19965:12;20003:18;;19980:19;;:41;;19965:56;;20037:7;:21;;;;-1:-1:-1;20049:9:0;;;;20048:10;20037:21;20034:263;;;20076:9;:16;;-1:-1:-1;;20076:16:0;20088:4;20076:16;;;20113:14;;20129:18;;20107:41;;-1:-1:-1;;;;;20113:14:0;;20107:5;:41::i;:::-;20189:9;:17;;-1:-1:-1;;20189:17:0;;;20266:18;;20243:19;;:42;;20266:18;20243:42;:::i;:::-;20221:19;:64;20034:263;-1:-1:-1;;;;;20336:17:0;;;;;;:9;:17;;;;;;:28;;20357:6;;20336:28;:::i;:::-;-1:-1:-1;;;;;20309:17:0;;;;;;;:9;:17;;;;;;:55;;;;20402:20;;;;;;;:35;;20426:10;;20402:35;:::i;:::-;-1:-1:-1;;;;;20375:20:0;;;;;;:9;:20;;;;;;:62;;;;20493:4;20475:24;;;;:43;;20503:14;;20475:43;:::i;:::-;20466:4;20448:24;;;;:9;:24;;;;;:70;20556:19;;:38;;20579:14;;20556:38;:::i;:::-;20529:19;:65;-1:-1:-1;;;;;20618:17:0;;;;;;:9;:17;;;;;;:22;;20615:130;;-1:-1:-1;;;;;20657:31:0;;20691:1;20657:31;;;:20;:31;;;;;:35;20615:130;20769:13;20786:1;20769:18;20765:736;;20830:25;20836:6;20844:10;20830:5;:25::i;:::-;-1:-1:-1;;;;;;;;;;;20889:13:0;20904:6;20912:10;20876:47;;;;;;;;:::i;:::-;;;;;;;;20765:736;;;20945:13;20962:1;20945:18;20941:560;;21005:25;21013:6;21021:8;21005:7;:25::i;:::-;-1:-1:-1;;;;;;;;;;;21064:13:0;21079:6;21087:8;21051:45;;;;;;;;:::i;20941:560::-;21118:13;21135:1;21118:18;21114:387;;21232:4;21214:24;;;;:9;:24;;;;;;:45;;21242:16;;21214:45;:::i;:::-;21205:4;21187:24;;;;:9;:24;;;;;:72;21301:17;;:38;;21322:16;;21301:38;:::i;:::-;21274:17;:65;21381:14;;:35;;21399:16;;21381:35;:::i;:::-;21354:14;:62;21436:53;;-1:-1:-1;;;;;;;;;;;21436:53:0;;;21449:13;;21464:6;;21472:16;;21436:53;:::i;:::-;;;;;;;;21114:387;21533:9;-1:-1:-1;;;;;21516:35:0;21525:6;-1:-1:-1;;;;;21516:35:0;-1:-1:-1;;;;;;;;;;;21544:6:0;21516:35;;;;1595:25:1;;1583:2;1568:18;;1449:177;21516:35:0;;;;;;;;19595:1964;;;;;;;;19513:2046;;;:::o;28743:226::-;28845:105;;;28862:15;28845:105;;;18743:19:1;28879:16:0;18778:12:1;;;18771:28;;;;28897:14:0;18815:12:1;;;;18808:28;;;;28913:9:0;18870:15:1;;-1:-1:-1;;18866:53:1;18852:12;;;18845:75;28924:12:0;18936:13:1;;;18929:29;28938:11:0;18974:13:1;;;18967:29;-1:-1:-1;;28955:1:0;;19012:13:1;;28845:105:0;;;;;;;;;;;;28835:116;;;;;;28827:125;;:129;;;;:::i;:::-;28826:135;;28960:1;28826:135;:::i;:::-;28819:142;;28743:226;:::o;28977:626::-;29036:23;;;;;;;;29248:8;;29244:278;;29326:3;29305:18;;29299:3;:24;;;;:::i;:::-;29290:35;;:4;:35;:::i;:::-;:39;;;;:::i;:::-;29273:56;;29385:3;29365:18;;29357:4;:27;;;;:::i;:::-;:31;;;;:::i;:::-;29344:44;;29442:3;29422:18;;29414:4;:27;;;;:::i;:::-;:31;;;;:::i;:::-;29403:42;;29507:3;29487:18;;29479:4;:27;;;;:::i;:::-;:31;;;;:::i;:::-;29460:50;;29244:278;29540:14;;29556:10;;-1:-1:-1;29556:10:0;-1:-1:-1;29540:14:0;;-1:-1:-1;28977:626:0;-1:-1:-1;;28977:626:0:o;22910:292::-;22977:7;;22973:222;;23006:10;23022:18;23036:3;23022:13;:18::i;:::-;-1:-1:-1;23086:6:0;;-1:-1:-1;;;;;23086:6:0;23076:17;;;;:9;:17;;;;;;23001:39;;-1:-1:-1;23076:22:0;;-1:-1:-1;23001:39:0;;-1:-1:-1;23076:22:0;:::i;:::-;23065:6;;-1:-1:-1;;;;;23065:6:0;23055:17;;;;:9;:17;;;;;:43;23123:7;;:12;;23133:2;;23123:12;:::i;:::-;23113:7;:22;23172:6;;23157:26;;1595:25:1;;;-1:-1:-1;;;;;23172:6:0;;;;23157:26;;;-1:-1:-1;;;;;;;;;;;23157:26:0;1583:2:1;1568:18;23157:26:0;1449:177:1;14:548;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;801:131::-;-1:-1:-1;;;;;876:31:1;;866:42;;856:70;;922:1;919;912:12;937:315;1005:6;1013;1066:2;1054:9;1045:7;1041:23;1037:32;1034:52;;;1082:1;1079;1072:12;1034:52;1121:9;1108:23;1140:31;1165:5;1140:31;:::i;:::-;1190:5;1242:2;1227:18;;;;1214:32;;-1:-1:-1;;;937:315:1:o;1631:456::-;1708:6;1716;1724;1777:2;1765:9;1756:7;1752:23;1748:32;1745:52;;;1793:1;1790;1783:12;1745:52;1832:9;1819:23;1851:31;1876:5;1851:31;:::i;:::-;1901:5;-1:-1:-1;1958:2:1;1943:18;;1930:32;1971:33;1930:32;1971:33;:::i;:::-;1631:456;;2023:7;;-1:-1:-1;;;2077:2:1;2062:18;;;;2049:32;;1631:456::o;2092:180::-;2151:6;2204:2;2192:9;2183:7;2179:23;2175:32;2172:52;;;2220:1;2217;2210:12;2172:52;-1:-1:-1;2243:23:1;;2092:180;-1:-1:-1;2092:180:1:o;2277:247::-;2336:6;2389:2;2377:9;2368:7;2364:23;2360:32;2357:52;;;2405:1;2402;2395:12;2357:52;2444:9;2431:23;2463:31;2488:5;2463:31;:::i;2961:118::-;3047:5;3040:13;3033:21;3026:5;3023:32;3013:60;;3069:1;3066;3059:12;3084:382;3149:6;3157;3210:2;3198:9;3189:7;3185:23;3181:32;3178:52;;;3226:1;3223;3216:12;3178:52;3265:9;3252:23;3284:31;3309:5;3284:31;:::i;:::-;3334:5;-1:-1:-1;3391:2:1;3376:18;;3363:32;3404:30;3363:32;3404:30;:::i;:::-;3453:7;3443:17;;;3084:382;;;;;:::o;3471:388::-;3539:6;3547;3600:2;3588:9;3579:7;3575:23;3571:32;3568:52;;;3616:1;3613;3606:12;3568:52;3655:9;3642:23;3674:31;3699:5;3674:31;:::i;:::-;3724:5;-1:-1:-1;3781:2:1;3766:18;;3753:32;3794:33;3753:32;3794:33;:::i;3864:380::-;3943:1;3939:12;;;;3986;;;4007:61;;4061:4;4053:6;4049:17;4039:27;;4007:61;4114:2;4106:6;4103:14;4083:18;4080:38;4077:161;;4160:10;4155:3;4151:20;4148:1;4141:31;4195:4;4192:1;4185:15;4223:4;4220:1;4213:15;4077:161;;3864:380;;;:::o;4249:343::-;4451:2;4433:21;;;4490:2;4470:18;;;4463:30;-1:-1:-1;;;4524:2:1;4509:18;;4502:49;4583:2;4568:18;;4249:343::o;5719:127::-;5780:10;5775:3;5771:20;5768:1;5761:31;5811:4;5808:1;5801:15;5835:4;5832:1;5825:15;5851:125;5916:9;;;5937:10;;;5934:36;;;5950:18;;:::i;7418:128::-;7485:9;;;7506:11;;;7503:37;;;7520:18;;:::i;8323:400::-;8525:2;8507:21;;;8564:2;8544:18;;;8537:30;8603:34;8598:2;8583:18;;8576:62;-1:-1:-1;;;8669:2:1;8654:18;;8647:34;8713:3;8698:19;;8323:400::o;8728:168::-;8801:9;;;8832;;8849:15;;;8843:22;;8829:37;8819:71;;8870:18;;:::i;8901:127::-;8962:10;8957:3;8953:20;8950:1;8943:31;8993:4;8990:1;8983:15;9017:4;9014:1;9007:15;9033:120;9073:1;9099;9089:35;;9104:18;;:::i;:::-;-1:-1:-1;9138:9:1;;9033:120::o;10602:245::-;10669:6;10722:2;10710:9;10701:7;10697:23;10693:32;10690:52;;;10738:1;10735;10728:12;10690:52;10770:9;10764:16;10789:28;10811:5;10789:28;:::i;14027:127::-;14088:10;14083:3;14079:20;14076:1;14069:31;14119:4;14116:1;14109:15;14143:4;14140:1;14133:15;14159:127;14220:10;14215:3;14211:20;14208:1;14201:31;14251:4;14248:1;14241:15;14275:4;14272:1;14265:15;14291:251;14361:6;14414:2;14402:9;14393:7;14389:23;14385:32;14382:52;;;14430:1;14427;14420:12;14382:52;14462:9;14456:16;14481:31;14506:5;14481:31;:::i;14547:980::-;14809:4;14857:3;14846:9;14842:19;14888:6;14877:9;14870:25;14914:2;14952:6;14947:2;14936:9;14932:18;14925:34;14995:3;14990:2;14979:9;14975:18;14968:31;15019:6;15054;15048:13;15085:6;15077;15070:22;15123:3;15112:9;15108:19;15101:26;;15162:2;15154:6;15150:15;15136:29;;15183:1;15193:195;15207:6;15204:1;15201:13;15193:195;;;15272:13;;-1:-1:-1;;;;;15268:39:1;15256:52;;15363:15;;;;15328:12;;;;15304:1;15222:9;15193:195;;;-1:-1:-1;;;;;;;15444:32:1;;;;15439:2;15424:18;;15417:60;-1:-1:-1;;;15508:3:1;15493:19;15486:35;15405:3;14547:980;-1:-1:-1;;;14547:980:1:o;15532:1105::-;15627:6;15658:2;15701;15689:9;15680:7;15676:23;15672:32;15669:52;;;15717:1;15714;15707:12;15669:52;15750:9;15744:16;15779:18;15820:2;15812:6;15809:14;15806:34;;;15836:1;15833;15826:12;15806:34;15874:6;15863:9;15859:22;15849:32;;15919:7;15912:4;15908:2;15904:13;15900:27;15890:55;;15941:1;15938;15931:12;15890:55;15970:2;15964:9;15992:2;15988;15985:10;15982:36;;;15998:18;;:::i;:::-;16044:2;16041:1;16037:10;16076:2;16070:9;16139:2;16135:7;16130:2;16126;16122:11;16118:25;16110:6;16106:38;16194:6;16182:10;16179:22;16174:2;16162:10;16159:18;16156:46;16153:72;;;16205:18;;:::i;:::-;16241:2;16234:22;16291:18;;;16325:15;;;;-1:-1:-1;16367:11:1;;;16363:20;;;16395:19;;;16392:39;;;16427:1;16424;16417:12;16392:39;16451:11;;;;16471:135;16487:6;16482:3;16479:15;16471:135;;;16553:10;;16541:23;;16504:12;;;;16584;;;;16471:135;;;16625:6;15532:1105;-1:-1:-1;;;;;;;;15532:1105:1:o;18124:345::-;18326:25;;;-1:-1:-1;;;;;18387:32:1;;;;18382:2;18367:18;;18360:60;18451:2;18436:18;;18429:34;18314:2;18299:18;;18124:345::o;19036:112::-;19068:1;19094;19084:35;;19099:18;;:::i;:::-;-1:-1:-1;19133:9:1;;19036:112::o

Swarm Source

ipfs://834f7c2f4cb233063dc582bfa9eb28aec2a93aee48953f8a863f3eb8e59233bc

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

OVERVIEW

ManaCoin is an innovative decentralized protocol on the Ethereum network, anchored by the $MNC token, characterized by its ever-advancing randomized tokenomics, which encompass ETH reflections, true burns, intelligent auto LP management, and custom utilities.

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.