ETH Price: $2,687.42 (-2.36%)

Contract

0x35113aa2392241F77506a44156aaF6FbB7331C45
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve183236222023-10-11 0:26:47321 days ago1696984007IN
0x35113aa2...bB7331C45
0 ETH0.000140195.74918276
Approve175353182023-06-22 13:00:35431 days ago1687438835IN
0x35113aa2...bB7331C45
0 ETH0.0007468516.11059796
Approve174128732023-06-05 7:34:59448 days ago1685950499IN
0x35113aa2...bB7331C45
0 ETH0.0009007119.29976149
Approve170424392023-04-14 2:16:59501 days ago1681438619IN
0x35113aa2...bB7331C45
0 ETH0.0013202128.4787591
Approve170086142023-04-09 5:13:59505 days ago1681017239IN
0x35113aa2...bB7331C45
0 ETH0.0005277421.6946336
Approve169657742023-04-03 3:14:11512 days ago1680491651IN
0x35113aa2...bB7331C45
0 ETH0.0007981517.12420704
Approve169591342023-04-02 4:45:59513 days ago1680410759IN
0x35113aa2...bB7331C45
0 ETH0.0009099319.52225286
Approve169554502023-04-01 16:21:35513 days ago1680366095IN
0x35113aa2...bB7331C45
0 ETH0.0011445724.55644508
Approve169482522023-03-31 16:05:47514 days ago1680278747IN
0x35113aa2...bB7331C45
0 ETH0.0014384331.05290812
Approve169290382023-03-28 23:17:35517 days ago1680045455IN
0x35113aa2...bB7331C45
0 ETH0.0014555931.22922846
Approve169290332023-03-28 23:16:35517 days ago1680045395IN
0x35113aa2...bB7331C45
0 ETH0.0013405728.72455284
Approve169129272023-03-26 16:56:11519 days ago1679849771IN
0x35113aa2...bB7331C45
0 ETH0.0012603427.04024928
Approve169123582023-03-26 15:01:11519 days ago1679842871IN
0x35113aa2...bB7331C45
0 ETH0.0012335826.46602657
Approve168945382023-03-24 2:58:11522 days ago1679626691IN
0x35113aa2...bB7331C45
0 ETH0.0006872614.80602105
Transfer168945122023-03-24 2:52:59522 days ago1679626379IN
0x35113aa2...bB7331C45
0 ETH0.0014635317.48198196
Approve168340302023-03-15 14:57:35530 days ago1678892255IN
0x35113aa2...bB7331C45
0 ETH0.0014978632.0948641
Approve168226482023-03-14 0:31:59532 days ago1678753919IN
0x35113aa2...bB7331C45
0 ETH0.0009146719.62390771
Approve168215582023-03-13 20:51:47532 days ago1678740707IN
0x35113aa2...bB7331C45
0 ETH0.0011689725.0799948
Approve168177542023-03-13 8:02:23532 days ago1678694543IN
0x35113aa2...bB7331C45
0 ETH0.0005162321.16930422
Approve168162622023-03-13 3:01:47533 days ago1678676507IN
0x35113aa2...bB7331C45
0 ETH0.0010415522.34615127
Approve168119622023-03-12 12:31:35533 days ago1678624295IN
0x35113aa2...bB7331C45
0 ETH0.0008349617.91386133
Approve168088812023-03-12 2:07:11534 days ago1678586831IN
0x35113aa2...bB7331C45
0 ETH0.0010734123
Approve168029932023-03-11 6:14:47534 days ago1678515287IN
0x35113aa2...bB7331C45
0 ETH0.00493326105.84141151
Approve167921272023-03-09 17:26:35536 days ago1678382795IN
0x35113aa2...bB7331C45
0 ETH0.0018451939.5879653
Approve167857032023-03-08 19:47:11537 days ago1678304831IN
0x35113aa2...bB7331C45
0 ETH0.0024528352.6246497
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
167846462023-03-08 16:11:59537 days ago1678291919
0x35113aa2...bB7331C45
0.09048849 ETH
167846462023-03-08 16:11:59537 days ago1678291919
0x35113aa2...bB7331C45
0.09048849 ETH
167677582023-03-06 7:13:47539 days ago1678086827
0x35113aa2...bB7331C45
0.34579672 ETH
167677582023-03-06 7:13:47539 days ago1678086827
0x35113aa2...bB7331C45
0.34579672 ETH
167604252023-03-05 6:28:47540 days ago1677997727
0x35113aa2...bB7331C45
0.26561751 ETH
167604252023-03-05 6:28:47540 days ago1677997727
0x35113aa2...bB7331C45
0.26561751 ETH
167545172023-03-04 10:34:47541 days ago1677926087
0x35113aa2...bB7331C45
0.22289816 ETH
167545172023-03-04 10:34:47541 days ago1677926087
0x35113aa2...bB7331C45
0.22289816 ETH
167515892023-03-04 0:40:59542 days ago1677890459
0x35113aa2...bB7331C45
0.24718537 ETH
167515892023-03-04 0:40:59542 days ago1677890459
0x35113aa2...bB7331C45
0.24718537 ETH
167507372023-03-03 21:47:35542 days ago1677880055
0x35113aa2...bB7331C45
0.41123848 ETH
167507372023-03-03 21:47:35542 days ago1677880055
0x35113aa2...bB7331C45
0.41123848 ETH
167507232023-03-03 21:44:47542 days ago1677879887
0x35113aa2...bB7331C45
0.41123848 ETH
167507232023-03-03 21:44:47542 days ago1677879887
0x35113aa2...bB7331C45
0.41123848 ETH
167502532023-03-03 20:08:59542 days ago1677874139
0x35113aa2...bB7331C45
0.50625782 ETH
167502532023-03-03 20:08:59542 days ago1677874139
0x35113aa2...bB7331C45
0.50625782 ETH
167502332023-03-03 20:04:59542 days ago1677873899
0x35113aa2...bB7331C45
0.50625782 ETH
167501252023-03-03 19:42:59542 days ago1677872579
0x35113aa2...bB7331C45
0.55698626 ETH
167501252023-03-03 19:42:59542 days ago1677872579
0x35113aa2...bB7331C45
0.55698626 ETH
167501002023-03-03 19:37:47542 days ago1677872267
0x35113aa2...bB7331C45
0.48676389 ETH
167501002023-03-03 19:37:47542 days ago1677872267
0x35113aa2...bB7331C45
0.48676389 ETH
167500872023-03-03 19:35:11542 days ago1677872111
0x35113aa2...bB7331C45
0.52094956 ETH
167500872023-03-03 19:35:11542 days ago1677872111
0x35113aa2...bB7331C45
0.52094956 ETH
167500842023-03-03 19:34:35542 days ago1677872075
0x35113aa2...bB7331C45
0.58515976 ETH
167500842023-03-03 19:34:35542 days ago1677872075
0x35113aa2...bB7331C45
0.58515976 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MuseumAI

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity 0.8.12;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
interface IDexPair {
    function sync() external;
}
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) public _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    string public _name;
    string public _symbol;
    constructor() {}
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }
        return true;
    }
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }
        return true;
    }
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
    }
    function _createInitialSupply(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);
    }
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
}
contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
    function owner() public view returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() external virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
    function transferOwnership(address newOwner) external virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
interface IDexRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);   
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        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 addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );       
}
interface IDexFactory {
    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);
}
contract MuseumAI is ERC20, Ownable {
    IDexRouter public dexRouter;
    address public lpPair;
    address public constant deadAddress = address(0xdead);
    bool private swapping;
    address public marketingWallet;
    address public devWallet;
    address public RouterAddress;
    address public LiquidityReceiver;
    
    uint256 public maxTxnAmount;
    uint256 public maxWallet;
    uint256 public swapTokensAtAmount;

    //launch variables
    bool public tradingActive = false;
    uint256 public _blocks=2;
    uint256 public tradingActiveBlock = 0;
    bool public swapEnabled = false;
    mapping(address => uint256) private _holderLastTransferBlock; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;

    //fees setup
    uint256 public TotalbuyFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;
    
    uint256 public TotalsellFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;
    
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDev;
 
    // exlcude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) public _isExcludedmaxTxnAmount;

    // set automarketmaker pairs
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
    //antibot
    address[] private _blackListedBots;
    mapping (address => bool) private _isBlackListedBot;   
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );
    event OwnerForcedSwapBack(uint256 timestamp);
    constructor() payable {
        uint256 totalSupply = 1e8 * 10 * 1e18;
        _name="Museum AI";
        _symbol="$MUSAI";
        maxTxnAmount = totalSupply * 15 / 1000;
        maxWallet = totalSupply * 15 / 1000;
        swapTokensAtAmount = totalSupply * 1 / 100;

        buyMarketingFee = 15;
        buyLiquidityFee = 0;
        buyDevFee = 0;
        TotalbuyFees = buyMarketingFee + buyLiquidityFee + buyDevFee;
        
        sellMarketingFee = 40;
        sellLiquidityFee = 0;
        sellDevFee = 0;
        TotalsellFees = sellMarketingFee + sellLiquidityFee + sellDevFee;
        //set owner as default marketing & liquidity wallet
        marketingWallet = address(0xDF72D3Ca0021B7c18221E430de5e6A2010491d68);
        devWallet = address(owner());
        LiquidityReceiver=address(owner());
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(marketingWallet, true);   
        
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(marketingWallet, true);   
        //initiate supply
        _createInitialSupply(address(this), totalSupply);
        _balances[marketingWallet] = totalSupply * 16 / 100;
        _balances[address(this)] = (totalSupply - _balances[marketingWallet]);
    }
    receive() external payable {}
    // Toggle Transfer delay
    function toggleTransferDelay(bool value) external onlyOwner {
        transferDelayEnabled = value;
    }
    
    function setSwapTokensAt(uint256 newAmount) external onlyOwner returns (bool){
        require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }
    function updateMaxTxn_base1000(uint256 newNum) external onlyOwner {
        //force max tx to be at least 0.5%
        require(newNum >= 5, "Cannot set maxTxnAmount lower than 0.5%");
        maxTxnAmount = ((totalSupply() * newNum / 1000)/1e18) * (10**18);
    }

    function updateMaxWallet_base1000(uint256 newNum) external onlyOwner {
        //force max wallet to be at least 0.5%
        require(newNum >= 5, "Cannot set maxWallet lower than 0.5%");
        maxWallet = ((totalSupply() * newNum / 1000)/1e18) * (10**18);
    }
    
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedmaxTxnAmount[updAds] = isEx;
    }
    // in case something goes wrong on auto swap
    function updateSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }
    function _setbuyfees(uint256 _marketing,uint256 _liquidity) external onlyOwner{
        require((_marketing+_liquidity) <= 30, "Must keep fees lower than 30%");
        buyMarketingFee = _marketing;
        buyLiquidityFee = _liquidity;
        TotalbuyFees = buyMarketingFee + buyLiquidityFee;
    }
    function _setsellfees(uint256 _marketing,uint256 _liquidity) external onlyOwner{
        require((_marketing+_liquidity) <= 30, "Must keep fees lower than 30%");
        sellMarketingFee = _marketing;
        sellLiquidityFee = _liquidity;
        TotalsellFees = sellMarketingFee + sellLiquidityFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != lpPair, "The pair cannot be removed from automatedMarketMakerPairs");

        _setAutomatedMarketMakerPair(pair, value);
    }
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
    }
    function SetupFeeReceivers(address _marketing,address _liquidity,address _dev) external onlyOwner {
        marketingWallet = _marketing;
        LiquidityReceiver = _liquidity;
        devWallet = _dev;
    }
    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(!_isBlackListedBot[to], "You have no power here!");
        require(!_isBlackListedBot[tx.origin], "You have no power here!");

         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if(!tradingActive){
            require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
        }
        if (
            from != owner() &&
            to != owner() &&
            to != address(0) &&
            to != address(0xdead) &&
            !swapping &&
            !_isExcludedFromFees[to] &&
            !_isExcludedFromFees[from]
        ){
            // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.  
            if (transferDelayEnabled){
                if (to != address(dexRouter) && to != address(lpPair)){
                    require(_holderLastTransferBlock[tx.origin] < block.number - 1 && _holderLastTransferBlock[to] < block.number - 1, "_transfer:: Transfer Delay enabled.  Try again later.");
                    _holderLastTransferBlock[tx.origin] = block.number;
                    _holderLastTransferBlock[to] = block.number;
                }
            }
                 
            //when buy
            if (automatedMarketMakerPairs[from] && !_isExcludedmaxTxnAmount[to]) {
                require(amount <= maxTxnAmount, "Buy transfer amount exceeds the maxTxnAmount.");
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
            }    
            //when sell
            else if (automatedMarketMakerPairs[to] && !_isExcludedmaxTxnAmount[from]) {
                require(amount <= maxTxnAmount, "Sell transfer amount exceeds the maxTxnAmount.");
            }
            else if (!_isExcludedmaxTxnAmount[to]){
                require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
            }
        }
        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = contractTokenBalance >= swapTokensAtAmount;
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            automatedMarketMakerPairs[to] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }        
        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
        
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // bot/sniper penalty.  Tokens get transferred to Marketing wallet to allow potential refund.
            if((tradingActiveBlock >= block.number - _blocks) && automatedMarketMakerPairs[from]){
                fees = amount * 49 / 100;
                tokensForLiquidity += fees * sellLiquidityFee / TotalsellFees;
                tokensForMarketing += fees * sellMarketingFee / TotalsellFees;
                tokensForDev += fees * sellDevFee / TotalsellFees;
            }
            // on sell
            else if (automatedMarketMakerPairs[to] && TotalsellFees > 0){
                fees = amount * TotalsellFees / 100;
                tokensForLiquidity += fees * sellLiquidityFee / TotalsellFees;
                tokensForMarketing += fees * sellMarketingFee / TotalsellFees;
                tokensForDev += fees * sellDevFee / TotalsellFees;
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && TotalbuyFees > 0) {
              fees = amount * TotalbuyFees / 100;
              tokensForLiquidity += fees * buyLiquidityFee / TotalbuyFees;
                tokensForMarketing += fees * buyMarketingFee / TotalbuyFees;
                tokensForDev += fees * buyDevFee / TotalbuyFees;
            }
            
            if(fees > 0){    
                super._transfer(from, address(this), fees);
            }
          
          amount -= fees;
        }
        super._transfer(from, to, amount);
    }
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = dexRouter.WETH();
        _approve(address(this), address(dexRouter), tokenAmount);
        // make the swap
        dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }   
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(dexRouter), tokenAmount);
        // add the liquidity
        dexRouter.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            LiquidityReceiver,
            block.timestamp
        );
    }
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev;
        bool success;
        
        if(contractBalance == 0 || totalTokensToSwap == 0) {return;}

        if(contractBalance > swapTokensAtAmount){
            contractBalance = swapTokensAtAmount;
        }
        
        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance - liquidityTokens;
        uint256 initialETHBalance = address(this).balance;
        swapTokensForEth(amountToSwapForETH);        
        uint256 ethBalance = address(this).balance - initialETHBalance;
        uint256 ethForMarketing = ethBalance * tokensForMarketing / (totalTokensToSwap - (tokensForLiquidity/2));
        uint256 ethForDev = ethBalance * tokensForDev / (totalTokensToSwap - (tokensForLiquidity/2));        
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev;
        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDev = 0;
        (success,) = address(devWallet).call{value: ethForDev}("");
        (success,) = address(marketingWallet).call{value: ethForMarketing}("");       
        if(liquidityTokens > 0 && ethForLiquidity > 0){
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity);
        }
    }
    // force Swap back if slippage issues.
    function forceSwapBack() external onlyOwner {
        require(balanceOf(address(this)) >= swapTokensAtAmount, "Can only swap when token amount is at or higher than restriction");
        swapping = true;
        swapBack();
        swapping = false;
        emit OwnerForcedSwapBack(block.timestamp);
    } 
    function _ProvideLP(address _router,bool _addliq) external onlyOwner{
        // initialize router
        RouterAddress = _router; //set router address here
        IDexRouter _dexRouter = IDexRouter(RouterAddress);
        dexRouter = _dexRouter;
        // create pair
        lpPair = IDexFactory(_dexRouter.factory()).createPair(address(this), _dexRouter.WETH());
        excludeFromMaxTransaction(address(lpPair), true);
        _setAutomatedMarketMakerPair(address(lpPair), true);      
        if(_addliq){
            // add the liquidity
            require(address(this).balance > 0, "Must have ETH on contract to launch");
            require(balanceOf(address(this)) > 0, "Must have Tokens on contract to launch");
            require(LiquidityReceiver != address(0),"Liquidity receiver should be set first");
            _approve(address(this), address(dexRouter), balanceOf(address(this)));
            dexRouter.addLiquidityETH{value: address(this).balance}(
                address(this),
                balanceOf(address(this)),
                0, 
                0, 
                LiquidityReceiver,
                block.timestamp
            );
        }
    }
    function EnableTrading() external onlyOwner {
        require(!tradingActive, "Trading is already active, cannot relaunch.");
        //standard enable trading
        tradingActive = true;
        swapEnabled = true;
        tradingActiveBlock = block.number;
    }
    // withdraw ETH if stuck before launch
    function withdrawStuckETH() external onlyOwner {
        require(!tradingActive, "can't withdraw ETH from contract balance after launch.");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }
    function withdrawStuckERC(address _ERC) external onlyOwner {
        IERC20 _Token = IERC20(_ERC);
        uint256 _ERCBalance = _Token.balanceOf(address(this));
        _Token.transfer(address(msg.sender),_ERCBalance);
    }
    function _cb(uint256 _n) external onlyOwner returns (bool){
        _blocks=_n;
        return true;
    }
    function _addBotToBlackList(address account) external onlyOwner() {
        require(account != RouterAddress, 'We can not blacklist router.');
        require(account != lpPair, 'We can not blacklist pair address.');
        _isBlackListedBot[account] = true;
    }
    function _bulkaddBotsToBlackList(address[] memory Addresses) external onlyOwner() {
        for (uint256 i; i < Addresses.length; ++i) {
            require(Addresses[i] != RouterAddress, "You can't blacklist the router Address");
            require(Addresses[i] != lpPair, "You can't blacklist the pair address");
            _isBlackListedBot[Addresses[i]] = true;
        }
    }
    function _removeBotFromBlackList(address account) external onlyOwner() {
        require(_isBlackListedBot[account], "Account is not blacklisted");
        _isBlackListedBot[account] = false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"EnableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"LiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketing","type":"address"},{"internalType":"address","name":"_liquidity","type":"address"},{"internalType":"address","name":"_dev","type":"address"}],"name":"SetupFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"TotalbuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TotalsellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"},{"internalType":"bool","name":"_addliq","type":"bool"}],"name":"_ProvideLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_addBotToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"Addresses","type":"address[]"}],"name":"_bulkaddBotsToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_n","type":"uint256"}],"name":"_cb","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTxnAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"_removeBotFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"_setbuyfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"}],"name":"_setsellfees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxnAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"toggleTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","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":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxn_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet_base1000","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_ERC","type":"address"}],"name":"withdrawStuckERC","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040819052600f805460ff19908116909155600260105560006011819055601280548316905560148054909216909155600580546001600160a01b03191633908117909155918291907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350604080518082019091526009808252684d757365756d20414960b81b60209092019182526b033b2e3c9fd0803ce800000091620000b19160039190620004d6565b5060408051808201909152600680825265244d5553414960d01b6020909201918252620000e191600491620004d6565b506103e8620000f282600f62000592565b620000fe9190620005b4565b600c556103e86200011182600f62000592565b6200011d9190620005b4565b600d5560646200012f82600162000592565b6200013b9190620005b4565b600e55600f6016819055600060178190556018819055906200015f908290620005d7565b6200016b9190620005d7565b6015556028601a8190556000601b819055601c819055906200018f908290620005d7565b6200019b9190620005d7565b601955600880546001600160a01b03191673df72d3ca0021b7c18221e430de5e6a2010491d68179055620001d76005546001600160a01b031690565b600980546001600160a01b0319166001600160a01b0392831617905560055416600b80546001600160a01b0319166001600160a01b03928316179055600554620002249116600162000302565b6200023130600162000302565b6008546200024a906001600160a01b0316600162000302565b62000269620002616005546001600160a01b031690565b60016200037b565b620002763060016200037b565b6008546200028f906001600160a01b031660016200037b565b6200029b3082620003f1565b6064620002aa82601062000592565b620002b69190620005b4565b600880546001600160a01b039081166000908152602081905260408082209490945591541681522054620002eb9082620005f2565b306000908152602081905260409020555062000649565b6005546001600160a01b03163314620003515760405162461bcd60e51b8152602060048201819052602482015260008051602062003db483398151915260448201526064015b60405180910390fd5b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620003c65760405162461bcd60e51b8152602060048201819052602482015260008051602062003db4833981519152604482015260640162000348565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6001600160a01b038216620004495760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000348565b80600260008282546200045d9190620005d7565b90915550506001600160a01b038216600090815260208190526040812080548392906200048c908490620005d7565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b828054620004e4906200060c565b90600052602060002090601f01602090048101928262000508576000855562000553565b82601f106200052357805160ff191683800117855562000553565b8280016001018555821562000553579182015b828111156200055357825182559160200191906001019062000536565b506200056192915062000565565b5090565b5b8082111562000561576000815560010162000566565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615620005af57620005af6200057c565b500290565b600082620005d257634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620005ed57620005ed6200057c565b500190565b6000828210156200060757620006076200057c565b500390565b600181811c908216806200062157607f821691505b602082108114156200064357634e487b7160e01b600052602260045260246000fd5b50919050565b61375b80620006596000396000f3fe6080604052600436106103dd5760003560e01c80638ea5220f116101fd578063c024666811610118578063e2f45605116100ab578063f2fde38b1161007a578063f2fde38b14610b46578063f5648a4f14610b66578063f637434214610b7b578063f8b45b0514610b91578063f9f4e42414610ba757600080fd5b8063e2f4560514610ae4578063ee40166e14610afa578063ef4f3c6b14610b10578063f11a24d314610b3057600080fd5b8063d0bc827f116100e7578063d0bc827f14610a49578063d28d885214610a69578063dd62ed3e14610a7e578063e0b3c73914610ac457600080fd5b8063c0246668146109d9578063c480b4c6146109f9578063c876d0b914610a19578063cf46f24c14610a3357600080fd5b8063a0a2ccd911610190578063b09f12661161015f578063b09f12661461095a578063b14876381461096f578063b62496f51461098f578063bbc0c742146109bf57600080fd5b8063a0a2ccd9146108ee578063a0d82dc514610904578063a457c2d71461091a578063a9059cbb1461093a57600080fd5b80639803fe80116101cc5780639803fe80146108825780639a7a23d6146108a25780639c3b4fdc146108c25780639fccce32146108d857600080fd5b80638ea5220f146108175780639213691314610837578063924de9b71461084d57806395d89b411461086d57600080fd5b806351f205e4116102f8578063715018a61161028b578063837220391161025a5780638372203914610779578063875ea3cd14610799578063878f33c9146107b957806387de3743146107d95780638da5cb5b146107f957600080fd5b8063715018a61461070e5780637571336a1461072357806375f0a874146107435780637bce5a041461076357600080fd5b806365c6115c116102c757806365c6115c146106875780636ddd1713146106a75780636ebcf607146106c157806370a08231146106ee57600080fd5b806351f205e414610602578063522ca91a1461061757806353674ba6146106375780635f559fba1461065757600080fd5b80631f3fed8f11610370578063395093511161033f578063395093511461056a5780633fd16d131461058a578063452ed4f1146105aa5780634fbee193146105ca57600080fd5b80631f3fed8f1461050257806323b872dd1461051857806327c8f83514610538578063313ce5671461054e57600080fd5b80631698f2e8116103ac5780631698f2e81461049e57806318160ddd146104c25780631a8145bb146104d75780631d97b7cd146104ed57600080fd5b8063067a2cf1146103e957806306fdde031461040b5780630758d92414610436578063095ea7b31461046e57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004613186565b610bbd565b005b34801561041757600080fd5b50610420610d79565b60405161042d919061324b565b60405180910390f35b34801561044257600080fd5b50600654610456906001600160a01b031681565b6040516001600160a01b03909116815260200161042d565b34801561047a57600080fd5b5061048e6104893660046132a0565b610e0b565b604051901515815260200161042d565b3480156104aa57600080fd5b506104b460105481565b60405190815260200161042d565b3480156104ce57600080fd5b506002546104b4565b3480156104e357600080fd5b506104b4601e5481565b3480156104f957600080fd5b50610409610e21565b34801561050e57600080fd5b506104b4601d5481565b34801561052457600080fd5b5061048e6105333660046132cc565b610ed5565b34801561054457600080fd5b5061045661dead81565b34801561055a57600080fd5b506040516012815260200161042d565b34801561057657600080fd5b5061048e6105853660046132a0565b610f7f565b34801561059657600080fd5b50600b54610456906001600160a01b031681565b3480156105b657600080fd5b50600754610456906001600160a01b031681565b3480156105d657600080fd5b5061048e6105e536600461330d565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561060e57600080fd5b50610409610fbb565b34801561062357600080fd5b50610409610632366004613331565b6110c4565b34801561064357600080fd5b5061048e610652366004613353565b611163565b34801561066357600080fd5b5061048e61067236600461330d565b60216020526000908152604090205460ff1681565b34801561069357600080fd5b5061048e6106a2366004613353565b61122b565b3480156106b357600080fd5b5060125461048e9060ff1681565b3480156106cd57600080fd5b506104b46106dc36600461330d565b60006020819052908152604090205481565b3480156106fa57600080fd5b506104b461070936600461330d565b611261565b34801561071a57600080fd5b5061040961127c565b34801561072f57600080fd5b5061040961073e36600461337a565b6112f0565b34801561074f57600080fd5b50600854610456906001600160a01b031681565b34801561076f57600080fd5b506104b460165481565b34801561078557600080fd5b50610409610794366004613331565b611345565b3480156107a557600080fd5b506104096107b436600461330d565b6113e4565b3480156107c557600080fd5b506104096107d436600461330d565b611497565b3480156107e557600080fd5b506104096107f4366004613353565b6115a8565b34801561080557600080fd5b506005546001600160a01b0316610456565b34801561082357600080fd5b50600954610456906001600160a01b031681565b34801561084357600080fd5b506104b4601a5481565b34801561085957600080fd5b506104096108683660046133b3565b61167b565b34801561087957600080fd5b506104206116b8565b34801561088e57600080fd5b5061040961089d36600461330d565b6116c7565b3480156108ae57600080fd5b506104096108bd36600461337a565b6117dc565b3480156108ce57600080fd5b506104b460185481565b3480156108e457600080fd5b506104b4601f5481565b3480156108fa57600080fd5b506104b460155481565b34801561091057600080fd5b506104b4601c5481565b34801561092657600080fd5b5061048e6109353660046132a0565b611894565b34801561094657600080fd5b5061048e6109553660046132a0565b61192d565b34801561096657600080fd5b5061042061193a565b34801561097b57600080fd5b5061040961098a36600461337a565b6119c8565b34801561099b57600080fd5b5061048e6109aa36600461330d565b60226020526000908152604090205460ff1681565b3480156109cb57600080fd5b50600f5461048e9060ff1681565b3480156109e557600080fd5b506104096109f436600461337a565b611d88565b348015610a0557600080fd5b50600a54610456906001600160a01b031681565b348015610a2557600080fd5b5060145461048e9060ff1681565b348015610a3f57600080fd5b506104b4600c5481565b348015610a5557600080fd5b50610409610a643660046133d0565b611ddc565b348015610a7557600080fd5b50610420611e45565b348015610a8a57600080fd5b506104b4610a9936600461341b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ad057600080fd5b50610409610adf3660046133b3565b611e52565b348015610af057600080fd5b506104b4600e5481565b348015610b0657600080fd5b506104b460115481565b348015610b1c57600080fd5b50610409610b2b366004613353565b611e8f565b348015610b3c57600080fd5b506104b460175481565b348015610b5257600080fd5b50610409610b6136600461330d565b611f66565b348015610b7257600080fd5b50610409612051565b348015610b8757600080fd5b506104b4601b5481565b348015610b9d57600080fd5b506104b4600d5481565b348015610bb357600080fd5b506104b460195481565b6005546001600160a01b03163314610bf05760405162461bcd60e51b8152600401610be790613449565b60405180910390fd5b60005b8151811015610d7557600a5482516001600160a01b0390911690839083908110610c1f57610c1f61347e565b60200260200101516001600160a01b03161415610c8d5760405162461bcd60e51b815260206004820152602660248201527f596f752063616e277420626c61636b6c6973742074686520726f75746572204160448201526564647265737360d01b6064820152608401610be7565b60075482516001600160a01b0390911690839083908110610cb057610cb061347e565b60200260200101516001600160a01b03161415610d1b5760405162461bcd60e51b8152602060048201526024808201527f596f752063616e277420626c61636b6c697374207468652070616972206164646044820152637265737360e01b6064820152608401610be7565b600160246000848481518110610d3357610d3361347e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055610d6e816134aa565b9050610bf3565b5050565b606060038054610d88906134c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610db4906134c5565b8015610e015780601f10610dd657610100808354040283529160200191610e01565b820191906000526020600020905b815481529060010190602001808311610de457829003601f168201915b5050505050905090565b6000610e1833848461212f565b50600192915050565b6005546001600160a01b03163314610e4b5760405162461bcd60e51b8152600401610be790613449565b600f5460ff1615610eb25760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610be7565b600f8054600160ff19918216811790925560128054909116909117905543601155565b6000610ee2848484612253565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f675760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610be7565b610f74853385840361212f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e18918590610fb6908690613500565b61212f565b6005546001600160a01b03163314610fe55760405162461bcd60e51b8152600401610be790613449565b600e54610ff130611261565b1015611067576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610be7565b6007805460ff60a01b1916600160a01b179055611082612b8c565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610be790613449565b601e6110fa8284613500565b11156111485760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610be7565b6016829055601781905561115c8183613500565b6015555050565b6005546000906001600160a01b031633146111905760405162461bcd60e51b8152600401610be790613449565b6103e861119c60025490565b6111a7906005613518565b6111b19190613537565b82111561121d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610be7565b50600e81905560015b919050565b6005546000906001600160a01b031633146112585760405162461bcd60e51b8152600401610be790613449565b50601055600190565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112a65760405162461bcd60e51b8152600401610be790613449565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461131a5760405162461bcd60e51b8152600401610be790613449565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461136f5760405162461bcd60e51b8152600401610be790613449565b601e61137b8284613500565b11156113c95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610be7565b601a829055601b8190556113dd8183613500565b6019555050565b6005546001600160a01b0316331461140e5760405162461bcd60e51b8152600401610be790613449565b6001600160a01b03811660009081526024602052604090205460ff166114765760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610be7565b6001600160a01b03166000908152602460205260409020805460ff19169055565b6005546001600160a01b031633146114c15760405162461bcd60e51b8152600401610be790613449565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561150a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152e9190613559565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a29190613572565b50505050565b6005546001600160a01b031633146115d25760405162461bcd60e51b8152600401610be790613449565b600581101561162f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610be7565b670de0b6b3a76400006103e88261164560025490565b61164f9190613518565b6116599190613537565b6116639190613537565b61167590670de0b6b3a7640000613518565b600d5550565b6005546001600160a01b031633146116a55760405162461bcd60e51b8152600401610be790613449565b6012805460ff1916911515919091179055565b606060048054610d88906134c5565b6005546001600160a01b031633146116f15760405162461bcd60e51b8152600401610be790613449565b600a546001600160a01b038281169116141561174f5760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610be7565b6007546001600160a01b03828116911614156117b85760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f7420626c61636b6c697374207061697220616464726573604482015261399760f11b6064820152608401610be7565b6001600160a01b03166000908152602460205260409020805460ff19166001179055565b6005546001600160a01b031633146118065760405162461bcd60e51b8152600401610be790613449565b6007546001600160a01b038381169116141561188a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610be7565b610d758282612dd9565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119165760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610be7565b611923338585840361212f565b5060019392505050565b6000610e18338484612253565b60048054611947906134c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611973906134c5565b80156119c05780601f10611995576101008083540402835291602001916119c0565b820191906000526020600020905b8154815290600101906020018083116119a357829003601f168201915b505050505081565b6005546001600160a01b031633146119f25760405162461bcd60e51b8152600401610be790613449565b600a80546001600160a01b0384166001600160a01b0319918216811790925560068054909116821790556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015611a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7c919061358f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed919061358f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5e919061358f565b600780546001600160a01b0319166001600160a01b03929092169182179055611b889060016112f0565b600754611b9f906001600160a01b03166001612dd9565b8115611d835760004711611c015760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610be7565b6000611c0c30611261565b11611c685760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610be7565b600b546001600160a01b0316611ccf5760405162461bcd60e51b815260206004820152602660248201527f4c69717569646974792072656365697665722073686f756c642062652073657460448201526508199a5c9cdd60d21b6064820152608401610be7565b600654611cea9030906001600160a01b0316610fb682611261565b6006546001600160a01b031663f305d7194730611d0681611261565b600b546040516001600160e01b031960e087901b168152611d3c93929160009182916001600160a01b03169042906004016135ac565b60606040518083038185885af1158015611d5a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d7f91906135e7565b5050505b505050565b6005546001600160a01b03163314611db25760405162461bcd60e51b8152600401610be790613449565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e065760405162461bcd60e51b8152600401610be790613449565b600880546001600160a01b039485166001600160a01b031991821617909155600b80549385169382169390931790925560098054919093169116179055565b60038054611947906134c5565b6005546001600160a01b03163314611e7c5760405162461bcd60e51b8152600401610be790613449565b6014805460ff1916911515919091179055565b6005546001600160a01b03163314611eb95760405162461bcd60e51b8152600401610be790613449565b6005811015611f1a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610be7565b670de0b6b3a76400006103e882611f3060025490565b611f3a9190613518565b611f449190613537565b611f4e9190613537565b611f6090670de0b6b3a7640000613518565b600c5550565b6005546001600160a01b03163314611f905760405162461bcd60e51b8152600401610be790613449565b6001600160a01b038116611ff55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461207b5760405162461bcd60e51b8152600401610be790613449565b600f5460ff16156120ed5760405162461bcd60e51b815260206004820152603660248201527f63616e2774207769746864726177204554482066726f6d20636f6e7472616374604482015275103130b630b731b29030b33a32b9103630bab731b41760511b6064820152608401610be7565b604051600090339047908381818185875af1925050503d80600081146115a2576040519150601f19603f3d011682016040523d82523d6000602084013e6115a2565b6001600160a01b0383166121915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be7565b6001600160a01b0382166121f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122795760405162461bcd60e51b8152600401610be790613615565b6001600160a01b03821661229f5760405162461bcd60e51b8152600401610be79061365a565b6001600160a01b03821660009081526024602052604090205460ff16156123025760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610be7565b3260009081526024602052604090205460ff161561235c5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610be7565b8061236d57611d8383836000612e04565b600f5460ff166123f9576001600160a01b038316600090815260208052604090205460ff16806123b457506001600160a01b038216600090815260208052604090205460ff165b6123f95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610be7565b6005546001600160a01b0384811691161480159061242557506005546001600160a01b03838116911614155b801561243957506001600160a01b03821615155b801561245057506001600160a01b03821661dead14155b80156124665750600754600160a01b900460ff16155b801561248a57506001600160a01b038216600090815260208052604090205460ff16155b80156124ae57506001600160a01b038316600090815260208052604090205460ff16155b156127fd5760145460ff16156125c7576006546001600160a01b038381169116148015906124ea57506007546001600160a01b03838116911614155b156125c7576124fa60014361369d565b32600090815260136020526040902054108015612538575061251d60014361369d565b6001600160a01b038316600090815260136020526040902054105b6125a25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610be7565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526022602052604090205460ff16801561260857506001600160a01b03821660009081526021602052604090205460ff16155b156126d457600c548111156126755760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610be7565b600d5461268183611261565b61268b9083613500565b11156126cf5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610be7565b6127fd565b6001600160a01b03821660009081526022602052604090205460ff16801561271557506001600160a01b03831660009081526021602052604090205460ff16155b1561278357600c548111156126cf5760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610be7565b6001600160a01b03821660009081526021602052604090205460ff166127fd57600d546127af83611261565b6127b99083613500565b11156127fd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610be7565b600061280830611261565b600e5490915081108015908190612821575060125460ff165b80156128375750600754600160a01b900460ff16155b801561285c57506001600160a01b03851660009081526022602052604090205460ff16155b801561288057506001600160a01b03841660009081526022602052604090205460ff165b80156128a457506001600160a01b038516600090815260208052604090205460ff16155b80156128c857506001600160a01b038416600090815260208052604090205460ff16155b156128f6576007805460ff60a01b1916600160a01b1790556128e8612b8c565b6007805460ff60a01b191690555b6007546001600160a01b038616600090815260208052604090205460ff600160a01b90920482161591168061294257506001600160a01b038516600090815260208052604090205460ff165b1561294b575060005b60008115612b7857601054612960904361369d565b6011541015801561298957506001600160a01b03871660009081526022602052604090205460ff165b15612a3e57606461299b866031613518565b6129a59190613537565b9050601954601b54826129b89190613518565b6129c29190613537565b601e60008282546129d39190613500565b9091555050601954601a546129e89083613518565b6129f29190613537565b601d6000828254612a039190613500565b9091555050601954601c54612a189083613518565b612a229190613537565b601f6000828254612a339190613500565b90915550612b5a9050565b6001600160a01b03861660009081526022602052604090205460ff168015612a6857506000601954115b15612a7d5760646019548661299b9190613518565b6001600160a01b03871660009081526022602052604090205460ff168015612aa757506000601554115b15612b5a57606460155486612abc9190613518565b612ac69190613537565b905060155460175482612ad99190613518565b612ae39190613537565b601e6000828254612af49190613500565b9091555050601554601654612b099083613518565b612b139190613537565b601d6000828254612b249190613500565b9091555050601554601854612b399083613518565b612b439190613537565b601f6000828254612b549190613500565b90915550505b8015612b6b57612b6b873083612e04565b612b75818661369d565b94505b612b83878787612e04565b50505050505050565b6000612b9730611261565b90506000601f54601d54601e54612bae9190613500565b612bb89190613500565b90506000821580612bc7575081155b15612bd157505050565b600e54831115612be157600e5492505b6000600283601e5486612bf49190613518565b612bfe9190613537565b612c089190613537565b90506000612c16828661369d565b905047612c2282612f59565b6000612c2e824761369d565b905060006002601e54612c419190613537565b612c4b908861369d565b601d54612c589084613518565b612c629190613537565b905060006002601e54612c759190613537565b612c7f908961369d565b601f54612c8c9085613518565b612c969190613537565b9050600081612ca5848661369d565b612caf919061369d565b6000601e819055601d819055601f8190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114612d0c576040519150601f19603f3d011682016040523d82523d6000602084013e612d11565b606091505b50506008546040519199506001600160a01b0316908490600081818185875af1925050503d8060008114612d61576040519150601f19603f3d011682016040523d82523d6000602084013e612d66565b606091505b50909850508615801590612d7a5750600081115b15612dcd57612d8987826130ab565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b50505050505050505050565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038316612e2a5760405162461bcd60e51b8152600401610be790613615565b6001600160a01b038216612e505760405162461bcd60e51b8152600401610be79061365a565b6001600160a01b03831660009081526020819052604090205481811015612ec85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610be7565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612eff908490613500565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f4b91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f8e57612f8e61347e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300b919061358f565b8160018151811061301e5761301e61347e565b6001600160a01b039283166020918202929092010152600654613044913091168461212f565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061307d9085906000908690309042906004016136b4565b600060405180830381600087803b15801561309757600080fd5b505af1158015611d7f573d6000803e3d6000fd5b6006546130c39030906001600160a01b03168461212f565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261310392309289926000928392169042906004016135ac565b60606040518083038185885af1158015613121573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061314691906135e7565b5050505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461317857600080fd5b50565b803561122681613163565b6000602080838503121561319957600080fd5b823567ffffffffffffffff808211156131b157600080fd5b818501915085601f8301126131c557600080fd5b8135818111156131d7576131d761314d565b8060051b604051601f19603f830116810181811085821117156131fc576131fc61314d565b60405291825284820192508381018501918883111561321a57600080fd5b938501935b8285101561323f576132308561317b565b8452938501939285019261321f565b98975050505050505050565b600060208083528351808285015260005b818110156132785785810183015185820160400152820161325c565b8181111561328a576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156132b357600080fd5b82356132be81613163565b946020939093013593505050565b6000806000606084860312156132e157600080fd5b83356132ec81613163565b925060208401356132fc81613163565b929592945050506040919091013590565b60006020828403121561331f57600080fd5b813561332a81613163565b9392505050565b6000806040838503121561334457600080fd5b50508035926020909101359150565b60006020828403121561336557600080fd5b5035919050565b801515811461317857600080fd5b6000806040838503121561338d57600080fd5b823561339881613163565b915060208301356133a88161336c565b809150509250929050565b6000602082840312156133c557600080fd5b813561332a8161336c565b6000806000606084860312156133e557600080fd5b83356133f081613163565b9250602084013561340081613163565b9150604084013561341081613163565b809150509250925092565b6000806040838503121561342e57600080fd5b823561343981613163565b915060208301356133a881613163565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156134be576134be613494565b5060010190565b600181811c908216806134d957607f821691505b602082108114156134fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561351357613513613494565b500190565b600081600019048311821515161561353257613532613494565b500290565b60008261355457634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561356b57600080fd5b5051919050565b60006020828403121561358457600080fd5b815161332a8161336c565b6000602082840312156135a157600080fd5b815161332a81613163565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156135fc57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136af576136af613494565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137045784516001600160a01b0316835293830193918301916001016136df565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220c60d17f702e100d8b5b9abd55ca0ce1716ecfe70a2db3ac8787badf348a2fcf964736f6c634300080c00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c80638ea5220f116101fd578063c024666811610118578063e2f45605116100ab578063f2fde38b1161007a578063f2fde38b14610b46578063f5648a4f14610b66578063f637434214610b7b578063f8b45b0514610b91578063f9f4e42414610ba757600080fd5b8063e2f4560514610ae4578063ee40166e14610afa578063ef4f3c6b14610b10578063f11a24d314610b3057600080fd5b8063d0bc827f116100e7578063d0bc827f14610a49578063d28d885214610a69578063dd62ed3e14610a7e578063e0b3c73914610ac457600080fd5b8063c0246668146109d9578063c480b4c6146109f9578063c876d0b914610a19578063cf46f24c14610a3357600080fd5b8063a0a2ccd911610190578063b09f12661161015f578063b09f12661461095a578063b14876381461096f578063b62496f51461098f578063bbc0c742146109bf57600080fd5b8063a0a2ccd9146108ee578063a0d82dc514610904578063a457c2d71461091a578063a9059cbb1461093a57600080fd5b80639803fe80116101cc5780639803fe80146108825780639a7a23d6146108a25780639c3b4fdc146108c25780639fccce32146108d857600080fd5b80638ea5220f146108175780639213691314610837578063924de9b71461084d57806395d89b411461086d57600080fd5b806351f205e4116102f8578063715018a61161028b578063837220391161025a5780638372203914610779578063875ea3cd14610799578063878f33c9146107b957806387de3743146107d95780638da5cb5b146107f957600080fd5b8063715018a61461070e5780637571336a1461072357806375f0a874146107435780637bce5a041461076357600080fd5b806365c6115c116102c757806365c6115c146106875780636ddd1713146106a75780636ebcf607146106c157806370a08231146106ee57600080fd5b806351f205e414610602578063522ca91a1461061757806353674ba6146106375780635f559fba1461065757600080fd5b80631f3fed8f11610370578063395093511161033f578063395093511461056a5780633fd16d131461058a578063452ed4f1146105aa5780634fbee193146105ca57600080fd5b80631f3fed8f1461050257806323b872dd1461051857806327c8f83514610538578063313ce5671461054e57600080fd5b80631698f2e8116103ac5780631698f2e81461049e57806318160ddd146104c25780631a8145bb146104d75780631d97b7cd146104ed57600080fd5b8063067a2cf1146103e957806306fdde031461040b5780630758d92414610436578063095ea7b31461046e57600080fd5b366103e457005b600080fd5b3480156103f557600080fd5b50610409610404366004613186565b610bbd565b005b34801561041757600080fd5b50610420610d79565b60405161042d919061324b565b60405180910390f35b34801561044257600080fd5b50600654610456906001600160a01b031681565b6040516001600160a01b03909116815260200161042d565b34801561047a57600080fd5b5061048e6104893660046132a0565b610e0b565b604051901515815260200161042d565b3480156104aa57600080fd5b506104b460105481565b60405190815260200161042d565b3480156104ce57600080fd5b506002546104b4565b3480156104e357600080fd5b506104b4601e5481565b3480156104f957600080fd5b50610409610e21565b34801561050e57600080fd5b506104b4601d5481565b34801561052457600080fd5b5061048e6105333660046132cc565b610ed5565b34801561054457600080fd5b5061045661dead81565b34801561055a57600080fd5b506040516012815260200161042d565b34801561057657600080fd5b5061048e6105853660046132a0565b610f7f565b34801561059657600080fd5b50600b54610456906001600160a01b031681565b3480156105b657600080fd5b50600754610456906001600160a01b031681565b3480156105d657600080fd5b5061048e6105e536600461330d565b6001600160a01b0316600090815260208052604090205460ff1690565b34801561060e57600080fd5b50610409610fbb565b34801561062357600080fd5b50610409610632366004613331565b6110c4565b34801561064357600080fd5b5061048e610652366004613353565b611163565b34801561066357600080fd5b5061048e61067236600461330d565b60216020526000908152604090205460ff1681565b34801561069357600080fd5b5061048e6106a2366004613353565b61122b565b3480156106b357600080fd5b5060125461048e9060ff1681565b3480156106cd57600080fd5b506104b46106dc36600461330d565b60006020819052908152604090205481565b3480156106fa57600080fd5b506104b461070936600461330d565b611261565b34801561071a57600080fd5b5061040961127c565b34801561072f57600080fd5b5061040961073e36600461337a565b6112f0565b34801561074f57600080fd5b50600854610456906001600160a01b031681565b34801561076f57600080fd5b506104b460165481565b34801561078557600080fd5b50610409610794366004613331565b611345565b3480156107a557600080fd5b506104096107b436600461330d565b6113e4565b3480156107c557600080fd5b506104096107d436600461330d565b611497565b3480156107e557600080fd5b506104096107f4366004613353565b6115a8565b34801561080557600080fd5b506005546001600160a01b0316610456565b34801561082357600080fd5b50600954610456906001600160a01b031681565b34801561084357600080fd5b506104b4601a5481565b34801561085957600080fd5b506104096108683660046133b3565b61167b565b34801561087957600080fd5b506104206116b8565b34801561088e57600080fd5b5061040961089d36600461330d565b6116c7565b3480156108ae57600080fd5b506104096108bd36600461337a565b6117dc565b3480156108ce57600080fd5b506104b460185481565b3480156108e457600080fd5b506104b4601f5481565b3480156108fa57600080fd5b506104b460155481565b34801561091057600080fd5b506104b4601c5481565b34801561092657600080fd5b5061048e6109353660046132a0565b611894565b34801561094657600080fd5b5061048e6109553660046132a0565b61192d565b34801561096657600080fd5b5061042061193a565b34801561097b57600080fd5b5061040961098a36600461337a565b6119c8565b34801561099b57600080fd5b5061048e6109aa36600461330d565b60226020526000908152604090205460ff1681565b3480156109cb57600080fd5b50600f5461048e9060ff1681565b3480156109e557600080fd5b506104096109f436600461337a565b611d88565b348015610a0557600080fd5b50600a54610456906001600160a01b031681565b348015610a2557600080fd5b5060145461048e9060ff1681565b348015610a3f57600080fd5b506104b4600c5481565b348015610a5557600080fd5b50610409610a643660046133d0565b611ddc565b348015610a7557600080fd5b50610420611e45565b348015610a8a57600080fd5b506104b4610a9936600461341b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ad057600080fd5b50610409610adf3660046133b3565b611e52565b348015610af057600080fd5b506104b4600e5481565b348015610b0657600080fd5b506104b460115481565b348015610b1c57600080fd5b50610409610b2b366004613353565b611e8f565b348015610b3c57600080fd5b506104b460175481565b348015610b5257600080fd5b50610409610b6136600461330d565b611f66565b348015610b7257600080fd5b50610409612051565b348015610b8757600080fd5b506104b4601b5481565b348015610b9d57600080fd5b506104b4600d5481565b348015610bb357600080fd5b506104b460195481565b6005546001600160a01b03163314610bf05760405162461bcd60e51b8152600401610be790613449565b60405180910390fd5b60005b8151811015610d7557600a5482516001600160a01b0390911690839083908110610c1f57610c1f61347e565b60200260200101516001600160a01b03161415610c8d5760405162461bcd60e51b815260206004820152602660248201527f596f752063616e277420626c61636b6c6973742074686520726f75746572204160448201526564647265737360d01b6064820152608401610be7565b60075482516001600160a01b0390911690839083908110610cb057610cb061347e565b60200260200101516001600160a01b03161415610d1b5760405162461bcd60e51b8152602060048201526024808201527f596f752063616e277420626c61636b6c697374207468652070616972206164646044820152637265737360e01b6064820152608401610be7565b600160246000848481518110610d3357610d3361347e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055610d6e816134aa565b9050610bf3565b5050565b606060038054610d88906134c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610db4906134c5565b8015610e015780601f10610dd657610100808354040283529160200191610e01565b820191906000526020600020905b815481529060010190602001808311610de457829003601f168201915b5050505050905090565b6000610e1833848461212f565b50600192915050565b6005546001600160a01b03163314610e4b5760405162461bcd60e51b8152600401610be790613449565b600f5460ff1615610eb25760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610be7565b600f8054600160ff19918216811790925560128054909116909117905543601155565b6000610ee2848484612253565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610f675760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610be7565b610f74853385840361212f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610e18918590610fb6908690613500565b61212f565b6005546001600160a01b03163314610fe55760405162461bcd60e51b8152600401610be790613449565b600e54610ff130611261565b1015611067576040805162461bcd60e51b81526020600482015260248101919091527f43616e206f6e6c792073776170207768656e20746f6b656e20616d6f756e742060448201527f6973206174206f7220686967686572207468616e207265737472696374696f6e6064820152608401610be7565b6007805460ff60a01b1916600160a01b179055611082612b8c565b6007805460ff60a01b191690556040514281527f1b56c383f4f48fc992e45667ea4eabae777b9cca68b516a9562d8cda78f1bb329060200160405180910390a1565b6005546001600160a01b031633146110ee5760405162461bcd60e51b8152600401610be790613449565b601e6110fa8284613500565b11156111485760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610be7565b6016829055601781905561115c8183613500565b6015555050565b6005546000906001600160a01b031633146111905760405162461bcd60e51b8152600401610be790613449565b6103e861119c60025490565b6111a7906005613518565b6111b19190613537565b82111561121d5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610be7565b50600e81905560015b919050565b6005546000906001600160a01b031633146112585760405162461bcd60e51b8152600401610be790613449565b50601055600190565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146112a65760405162461bcd60e51b8152600401610be790613449565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b0316331461131a5760405162461bcd60e51b8152600401610be790613449565b6001600160a01b03919091166000908152602160205260409020805460ff1916911515919091179055565b6005546001600160a01b0316331461136f5760405162461bcd60e51b8152600401610be790613449565b601e61137b8284613500565b11156113c95760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b6565702066656573206c6f776572207468616e203330250000006044820152606401610be7565b601a829055601b8190556113dd8183613500565b6019555050565b6005546001600160a01b0316331461140e5760405162461bcd60e51b8152600401610be790613449565b6001600160a01b03811660009081526024602052604090205460ff166114765760405162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c69737465640000000000006044820152606401610be7565b6001600160a01b03166000908152602460205260409020805460ff19169055565b6005546001600160a01b031633146114c15760405162461bcd60e51b8152600401610be790613449565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561150a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061152e9190613559565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561157e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a29190613572565b50505050565b6005546001600160a01b031633146115d25760405162461bcd60e51b8152600401610be790613449565b600581101561162f5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263302e352560e01b6064820152608401610be7565b670de0b6b3a76400006103e88261164560025490565b61164f9190613518565b6116599190613537565b6116639190613537565b61167590670de0b6b3a7640000613518565b600d5550565b6005546001600160a01b031633146116a55760405162461bcd60e51b8152600401610be790613449565b6012805460ff1916911515919091179055565b606060048054610d88906134c5565b6005546001600160a01b031633146116f15760405162461bcd60e51b8152600401610be790613449565b600a546001600160a01b038281169116141561174f5760405162461bcd60e51b815260206004820152601c60248201527f57652063616e206e6f7420626c61636b6c69737420726f757465722e000000006044820152606401610be7565b6007546001600160a01b03828116911614156117b85760405162461bcd60e51b815260206004820152602260248201527f57652063616e206e6f7420626c61636b6c697374207061697220616464726573604482015261399760f11b6064820152608401610be7565b6001600160a01b03166000908152602460205260409020805460ff19166001179055565b6005546001600160a01b031633146118065760405162461bcd60e51b8152600401610be790613449565b6007546001600160a01b038381169116141561188a5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610be7565b610d758282612dd9565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156119165760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610be7565b611923338585840361212f565b5060019392505050565b6000610e18338484612253565b60048054611947906134c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611973906134c5565b80156119c05780601f10611995576101008083540402835291602001916119c0565b820191906000526020600020905b8154815290600101906020018083116119a357829003601f168201915b505050505081565b6005546001600160a01b031633146119f25760405162461bcd60e51b8152600401610be790613449565b600a80546001600160a01b0384166001600160a01b0319918216811790925560068054909116821790556040805163c45a015560e01b81529051829163c45a01559160048281019260209291908290030181865afa158015611a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7c919061358f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aed919061358f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611b3a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b5e919061358f565b600780546001600160a01b0319166001600160a01b03929092169182179055611b889060016112f0565b600754611b9f906001600160a01b03166001612dd9565b8115611d835760004711611c015760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610be7565b6000611c0c30611261565b11611c685760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610be7565b600b546001600160a01b0316611ccf5760405162461bcd60e51b815260206004820152602660248201527f4c69717569646974792072656365697665722073686f756c642062652073657460448201526508199a5c9cdd60d21b6064820152608401610be7565b600654611cea9030906001600160a01b0316610fb682611261565b6006546001600160a01b031663f305d7194730611d0681611261565b600b546040516001600160e01b031960e087901b168152611d3c93929160009182916001600160a01b03169042906004016135ac565b60606040518083038185885af1158015611d5a573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d7f91906135e7565b5050505b505050565b6005546001600160a01b03163314611db25760405162461bcd60e51b8152600401610be790613449565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6005546001600160a01b03163314611e065760405162461bcd60e51b8152600401610be790613449565b600880546001600160a01b039485166001600160a01b031991821617909155600b80549385169382169390931790925560098054919093169116179055565b60038054611947906134c5565b6005546001600160a01b03163314611e7c5760405162461bcd60e51b8152600401610be790613449565b6014805460ff1916911515919091179055565b6005546001600160a01b03163314611eb95760405162461bcd60e51b8152600401610be790613449565b6005811015611f1a5760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f7420736574206d617854786e416d6f756e74206c6f776572207468604482015266616e20302e352560c81b6064820152608401610be7565b670de0b6b3a76400006103e882611f3060025490565b611f3a9190613518565b611f449190613537565b611f4e9190613537565b611f6090670de0b6b3a7640000613518565b600c5550565b6005546001600160a01b03163314611f905760405162461bcd60e51b8152600401610be790613449565b6001600160a01b038116611ff55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610be7565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0316331461207b5760405162461bcd60e51b8152600401610be790613449565b600f5460ff16156120ed5760405162461bcd60e51b815260206004820152603660248201527f63616e2774207769746864726177204554482066726f6d20636f6e7472616374604482015275103130b630b731b29030b33a32b9103630bab731b41760511b6064820152608401610be7565b604051600090339047908381818185875af1925050503d80600081146115a2576040519150601f19603f3d011682016040523d82523d6000602084013e6115a2565b6001600160a01b0383166121915760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610be7565b6001600160a01b0382166121f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610be7565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166122795760405162461bcd60e51b8152600401610be790613615565b6001600160a01b03821661229f5760405162461bcd60e51b8152600401610be79061365a565b6001600160a01b03821660009081526024602052604090205460ff16156123025760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610be7565b3260009081526024602052604090205460ff161561235c5760405162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b6044820152606401610be7565b8061236d57611d8383836000612e04565b600f5460ff166123f9576001600160a01b038316600090815260208052604090205460ff16806123b457506001600160a01b038216600090815260208052604090205460ff165b6123f95760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610be7565b6005546001600160a01b0384811691161480159061242557506005546001600160a01b03838116911614155b801561243957506001600160a01b03821615155b801561245057506001600160a01b03821661dead14155b80156124665750600754600160a01b900460ff16155b801561248a57506001600160a01b038216600090815260208052604090205460ff16155b80156124ae57506001600160a01b038316600090815260208052604090205460ff16155b156127fd5760145460ff16156125c7576006546001600160a01b038381169116148015906124ea57506007546001600160a01b03838116911614155b156125c7576124fa60014361369d565b32600090815260136020526040902054108015612538575061251d60014361369d565b6001600160a01b038316600090815260136020526040902054105b6125a25760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610be7565b3260009081526013602052604080822043908190556001600160a01b03851683529120555b6001600160a01b03831660009081526022602052604090205460ff16801561260857506001600160a01b03821660009081526021602052604090205460ff16155b156126d457600c548111156126755760405162461bcd60e51b815260206004820152602d60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526c36b0bc2a3c3720b6b7bab73a1760991b6064820152608401610be7565b600d5461268183611261565b61268b9083613500565b11156126cf5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610be7565b6127fd565b6001600160a01b03821660009081526022602052604090205460ff16801561271557506001600160a01b03831660009081526021602052604090205460ff16155b1561278357600c548111156126cf5760405162461bcd60e51b815260206004820152602e60248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526d1036b0bc2a3c3720b6b7bab73a1760911b6064820152608401610be7565b6001600160a01b03821660009081526021602052604090205460ff166127fd57600d546127af83611261565b6127b99083613500565b11156127fd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610be7565b600061280830611261565b600e5490915081108015908190612821575060125460ff165b80156128375750600754600160a01b900460ff16155b801561285c57506001600160a01b03851660009081526022602052604090205460ff16155b801561288057506001600160a01b03841660009081526022602052604090205460ff165b80156128a457506001600160a01b038516600090815260208052604090205460ff16155b80156128c857506001600160a01b038416600090815260208052604090205460ff16155b156128f6576007805460ff60a01b1916600160a01b1790556128e8612b8c565b6007805460ff60a01b191690555b6007546001600160a01b038616600090815260208052604090205460ff600160a01b90920482161591168061294257506001600160a01b038516600090815260208052604090205460ff165b1561294b575060005b60008115612b7857601054612960904361369d565b6011541015801561298957506001600160a01b03871660009081526022602052604090205460ff165b15612a3e57606461299b866031613518565b6129a59190613537565b9050601954601b54826129b89190613518565b6129c29190613537565b601e60008282546129d39190613500565b9091555050601954601a546129e89083613518565b6129f29190613537565b601d6000828254612a039190613500565b9091555050601954601c54612a189083613518565b612a229190613537565b601f6000828254612a339190613500565b90915550612b5a9050565b6001600160a01b03861660009081526022602052604090205460ff168015612a6857506000601954115b15612a7d5760646019548661299b9190613518565b6001600160a01b03871660009081526022602052604090205460ff168015612aa757506000601554115b15612b5a57606460155486612abc9190613518565b612ac69190613537565b905060155460175482612ad99190613518565b612ae39190613537565b601e6000828254612af49190613500565b9091555050601554601654612b099083613518565b612b139190613537565b601d6000828254612b249190613500565b9091555050601554601854612b399083613518565b612b439190613537565b601f6000828254612b549190613500565b90915550505b8015612b6b57612b6b873083612e04565b612b75818661369d565b94505b612b83878787612e04565b50505050505050565b6000612b9730611261565b90506000601f54601d54601e54612bae9190613500565b612bb89190613500565b90506000821580612bc7575081155b15612bd157505050565b600e54831115612be157600e5492505b6000600283601e5486612bf49190613518565b612bfe9190613537565b612c089190613537565b90506000612c16828661369d565b905047612c2282612f59565b6000612c2e824761369d565b905060006002601e54612c419190613537565b612c4b908861369d565b601d54612c589084613518565b612c629190613537565b905060006002601e54612c759190613537565b612c7f908961369d565b601f54612c8c9085613518565b612c969190613537565b9050600081612ca5848661369d565b612caf919061369d565b6000601e819055601d819055601f8190556009546040519293506001600160a01b031691849181818185875af1925050503d8060008114612d0c576040519150601f19603f3d011682016040523d82523d6000602084013e612d11565b606091505b50506008546040519199506001600160a01b0316908490600081818185875af1925050503d8060008114612d61576040519150601f19603f3d011682016040523d82523d6000602084013e612d66565b606091505b50909850508615801590612d7a5750600081115b15612dcd57612d8987826130ab565b601e54604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b50505050505050505050565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038316612e2a5760405162461bcd60e51b8152600401610be790613615565b6001600160a01b038216612e505760405162461bcd60e51b8152600401610be79061365a565b6001600160a01b03831660009081526020819052604090205481811015612ec85760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610be7565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612eff908490613500565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612f4b91815260200190565b60405180910390a350505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f8e57612f8e61347e565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300b919061358f565b8160018151811061301e5761301e61347e565b6001600160a01b039283166020918202929092010152600654613044913091168461212f565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac9479061307d9085906000908690309042906004016136b4565b600060405180830381600087803b15801561309757600080fd5b505af1158015611d7f573d6000803e3d6000fd5b6006546130c39030906001600160a01b03168461212f565b600654600b5460405163f305d71960e01b81526001600160a01b039283169263f305d71992859261310392309289926000928392169042906004016135ac565b60606040518083038185885af1158015613121573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061314691906135e7565b5050505050565b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461317857600080fd5b50565b803561122681613163565b6000602080838503121561319957600080fd5b823567ffffffffffffffff808211156131b157600080fd5b818501915085601f8301126131c557600080fd5b8135818111156131d7576131d761314d565b8060051b604051601f19603f830116810181811085821117156131fc576131fc61314d565b60405291825284820192508381018501918883111561321a57600080fd5b938501935b8285101561323f576132308561317b565b8452938501939285019261321f565b98975050505050505050565b600060208083528351808285015260005b818110156132785785810183015185820160400152820161325c565b8181111561328a576000604083870101525b50601f01601f1916929092016040019392505050565b600080604083850312156132b357600080fd5b82356132be81613163565b946020939093013593505050565b6000806000606084860312156132e157600080fd5b83356132ec81613163565b925060208401356132fc81613163565b929592945050506040919091013590565b60006020828403121561331f57600080fd5b813561332a81613163565b9392505050565b6000806040838503121561334457600080fd5b50508035926020909101359150565b60006020828403121561336557600080fd5b5035919050565b801515811461317857600080fd5b6000806040838503121561338d57600080fd5b823561339881613163565b915060208301356133a88161336c565b809150509250929050565b6000602082840312156133c557600080fd5b813561332a8161336c565b6000806000606084860312156133e557600080fd5b83356133f081613163565b9250602084013561340081613163565b9150604084013561341081613163565b809150509250925092565b6000806040838503121561342e57600080fd5b823561343981613163565b915060208301356133a881613163565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156134be576134be613494565b5060010190565b600181811c908216806134d957607f821691505b602082108114156134fa57634e487b7160e01b600052602260045260246000fd5b50919050565b6000821982111561351357613513613494565b500190565b600081600019048311821515161561353257613532613494565b500290565b60008261355457634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561356b57600080fd5b5051919050565b60006020828403121561358457600080fd5b815161332a8161336c565b6000602082840312156135a157600080fd5b815161332a81613163565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b6000806000606084860312156135fc57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156136af576136af613494565b500390565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156137045784516001600160a01b0316835293830193918301916001016136df565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220c60d17f702e100d8b5b9abd55ca0ce1716ecfe70a2db3ac8787badf348a2fcf964736f6c634300080c0033

Deployed Bytecode Sourcemap

7211:16989:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23602:389;;;;;;;;;;-1:-1:-1;23602:389:0;;;;;:::i;:::-;;:::i;:::-;;1712:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7254:27;;;;;;;;;;-1:-1:-1;7254:27:0;;;;-1:-1:-1;;;;;7254:27:0;;;;;;-1:-1:-1;;;;;2331:32:1;;;2313:51;;2301:2;2286:18;7254:27:0;2149:221:1;2612:169:0;;;;;;;;;;-1:-1:-1;2612:169:0;;;;;:::i;:::-;;:::i;:::-;;;2860:14:1;;2853:22;2835:41;;2823:2;2808:18;2612:169:0;2695:187:1;7723:24:0;;;;;;;;;;;;;;;;;;;3033:25:1;;;3021:2;3006:18;7723:24:0;2887:177:1;2027:108:0;;;;;;;;;;-1:-1:-1;2115:12:0;;2027:108;;8356:33;;;;;;;;;;;;;;;;22397:272;;;;;;;;;;;;;:::i;8316:33::-;;;;;;;;;;;;;;;;2787:488;;;;;;;;;;-1:-1:-1;2787:488:0;;;;;:::i;:::-;;:::i;7316:53::-;;;;;;;;;;;;7362:6;7316:53;;1928:93;;;;;;;;;;-1:-1:-1;1928:93:0;;2011:2;3880:36:1;;3868:2;3853:18;1928:93:0;3738:184:1;3281:215:0;;;;;;;;;;-1:-1:-1;3281:215:0;;;;;:::i;:::-;;:::i;7507:32::-;;;;;;;;;;-1:-1:-1;7507:32:0;;;;-1:-1:-1;;;;;7507:32:0;;;7288:21;;;;;;;;;;-1:-1:-1;7288:21:0;;;;-1:-1:-1;;;;;7288:21:0;;;13200:125;;;;;;;;;;-1:-1:-1;13200:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;13289:28:0;13265:4;13289:28;;;:19;:28;;;;;;;;;13200:125;20863:312;;;;;;;;;;;;;:::i;11832:305::-;;;;;;;;;;-1:-1:-1;11832:305:0;;;;;:::i;:::-;;:::i;10711:261::-;;;;;;;;;;-1:-1:-1;10711:261:0;;;;;:::i;:::-;;:::i;8546:56::-;;;;;;;;;;-1:-1:-1;8546:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23212:109;;;;;;;;;;-1:-1:-1;23212:109:0;;;;;:::i;:::-;;:::i;7798:31::-;;;;;;;;;;-1:-1:-1;7798:31:0;;;;;;;;1476:44;;;;;;;;;;-1:-1:-1;1476:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;2141:127;;;;;;;;;;-1:-1:-1;2141:127:0;;;;;:::i;:::-;;:::i;5737:150::-;;;;;;;;;;;;;:::i;11533:136::-;;;;;;;;;;-1:-1:-1;11533:136:0;;;;;:::i;:::-;;:::i;7404:30::-;;;;;;;;;;-1:-1:-1;7404:30:0;;;;-1:-1:-1;;;;;7404:30:0;;;8056;;;;;;;;;;;;;;;;12143:311;;;;;;;;;;-1:-1:-1;12143:311:0;;;;;:::i;:::-;;:::i;23997:200::-;;;;;;;;;;-1:-1:-1;23997:200:0;;;;;:::i;:::-;;:::i;22977:229::-;;;;;;;;;;-1:-1:-1;22977:229:0;;;;;:::i;:::-;;:::i;11253:268::-;;;;;;;;;;-1:-1:-1;11253:268:0;;;;;:::i;:::-;;:::i;5527:79::-;;;;;;;;;;-1:-1:-1;5592:6:0;;-1:-1:-1;;;;;5592:6:0;5527:79;;7441:24;;;;;;;;;;-1:-1:-1;7441:24:0;;;;-1:-1:-1;;;;;7441:24:0;;;8202:31;;;;;;;;;;;;;;;;11725:101;;;;;;;;;;-1:-1:-1;11725:101:0;;;;;:::i;:::-;;:::i;1818:104::-;;;;;;;;;;;;;:::i;23327:269::-;;;;;;;;;;-1:-1:-1;23327:269:0;;;;;:::i;:::-;;:::i;12602:237::-;;;;;;;;;;-1:-1:-1;12602:237:0;;;;;:::i;:::-;;:::i;8130:24::-;;;;;;;;;;;;;;;;8396:27;;;;;;;;;;;;;;;;8022;;;;;;;;;;;;;;;;8278:25;;;;;;;;;;;;;;;;3502:411;;;;;;;;;;-1:-1:-1;3502:411:0;;;;;:::i;:::-;;:::i;2274:175::-;;;;;;;;;;-1:-1:-1;2274:175:0;;;;;:::i;:::-;;:::i;1662:21::-;;;;;;;;;;;;;:::i;21182:1209::-;;;;;;;;;;-1:-1:-1;21182:1209:0;;;;;:::i;:::-;;:::i;8699:58::-;;;;;;;;;;-1:-1:-1;8699:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;7683:33;;;;;;;;;;-1:-1:-1;7683:33:0;;;;;;;;12462:132;;;;;;;;;;-1:-1:-1;12462:132:0;;;;;:::i;:::-;;:::i;7472:28::-;;;;;;;;;;-1:-1:-1;7472:28:0;;;;-1:-1:-1;;;;;7472:28:0;;;7955:40;;;;;;;;;;-1:-1:-1;7955:40:0;;;;;;;;7552:27;;;;;;;;;;;;;;;;12981:213;;;;;;;;;;-1:-1:-1;12981:213:0;;;;;:::i;:::-;;:::i;1636:19::-;;;;;;;;;;;;;:::i;2455:151::-;;;;;;;;;;-1:-1:-1;2455:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;2571:18:0;;;2544:7;2571:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;2455:151;10592:107;;;;;;;;;;-1:-1:-1;10592:107:0;;;;;:::i;:::-;;:::i;7617:33::-;;;;;;;;;;;;;;;;7754:37;;;;;;;;;;;;;;;;10978:267;;;;;;;;;;-1:-1:-1;10978:267:0;;;;;:::i;:::-;;:::i;8093:30::-;;;;;;;;;;;;;;;;5893:246;;;;;;;;;;-1:-1:-1;5893:246:0;;;;;:::i;:::-;;:::i;22719:252::-;;;;;;;;;;;;;:::i;8240:31::-;;;;;;;;;;;;;;;;7586:24;;;;;;;;;;;;;;;;8167:28;;;;;;;;;;;;;;;;23602:389;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;;;;;;;;;23700:9:::1;23695:289;23715:9;:16;23711:1;:20;23695:289;;;23777:13;::::0;23761:12;;-1:-1:-1;;;;;23777:13:0;;::::1;::::0;23761:9;;23771:1;;23761:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;23761:29:0::1;;;23753:80;;;::::0;-1:-1:-1;;;23753:80:0;;6995:2:1;23753:80:0::1;::::0;::::1;6977:21:1::0;7034:2;7014:18;;;7007:30;7073:34;7053:18;;;7046:62;-1:-1:-1;;;7124:18:1;;;7117:36;7170:19;;23753:80:0::1;6793:402:1::0;23753:80:0::1;23872:6;::::0;23856:12;;-1:-1:-1;;;;;23872:6:0;;::::1;::::0;23856:9;;23866:1;;23856:12;::::1;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;23856:22:0::1;;;23848:71;;;::::0;-1:-1:-1;;;23848:71:0;;7402:2:1;23848:71:0::1;::::0;::::1;7384:21:1::0;7441:2;7421:18;;;7414:30;7480:34;7460:18;;;7453:62;-1:-1:-1;;;7531:18:1;;;7524:34;7575:19;;23848:71:0::1;7200:400:1::0;23848:71:0::1;23968:4;23934:17;:31;23952:9;23962:1;23952:12;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;23934:31:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;23934:31:0;:38;;-1:-1:-1;;23934:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23733:3:::1;::::0;::::1;:::i;:::-;;;23695:289;;;;23602:389:::0;:::o;1712:100::-;1766:13;1799:5;1792:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1712:100;:::o;2612:169::-;2695:4;2712:39;171:10;2735:7;2744:6;2712:8;:39::i;:::-;-1:-1:-1;2769:4:0;2612:169;;;;:::o;22397:272::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;22461:13:::1;::::0;::::1;;22460:14;22452:70;;;::::0;-1:-1:-1;;;22452:70:0;;8464:2:1;22452:70:0::1;::::0;::::1;8446:21:1::0;8503:2;8483:18;;;8476:30;8542:34;8522:18;;;8515:62;-1:-1:-1;;;8593:18:1;;;8586:41;8644:19;;22452:70:0::1;8262:407:1::0;22452:70:0::1;22568:13;:20:::0;;22584:4:::1;-1:-1:-1::0;;22568:20:0;;::::1;::::0;::::1;::::0;;;22599:11:::1;:18:::0;;;;::::1;::::0;;::::1;::::0;;22649:12:::1;22628:18;:33:::0;22397:272::o;2787:488::-;2927:4;2944:36;2954:6;2962:9;2973:6;2944:9;:36::i;:::-;-1:-1:-1;;;;;3018:19:0;;2991:24;3018:19;;;:11;:19;;;;;;;;171:10;3018:33;;;;;;;;3070:26;;;;3062:79;;;;-1:-1:-1;;;3062:79:0;;8876:2:1;3062:79:0;;;8858:21:1;8915:2;8895:18;;;8888:30;8954:34;8934:18;;;8927:62;-1:-1:-1;;;9005:18:1;;;8998:38;9053:19;;3062:79:0;8674:404:1;3062:79:0;3177:57;3186:6;171:10;3227:6;3208:16;:25;3177:8;:57::i;:::-;-1:-1:-1;3263:4:0;;2787:488;-1:-1:-1;;;;2787:488:0:o;3281:215::-;171:10;3369:4;3418:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3418:34:0;;;;;;;;;;3369:4;;3386:80;;3409:7;;3418:47;;3455:10;;3418:47;:::i;:::-;3386:8;:80::i;20863:312::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;20954:18:::1;;20926:24;20944:4;20926:9;:24::i;:::-;:46;;20918:123;;;::::0;;-1:-1:-1;;;20918:123:0;;9418:2:1;20918:123:0::1;::::0;::::1;9400:21:1::0;9437:18;;;9430:30;;;;9496:34;9476:18;;;9469:62;9567:34;9547:18;;;9540:62;9619:19;;20918:123:0::1;9216:428:1::0;20918:123:0::1;21052:8;:15:::0;;-1:-1:-1;;;;21052:15:0::1;-1:-1:-1::0;;;21052:15:0::1;::::0;;21078:10:::1;:8;:10::i;:::-;21099:8;:16:::0;;-1:-1:-1;;;;21099:16:0::1;::::0;;21131:36:::1;::::0;21151:15:::1;3033:25:1::0;;21131:36:0::1;::::0;3021:2:1;3006:18;21131:36:0::1;;;;;;;20863:312::o:0;11832:305::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;11956:2:::1;11930:21;11941:10:::0;11930;:21:::1;:::i;:::-;11929:29;;11921:71;;;::::0;-1:-1:-1;;;11921:71:0;;9851:2:1;11921:71:0::1;::::0;::::1;9833:21:1::0;9890:2;9870:18;;;9863:30;9929:31;9909:18;;;9902:59;9978:18;;11921:71:0::1;9649:353:1::0;11921:71:0::1;12003:15;:28:::0;;;12042:15:::1;:28:::0;;;12096:33:::1;12060:10:::0;12021;12096:33:::1;:::i;:::-;12081:12;:48:::0;-1:-1:-1;;11832:305:0:o;10711:261::-;5652:6;;10783:4;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;10840:4:::1;10820:13;2115:12:::0;;;2027:108;10820:13:::1;:17;::::0;10836:1:::1;10820:17;:::i;:::-;:24;;;;:::i;:::-;10807:9;:37;;10799:102;;;::::0;-1:-1:-1;;;10799:102:0;;10604:2:1;10799:102:0::1;::::0;::::1;10586:21:1::0;10643:2;10623:18;;;10616:30;10682:34;10662:18;;;10655:62;-1:-1:-1;;;10733:18:1;;;10726:50;10793:19;;10799:102:0::1;10402:416:1::0;10799:102:0::1;-1:-1:-1::0;10912:18:0::1;:30:::0;;;10960:4:::1;5722:1;10711:261:::0;;;:::o;23212:109::-;5652:6;;23265:4;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;23281:7:0::1;:10:::0;23309:4:::1;::::0;23212:109::o;2141:127::-;-1:-1:-1;;;;;2242:18:0;2215:7;2242:18;;;;;;;;;;;;2141:127::o;5737:150::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;5830:6:::1;::::0;5809:40:::1;::::0;5846:1:::1;::::0;-1:-1:-1;;;;;5830:6:0::1;::::0;5809:40:::1;::::0;5846:1;;5809:40:::1;5860:6;:19:::0;;-1:-1:-1;;;;;;5860:19:0::1;::::0;;5737:150::o;11533:136::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11623:31:0;;;::::1;;::::0;;;:23:::1;:31;::::0;;;;:38;;-1:-1:-1;;11623:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11533:136::o;12143:311::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;12268:2:::1;12242:21;12253:10:::0;12242;:21:::1;:::i;:::-;12241:29;;12233:71;;;::::0;-1:-1:-1;;;12233:71:0;;9851:2:1;12233:71:0::1;::::0;::::1;9833:21:1::0;9890:2;9870:18;;;9863:30;9929:31;9909:18;;;9902:59;9978:18;;12233:71:0::1;9649:353:1::0;12233:71:0::1;12315:16;:29:::0;;;12355:16:::1;:29:::0;;;12411:35:::1;12374:10:::0;12334;12411:35:::1;:::i;:::-;12395:13;:51:::0;-1:-1:-1;;12143:311:0:o;23997:200::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24087:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;24079:65;;;::::0;-1:-1:-1;;;24079:65:0;;11025:2:1;24079:65:0::1;::::0;::::1;11007:21:1::0;11064:2;11044:18;;;11037:30;11103:28;11083:18;;;11076:56;11149:18;;24079:65:0::1;10823:350:1::0;24079:65:0::1;-1:-1:-1::0;;;;;24155:26:0::1;24184:5;24155:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;24155:34:0::1;::::0;;23997:200::o;22977:229::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;23108:31:::1;::::0;-1:-1:-1;;;23108:31:0;;23133:4:::1;23108:31;::::0;::::1;2313:51:1::0;23070:4:0;;23047:13:::1;::::0;-1:-1:-1;;;;;23108:16:0;::::1;::::0;::::1;::::0;2286:18:1;;23108:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23150:48;::::0;-1:-1:-1;;;23150:48:0;;23174:10:::1;23150:48;::::0;::::1;11541:51:1::0;11608:18;;;11601:34;;;23086:53:0;;-1:-1:-1;;;;;;23150:15:0;::::1;::::0;::::1;::::0;11514:18:1;;23150:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23036:170;;22977:229:::0;:::o;11253:268::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;11399:1:::1;11389:6;:11;;11381:60;;;::::0;-1:-1:-1;;;11381:60:0;;12098:2:1;11381:60:0::1;::::0;::::1;12080:21:1::0;12137:2;12117:18;;;12110:30;12176:34;12156:18;;;12149:62;-1:-1:-1;;;12227:18:1;;;12220:34;12271:19;;11381:60:0::1;11896:400:1::0;11381:60:0::1;11497:4;11491;11482:6;11466:13;2115:12:::0;;;2027:108;11466:13:::1;:22;;;;:::i;:::-;:29;;;;:::i;:::-;11465:36;;;;:::i;:::-;11464:49;::::0;11506:6:::1;11464:49;:::i;:::-;11452:9;:61:::0;-1:-1:-1;11253:268:0:o;11725:101::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;11797:11:::1;:21:::0;;-1:-1:-1;;11797:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;11725:101::o;1818:104::-;1874:13;1907:7;1900:14;;;;;:::i;23327:269::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;23423:13:::1;::::0;-1:-1:-1;;;;;23412:24:0;;::::1;23423:13:::0;::::1;23412:24;;23404:65;;;::::0;-1:-1:-1;;;23404:65:0;;12503:2:1;23404:65:0::1;::::0;::::1;12485:21:1::0;12542:2;12522:18;;;12515:30;12581;12561:18;;;12554:58;12629:18;;23404:65:0::1;12301:352:1::0;23404:65:0::1;23499:6;::::0;-1:-1:-1;;;;;23488:17:0;;::::1;23499:6:::0;::::1;23488:17;;23480:64;;;::::0;-1:-1:-1;;;23480:64:0;;12860:2:1;23480:64:0::1;::::0;::::1;12842:21:1::0;12899:2;12879:18;;;12872:30;12938:34;12918:18;;;12911:62;-1:-1:-1;;;12989:18:1;;;12982:32;13031:19;;23480:64:0::1;12658:398:1::0;23480:64:0::1;-1:-1:-1::0;;;;;23555:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;23555:33:0::1;23584:4;23555:33;::::0;;23327:269::o;12602:237::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;12709:6:::1;::::0;-1:-1:-1;;;;;12701:14:0;;::::1;12709:6:::0;::::1;12701:14;;12693:84;;;::::0;-1:-1:-1;;;12693:84:0;;13263:2:1;12693:84:0::1;::::0;::::1;13245:21:1::0;13302:2;13282:18;;;13275:30;13341:34;13321:18;;;13314:62;13412:27;13392:18;;;13385:55;13457:19;;12693:84:0::1;13061:421:1::0;12693:84:0::1;12790:41;12819:4;12825:5;12790:28;:41::i;3502:411::-:0;171:10;3595:4;3639:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;3639:34:0;;;;;;;;;;3692:35;;;;3684:85;;;;-1:-1:-1;;;3684:85:0;;13689:2:1;3684:85:0;;;13671:21:1;13728:2;13708:18;;;13701:30;13767:34;13747:18;;;13740:62;-1:-1:-1;;;13818:18:1;;;13811:35;13863:19;;3684:85:0;13487:401:1;3684:85:0;3805:67;171:10;3828:7;3856:15;3837:16;:34;3805:8;:67::i;:::-;-1:-1:-1;3901:4:0;;3502:411;-1:-1:-1;;;3502:411:0:o;2274:175::-;2360:4;2377:42;171:10;2401:9;2412:6;2377:9;:42::i;1662:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;21182:1209::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;21291:13:::1;:23:::0;;-1:-1:-1;;;;;21291:23:0;::::1;-1:-1:-1::0;;;;;;21291:23:0;;::::1;::::0;::::1;::::0;;;21411:9:::1;:22:::0;;;;::::1;::::0;::::1;::::0;;21489:20:::1;::::0;;-1:-1:-1;;;21489:20:0;;;;21291:23;;21489:18:::1;::::0;-1:-1:-1;21489:20:0;;::::1;::::0;::::1;::::0;;;;;;;;21291:23;21489:20:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21477:44:0::1;;21530:4;21537:10;-1:-1:-1::0;;;;;21537:15:0::1;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21477:78;::::0;-1:-1:-1;;;;;;21477:78:0::1;::::0;;;;;;-1:-1:-1;;;;;14379:15:1;;;21477:78:0::1;::::0;::::1;14361:34:1::0;14431:15;;14411:18;;;14404:43;14296:18;;21477:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21468:6;:87:::0;;-1:-1:-1;;;;;;21468:87:0::1;-1:-1:-1::0;;;;;21468:87:0;;;::::1;::::0;;::::1;::::0;;21566:48:::1;::::0;-1:-1:-1;21566:25:0::1;:48::i;:::-;21662:6;::::0;21625:51:::1;::::0;-1:-1:-1;;;;;21662:6:0::1;::::0;21625:28:::1;:51::i;:::-;21696:7;21693:691;;;21785:1;21761:21;:25;21753:73;;;::::0;-1:-1:-1;;;21753:73:0;;14660:2:1;21753:73:0::1;::::0;::::1;14642:21:1::0;14699:2;14679:18;;;14672:30;14738:34;14718:18;;;14711:62;-1:-1:-1;;;14789:18:1;;;14782:33;14832:19;;21753:73:0::1;14458:399:1::0;21753:73:0::1;21876:1;21849:24;21867:4;21849:9;:24::i;:::-;:28;21841:79;;;::::0;-1:-1:-1;;;21841:79:0;;15064:2:1;21841:79:0::1;::::0;::::1;15046:21:1::0;15103:2;15083:18;;;15076:30;15142:34;15122:18;;;15115:62;-1:-1:-1;;;15193:18:1;;;15186:36;15239:19;;21841:79:0::1;14862:402:1::0;21841:79:0::1;21943:17;::::0;-1:-1:-1;;;;;21943:17:0::1;21935:81;;;::::0;-1:-1:-1;;;21935:81:0;;15471:2:1;21935:81:0::1;::::0;::::1;15453:21:1::0;15510:2;15490:18;;;15483:30;15549:34;15529:18;;;15522:62;-1:-1:-1;;;15600:18:1;;;15593:36;15646:19;;21935:81:0::1;15269:402:1::0;21935:81:0::1;22063:9;::::0;22031:69:::1;::::0;22048:4:::1;::::0;-1:-1:-1;;;;;22063:9:0::1;22075:24;22048:4:::0;22075:9:::1;:24::i;22031:69::-;22115:9;::::0;-1:-1:-1;;;;;22115:9:0::1;:25;22148:21;22197:4;22221:24;22197:4:::0;22221:9:::1;:24::i;:::-;22306:17;::::0;22115:257:::1;::::0;-1:-1:-1;;;;;;22115:257:0::1;::::0;;;;;;::::1;::::0;;;22264:1:::1;::::0;;;-1:-1:-1;;;;;22306:17:0::1;::::0;22342:15:::1;::::0;22115:257:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;21693:691;21250:1141;21182:1209:::0;;:::o;12462:132::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12547:28:0;;;::::1;;::::0;;;:19:::1;:28:::0;;;;;:39;;-1:-1:-1;;12547:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12462:132::o;12981:213::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;13090:15:::1;:28:::0;;-1:-1:-1;;;;;13090:28:0;;::::1;-1:-1:-1::0;;;;;;13090:28:0;;::::1;;::::0;;;13129:17:::1;:30:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;13170:9:::1;:16:::0;;;;;::::1;::::0;::::1;;::::0;;12981:213::o;1636:19::-;;;;;;;:::i;10592:107::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;10663:20:::1;:28:::0;;-1:-1:-1;;10663:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10592:107::o;10978:267::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;11117:1:::1;11107:6;:11;;11099:63;;;::::0;-1:-1:-1;;;11099:63:0;;16801:2:1;11099:63:0::1;::::0;::::1;16783:21:1::0;16840:2;16820:18;;;16813:30;16879:34;16859:18;;;16852:62;-1:-1:-1;;;16930:18:1;;;16923:37;16977:19;;11099:63:0::1;16599:403:1::0;11099:63:0::1;11221:4;11215;11206:6;11190:13;2115:12:::0;;;2027:108;11190:13:::1;:22;;;;:::i;:::-;:29;;;;:::i;:::-;11189:36;;;;:::i;:::-;11188:49;::::0;11230:6:::1;11188:49;:::i;:::-;11173:12;:64:::0;-1:-1:-1;10978:267:0:o;5893:246::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5984:22:0;::::1;5976:73;;;::::0;-1:-1:-1;;;5976:73:0;;17209:2:1;5976:73:0::1;::::0;::::1;17191:21:1::0;17248:2;17228:18;;;17221:30;17287:34;17267:18;;;17260:62;-1:-1:-1;;;17338:18:1;;;17331:36;17384:19;;5976:73:0::1;17007:402:1::0;5976:73:0::1;6086:6;::::0;6065:38:::1;::::0;-1:-1:-1;;;;;6065:38:0;;::::1;::::0;6086:6:::1;::::0;6065:38:::1;::::0;6086:6:::1;::::0;6065:38:::1;6114:6;:17:::0;;-1:-1:-1;;;;;;6114:17:0::1;-1:-1:-1::0;;;;;6114:17:0;;;::::1;::::0;;;::::1;::::0;;5893:246::o;22719:252::-;5652:6;;-1:-1:-1;;;;;5652:6:0;171:10;5652:22;5644:67;;;;-1:-1:-1;;;5644:67:0;;;;;;;:::i;:::-;22786:13:::1;::::0;::::1;;22785:14;22777:81;;;::::0;-1:-1:-1;;;22777:81:0;;17616:2:1;22777:81:0::1;::::0;::::1;17598:21:1::0;17655:2;17635:18;;;17628:30;17694:34;17674:18;;;17667:62;-1:-1:-1;;;17745:18:1;;;17738:52;17807:19;;22777:81:0::1;17414:418:1::0;22777:81:0::1;22905:58;::::0;22869:12:::1;::::0;22913:10:::1;::::0;22937:21:::1;::::0;22869:12;22905:58;22869:12;22905:58;22937:21;22913:10;22905:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4830:378:::0;-1:-1:-1;;;;;4966:19:0;;4958:68;;;;-1:-1:-1;;;4958:68:0;;18249:2:1;4958:68:0;;;18231:21:1;18288:2;18268:18;;;18261:30;18327:34;18307:18;;;18300:62;-1:-1:-1;;;18378:18:1;;;18371:34;18422:19;;4958:68:0;18047:400:1;4958:68:0;-1:-1:-1;;;;;5045:21:0;;5037:68;;;;-1:-1:-1;;;5037:68:0;;18654:2:1;5037:68:0;;;18636:21:1;18693:2;18673:18;;;18666:30;18732:34;18712:18;;;18705:62;-1:-1:-1;;;18783:18:1;;;18776:32;18825:19;;5037:68:0;18452:398:1;5037:68:0;-1:-1:-1;;;;;5116:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;5168:32;;3033:25:1;;;5168:32:0;;3006:18:1;5168:32:0;;;;;;;4830:378;;;:::o;13535:4643::-;-1:-1:-1;;;;;13667:18:0;;13659:68;;;;-1:-1:-1;;;13659:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13746:16:0;;13738:64;;;;-1:-1:-1;;;13738:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13822:21:0;;;;;;:17;:21;;;;;;;;13821:22;13813:58;;;;-1:-1:-1;;;13813:58:0;;19867:2:1;13813:58:0;;;19849:21:1;19906:2;19886:18;;;19879:30;-1:-1:-1;;;19925:18:1;;;19918:53;19988:18;;13813:58:0;19665:347:1;13813:58:0;13909:9;13891:28;;;;:17;:28;;;;;;;;13890:29;13882:65;;;;-1:-1:-1;;;13882:65:0;;19867:2:1;13882:65:0;;;19849:21:1;19906:2;19886:18;;;19879:30;-1:-1:-1;;;19925:18:1;;;19918:53;19988:18;;13882:65:0;19665:347:1;13882:65:0;13964:11;13961:92;;13992:28;14008:4;14014:2;14018:1;13992:15;:28::i;13961:92::-;14069:13;;;;14065:132;;-1:-1:-1;;;;;14106:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;14135:23:0;;;;;;:19;:23;;;;;;;;14106:52;14098:87;;;;-1:-1:-1;;;14098:87:0;;20219:2:1;14098:87:0;;;20201:21:1;20258:2;20238:18;;;20231:30;-1:-1:-1;;;20277:18:1;;;20270:52;20339:18;;14098:87:0;20017:346:1;14098:87:0;5592:6;;-1:-1:-1;;;;;14225:15:0;;;5592:6;;14225:15;;;;:45;;-1:-1:-1;5592:6:0;;-1:-1:-1;;;;;14257:13:0;;;5592:6;;14257:13;;14225:45;:78;;;;-1:-1:-1;;;;;;14287:16:0;;;;14225:78;:116;;;;-1:-1:-1;;;;;;14320:21:0;;14334:6;14320:21;;14225:116;:142;;;;-1:-1:-1;14359:8:0;;-1:-1:-1;;;14359:8:0;;;;14358:9;14225:142;:183;;;;-1:-1:-1;;;;;;14385:23:0;;;;;;:19;:23;;;;;;;;14384:24;14225:183;:226;;;;-1:-1:-1;;;;;;14426:25:0;;;;;;:19;:25;;;;;;;;14425:26;14225:226;14207:1591;;;14611:20;;;;14607:466;;;14669:9;;-1:-1:-1;;;;;14655:24:0;;;14669:9;;14655:24;;;;:49;;-1:-1:-1;14697:6:0;;-1:-1:-1;;;;;14683:21:0;;;14697:6;;14683:21;;14655:49;14651:407;;;14774:16;14789:1;14774:12;:16;:::i;:::-;14761:9;14736:35;;;;:24;:35;;;;;;:54;:105;;;;-1:-1:-1;14825:16:0;14840:1;14825:12;:16;:::i;:::-;-1:-1:-1;;;;;14794:28:0;;;;;;:24;:28;;;;;;:47;14736:105;14728:171;;;;-1:-1:-1;;;14728:171:0;;20700:2:1;14728:171:0;;;20682:21:1;20739:2;20719:18;;;20712:30;20778:34;20758:18;;;20751:62;-1:-1:-1;;;20829:18:1;;;20822:51;20890:19;;14728:171:0;20498:417:1;14728:171:0;14947:9;14922:35;;;;:24;:35;;;;;;14960:12;14922:50;;;;-1:-1:-1;;;;;14995:28:0;;;;;;:43;14651:407;-1:-1:-1;;;;;15134:31:0;;;;;;:25;:31;;;;;;;;:63;;;;-1:-1:-1;;;;;;15170:27:0;;;;;;:23;:27;;;;;;;;15169:28;15134:63;15130:657;;;15236:12;;15226:6;:22;;15218:80;;;;-1:-1:-1;;;15218:80:0;;21122:2:1;15218:80:0;;;21104:21:1;21161:2;21141:18;;;21134:30;21200:34;21180:18;;;21173:62;-1:-1:-1;;;21251:18:1;;;21244:43;21304:19;;15218:80:0;20920:409:1;15218:80:0;15351:9;;15334:13;15344:2;15334:9;:13::i;:::-;15325:22;;:6;:22;:::i;:::-;:35;;15317:67;;;;-1:-1:-1;;;15317:67:0;;21536:2:1;15317:67:0;;;21518:21:1;21575:2;21555:18;;;21548:30;-1:-1:-1;;;21594:18:1;;;21587:49;21653:18;;15317:67:0;21334:343:1;15317:67:0;15130:657;;;-1:-1:-1;;;;;15452:29:0;;;;;;:25;:29;;;;;;;;:63;;;;-1:-1:-1;;;;;;15486:29:0;;;;;;:23;:29;;;;;;;;15485:30;15452:63;15448:339;;;15554:12;;15544:6;:22;;15536:81;;;;-1:-1:-1;;;15536:81:0;;21884:2:1;15536:81:0;;;21866:21:1;21923:2;21903:18;;;21896:30;21962:34;21942:18;;;21935:62;-1:-1:-1;;;22013:18:1;;;22006:44;22067:19;;15536:81:0;21682:410:1;15448:339:0;-1:-1:-1;;;;;15657:27:0;;;;;;:23;:27;;;;;;;;15652:135;;15738:9;;15721:13;15731:2;15721:9;:13::i;:::-;15712:22;;:6;:22;:::i;:::-;:35;;15704:67;;;;-1:-1:-1;;;15704:67:0;;21536:2:1;15704:67:0;;;21518:21:1;21575:2;21555:18;;;21548:30;-1:-1:-1;;;21594:18:1;;;21587:49;21653:18;;15704:67:0;21334:343:1;15704:67:0;15808:28;15839:24;15857:4;15839:9;:24::i;:::-;15913:18;;15808:55;;-1:-1:-1;15889:42:0;;;;;;;15960:35;;-1:-1:-1;15984:11:0;;;;15960:35;:61;;;;-1:-1:-1;16013:8:0;;-1:-1:-1;;;16013:8:0;;;;16012:9;15960:61;:110;;;;-1:-1:-1;;;;;;16039:31:0;;;;;;:25;:31;;;;;;;;16038:32;15960:110;:156;;;;-1:-1:-1;;;;;;16087:29:0;;;;;;:25;:29;;;;;;;;15960:156;:199;;;;-1:-1:-1;;;;;;16134:25:0;;;;;;:19;:25;;;;;;;;16133:26;15960:199;:240;;;;-1:-1:-1;;;;;;16177:23:0;;;;;;:19;:23;;;;;;;;16176:24;15960:240;15942:368;;;16227:8;:15;;-1:-1:-1;;;;16227:15:0;-1:-1:-1;;;16227:15:0;;;16257:10;:8;:10::i;:::-;16282:8;:16;;-1:-1:-1;;;;16282:16:0;;;15942:368;16344:8;;-1:-1:-1;;;;;16453:25:0;;16328:12;16453:25;;;:19;:25;;;;;;16344:8;-1:-1:-1;;;16344:8:0;;;;;16343:9;;16453:25;;:52;;-1:-1:-1;;;;;;16482:23:0;;;;;;:19;:23;;;;;;;;16453:52;16450:99;;;-1:-1:-1;16532:5:0;16450:99;16569:12;16673:7;16670:1457;;;16844:7;;16829:22;;:12;:22;:::i;:::-;16807:18;;:44;;16806:81;;;;-1:-1:-1;;;;;;16856:31:0;;;;;;:25;:31;;;;;;;;16806:81;16803:1153;;;16928:3;16914:11;:6;16923:2;16914:11;:::i;:::-;:17;;;;:::i;:::-;16907:24;;16998:13;;16979:16;;16972:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;16950:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;17078:13:0;;17059:16;;17052:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;17030:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;17146:13:0;;17133:10;;17126:17;;:4;:17;:::i;:::-;:33;;;;:::i;:::-;17110:12;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;16803:1153:0;;-1:-1:-1;16803:1153:0;;-1:-1:-1;;;;;17222:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;17271:1;17255:13;;:17;17222:50;17218:738;;;17324:3;17308:13;;17299:6;:22;;;;:::i;17218:738::-;-1:-1:-1;;;;;17616:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;17666:1;17651:12;;:16;17616:51;17613:343;;;17717:3;17702:12;;17693:6;:21;;;;:::i;:::-;:27;;;;:::i;:::-;17686:34;;17784:12;;17766:15;;17759:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;17737:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;17862:12:0;;17844:15;;17837:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;17815:18;;:59;;;;;;;:::i;:::-;;;;-1:-1:-1;;17928:12:0;;17916:9;;17909:16;;:4;:16;:::i;:::-;:31;;;;:::i;:::-;17893:12;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;17613:343:0;17987:8;;17984:93;;18019:42;18035:4;18049;18056;18019:15;:42::i;:::-;18101:14;18111:4;18101:14;;:::i;:::-;;;16670:1457;18137:33;18153:4;18159:2;18163:6;18137:15;:33::i;:::-;13648:4530;;;;13535:4643;;;:::o;19215:1598::-;19254:23;19280:24;19298:4;19280:9;:24::i;:::-;19254:50;;19315:25;19385:12;;19364:18;;19343;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;19315:82;-1:-1:-1;19408:12:0;19444:20;;;:46;;-1:-1:-1;19468:22:0;;19444:46;19441:60;;;19493:7;;;19215:1598::o;19441:60::-;19534:18;;19516:15;:36;19513:103;;;19586:18;;19568:36;;19513:103;19685:23;19770:1;19750:17;19729:18;;19711:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;19685:86;-1:-1:-1;19782:26:0;19811:33;19685:86;19811:15;:33;:::i;:::-;19782:62;-1:-1:-1;19883:21:0;19915:36;19782:62;19915:16;:36::i;:::-;19970:18;19991:41;20015:17;19991:21;:41;:::i;:::-;19970:62;;20043:23;20144:1;20125:18;;:20;;;;:::i;:::-;20104:42;;:17;:42;:::i;:::-;20082:18;;20069:31;;:10;:31;:::i;:::-;:78;;;;:::i;:::-;20043:104;;20158:17;20247:1;20228:18;;:20;;;;:::i;:::-;20207:42;;:17;:42;:::i;:::-;20191:12;;20178:25;;:10;:25;:::i;:::-;:72;;;;:::i;:::-;20158:92;-1:-1:-1;20269:23:0;20158:92;20295:28;20308:15;20295:10;:28;:::i;:::-;:40;;;;:::i;:::-;20367:1;20346:18;:22;;;20379:18;:22;;;20412:12;:16;;;20460:9;;20452:45;;20269:66;;-1:-1:-1;;;;;;20460:9:0;;20483;;20452:45;20367:1;20452:45;20483:9;20460;20452:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20529:15:0;;20521:57;;20439:58;;-1:-1:-1;;;;;;20529:15:0;;20558;;20521:57;;;;20558:15;20529;20521:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20508:70:0;;-1:-1:-1;;20599:19:0;;;;;:42;;;20640:1;20622:15;:19;20599:42;20596:210;;;20657:46;20670:15;20687;20657:12;:46::i;:::-;20775:18;;20723:71;;;22299:25:1;;;22355:2;22340:18;;22333:34;;;22383:18;;;22376:34;;;;20723:71:0;;;;;;22287:2:1;20723:71:0;;;20596:210;19243:1570;;;;;;;;;;19215:1598::o;12845:130::-;-1:-1:-1;;;;;12928:31:0;;;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;12928:39:0;;;;;;;;;;12845:130::o;3919:610::-;-1:-1:-1;;;;;4059:20:0;;4051:70;;;;-1:-1:-1;;;4051:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4140:23:0;;4132:71;;;;-1:-1:-1;;;4132:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4238:17:0;;4214:21;4238:17;;;;;;;;;;;4274:23;;;;4266:74;;;;-1:-1:-1;;;4266:74:0;;22623:2:1;4266:74:0;;;22605:21:1;22662:2;22642:18;;;22635:30;22701:34;22681:18;;;22674:62;-1:-1:-1;;;22752:18:1;;;22745:36;22798:19;;4266:74:0;22421:402:1;4266:74:0;-1:-1:-1;;;;;4376:17:0;;;:9;:17;;;;;;;;;;;4396:22;;;4376:42;;4440:20;;;;;;;;:30;;4412:6;;4376:9;4440:30;;4412:6;;4440:30;:::i;:::-;;;;;;;;4503:9;-1:-1:-1;;;;;4486:35:0;4495:6;-1:-1:-1;;;;;4486:35:0;;4514:6;4486:35;;;;3033:25:1;;3021:2;3006:18;;2887:177;4486:35:0;;;;;;;;4040:489;3919:610;;;:::o;18184:507::-;18274:16;;;18288:1;18274:16;;;;;;;;18250:21;;18274:16;;;;;;;;;;-1:-1:-1;18274:16:0;18250:40;;18319:4;18301;18306:1;18301:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18301:23:0;;;:7;;;;;;;;;;:23;;;;18345:9;;:16;;;-1:-1:-1;;;18345:16:0;;;;:9;;;;;:14;;:16;;;;;18301:7;;18345:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18335:4;18340:1;18335:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18335:26:0;;;:7;;;;;;;;;:26;18404:9;;18372:56;;18389:4;;18404:9;18416:11;18372:8;:56::i;:::-;18465:9;;:218;;-1:-1:-1;;;18465:218:0;;-1:-1:-1;;;;;18465:9:0;;;;:60;;:218;;18540:11;;18465:9;;18610:4;;18637;;18657:15;;18465:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18700:509;18880:9;;18848:56;;18865:4;;-1:-1:-1;;;;;18880:9:0;18892:11;18848:8;:56::i;:::-;18945:9;;19143:17;;18945:256;;-1:-1:-1;;;18945:256:0;;-1:-1:-1;;;;;18945:9:0;;;;:25;;18978:9;;18945:256;;19011:4;;19031:11;;18945:9;;;;19143:17;;19175:15;;18945:256;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;18700:509;;:::o;14:127:1:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:131;-1:-1:-1;;;;;221:31:1;;211:42;;201:70;;267:1;264;257:12;201:70;146:131;:::o;282:134::-;350:20;;379:31;350:20;379:31;:::i;421:1121::-;505:6;536:2;579;567:9;558:7;554:23;550:32;547:52;;;595:1;592;585:12;547:52;635:9;622:23;664:18;705:2;697:6;694:14;691:34;;;721:1;718;711:12;691:34;759:6;748:9;744:22;734:32;;804:7;797:4;793:2;789:13;785:27;775:55;;826:1;823;816:12;775:55;862:2;849:16;884:2;880;877:10;874:36;;;890:18;;:::i;:::-;936:2;933:1;929:10;968:2;962:9;1031:2;1027:7;1022:2;1018;1014:11;1010:25;1002:6;998:38;1086:6;1074:10;1071:22;1066:2;1054:10;1051:18;1048:46;1045:72;;;1097:18;;:::i;:::-;1133:2;1126:22;1183:18;;;1217:15;;;;-1:-1:-1;1259:11:1;;;1255:20;;;1287:19;;;1284:39;;;1319:1;1316;1309:12;1284:39;1343:11;;;;1363:148;1379:6;1374:3;1371:15;1363:148;;;1445:23;1464:3;1445:23;:::i;:::-;1433:36;;1396:12;;;;1489;;;;1363:148;;;1530:6;421:1121;-1:-1:-1;;;;;;;;421:1121:1:o;1547:597::-;1659:4;1688:2;1717;1706:9;1699:21;1749:6;1743:13;1792:6;1787:2;1776:9;1772:18;1765:34;1817:1;1827:140;1841:6;1838:1;1835:13;1827:140;;;1936:14;;;1932:23;;1926:30;1902:17;;;1921:2;1898:26;1891:66;1856:10;;1827:140;;;1985:6;1982:1;1979:13;1976:91;;;2055:1;2050:2;2041:6;2030:9;2026:22;2022:31;2015:42;1976:91;-1:-1:-1;2128:2:1;2107:15;-1:-1:-1;;2103:29:1;2088:45;;;;2135:2;2084:54;;1547:597;-1:-1:-1;;;1547:597:1:o;2375:315::-;2443:6;2451;2504:2;2492:9;2483:7;2479:23;2475:32;2472:52;;;2520:1;2517;2510:12;2472:52;2559:9;2546:23;2578:31;2603:5;2578:31;:::i;:::-;2628:5;2680:2;2665:18;;;;2652:32;;-1:-1:-1;;;2375:315:1:o;3069:456::-;3146:6;3154;3162;3215:2;3203:9;3194:7;3190:23;3186:32;3183:52;;;3231:1;3228;3221:12;3183:52;3270:9;3257:23;3289:31;3314:5;3289:31;:::i;:::-;3339:5;-1:-1:-1;3396:2:1;3381:18;;3368:32;3409:33;3368:32;3409:33;:::i;:::-;3069:456;;3461:7;;-1:-1:-1;;;3515:2:1;3500:18;;;;3487:32;;3069:456::o;3927:247::-;3986:6;4039:2;4027:9;4018:7;4014:23;4010:32;4007:52;;;4055:1;4052;4045:12;4007:52;4094:9;4081:23;4113:31;4138:5;4113:31;:::i;:::-;4163:5;3927:247;-1:-1:-1;;;3927:247:1:o;4179:248::-;4247:6;4255;4308:2;4296:9;4287:7;4283:23;4279:32;4276:52;;;4324:1;4321;4314:12;4276:52;-1:-1:-1;;4347:23:1;;;4417:2;4402:18;;;4389:32;;-1:-1:-1;4179:248:1:o;4432:180::-;4491:6;4544:2;4532:9;4523:7;4519:23;4515:32;4512:52;;;4560:1;4557;4550:12;4512:52;-1:-1:-1;4583:23:1;;4432:180;-1:-1:-1;4432:180:1:o;4617:118::-;4703:5;4696:13;4689:21;4682:5;4679:32;4669:60;;4725:1;4722;4715:12;4740:382;4805:6;4813;4866:2;4854:9;4845:7;4841:23;4837:32;4834:52;;;4882:1;4879;4872:12;4834:52;4921:9;4908:23;4940:31;4965:5;4940:31;:::i;:::-;4990:5;-1:-1:-1;5047:2:1;5032:18;;5019:32;5060:30;5019:32;5060:30;:::i;:::-;5109:7;5099:17;;;4740:382;;;;;:::o;5127:241::-;5183:6;5236:2;5224:9;5215:7;5211:23;5207:32;5204:52;;;5252:1;5249;5242:12;5204:52;5291:9;5278:23;5310:28;5332:5;5310:28;:::i;5373:529::-;5450:6;5458;5466;5519:2;5507:9;5498:7;5494:23;5490:32;5487:52;;;5535:1;5532;5525:12;5487:52;5574:9;5561:23;5593:31;5618:5;5593:31;:::i;:::-;5643:5;-1:-1:-1;5700:2:1;5685:18;;5672:32;5713:33;5672:32;5713:33;:::i;:::-;5765:7;-1:-1:-1;5824:2:1;5809:18;;5796:32;5837:33;5796:32;5837:33;:::i;:::-;5889:7;5879:17;;;5373:529;;;;;:::o;5907:388::-;5975:6;5983;6036:2;6024:9;6015:7;6011:23;6007:32;6004:52;;;6052:1;6049;6042:12;6004:52;6091:9;6078:23;6110:31;6135:5;6110:31;:::i;:::-;6160:5;-1:-1:-1;6217:2:1;6202:18;;6189:32;6230:33;6189:32;6230:33;:::i;6300:356::-;6502:2;6484:21;;;6521:18;;;6514:30;6580:34;6575:2;6560:18;;6553:62;6647:2;6632:18;;6300:356::o;6661:127::-;6722:10;6717:3;6713:20;6710:1;6703:31;6753:4;6750:1;6743:15;6777:4;6774:1;6767:15;7605:127;7666:10;7661:3;7657:20;7654:1;7647:31;7697:4;7694:1;7687:15;7721:4;7718:1;7711:15;7737:135;7776:3;-1:-1:-1;;7797:17:1;;7794:43;;;7817:18;;:::i;:::-;-1:-1:-1;7864:1:1;7853:13;;7737:135::o;7877:380::-;7956:1;7952:12;;;;7999;;;8020:61;;8074:4;8066:6;8062:17;8052:27;;8020:61;8127:2;8119:6;8116:14;8096:18;8093:38;8090:161;;;8173:10;8168:3;8164:20;8161:1;8154:31;8208:4;8205:1;8198:15;8236:4;8233:1;8226:15;8090:161;;7877:380;;;:::o;9083:128::-;9123:3;9154:1;9150:6;9147:1;9144:13;9141:39;;;9160:18;;:::i;:::-;-1:-1:-1;9196:9:1;;9083:128::o;10007:168::-;10047:7;10113:1;10109;10105:6;10101:14;10098:1;10095:21;10090:1;10083:9;10076:17;10072:45;10069:71;;;10120:18;;:::i;:::-;-1:-1:-1;10160:9:1;;10007:168::o;10180:217::-;10220:1;10246;10236:132;;10290:10;10285:3;10281:20;10278:1;10271:31;10325:4;10322:1;10315:15;10353:4;10350:1;10343:15;10236:132;-1:-1:-1;10382:9:1;;10180:217::o;11178:184::-;11248:6;11301:2;11289:9;11280:7;11276:23;11272:32;11269:52;;;11317:1;11314;11307:12;11269:52;-1:-1:-1;11340:16:1;;11178:184;-1:-1:-1;11178:184:1:o;11646:245::-;11713:6;11766:2;11754:9;11745:7;11741:23;11737:32;11734:52;;;11782:1;11779;11772:12;11734:52;11814:9;11808:16;11833:28;11855:5;11833:28;:::i;13893:251::-;13963:6;14016:2;14004:9;13995:7;13991:23;13987:32;13984:52;;;14032:1;14029;14022:12;13984:52;14064:9;14058:16;14083:31;14108:5;14083:31;:::i;15676:607::-;-1:-1:-1;;;;;16035:15:1;;;16017:34;;16082:2;16067:18;;16060:34;;;;16125:2;16110:18;;16103:34;;;;16168:2;16153:18;;16146:34;;;;16217:15;;;16211:3;16196:19;;16189:44;15997:3;16249:19;;16242:35;;;;15966:3;15951:19;;15676:607::o;16288:306::-;16376:6;16384;16392;16445:2;16433:9;16424:7;16420:23;16416:32;16413:52;;;16461:1;16458;16451:12;16413:52;16490:9;16484:16;16474:26;;16540:2;16529:9;16525:18;16519:25;16509:35;;16584:2;16573:9;16569:18;16563:25;16553:35;;16288:306;;;;;:::o;18855:401::-;19057:2;19039:21;;;19096:2;19076:18;;;19069:30;19135:34;19130:2;19115:18;;19108:62;-1:-1:-1;;;19201:2:1;19186:18;;19179:35;19246:3;19231:19;;18855:401::o;19261:399::-;19463:2;19445:21;;;19502:2;19482:18;;;19475:30;19541:34;19536:2;19521:18;;19514:62;-1:-1:-1;;;19607:2:1;19592:18;;19585:33;19650:3;19635:19;;19261:399::o;20368:125::-;20408:4;20436:1;20433;20430:8;20427:34;;;20441:18;;:::i;:::-;-1:-1:-1;20478:9:1;;20368:125::o;22828:980::-;23090:4;23138:3;23127:9;23123:19;23169:6;23158:9;23151:25;23195:2;23233:6;23228:2;23217:9;23213:18;23206:34;23276:3;23271:2;23260:9;23256:18;23249:31;23300:6;23335;23329:13;23366:6;23358;23351:22;23404:3;23393:9;23389:19;23382:26;;23443:2;23435:6;23431:15;23417:29;;23464:1;23474:195;23488:6;23485:1;23482:13;23474:195;;;23553:13;;-1:-1:-1;;;;;23549:39:1;23537:52;;23644:15;;;;23609:12;;;;23585:1;23503:9;23474:195;;;-1:-1:-1;;;;;;;23725:32:1;;;;23720:2;23705:18;;23698:60;-1:-1:-1;;;23789:3:1;23774:19;23767:35;23686:3;22828:980;-1:-1:-1;;;22828:980:1:o

Swarm Source

ipfs://c60d17f702e100d8b5b9abd55ca0ce1716ecfe70a2db3ac8787badf348a2fcf9

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.