BNB Price: $619.73 (+0.94%)
 

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Block
From
To
Approve924833932026-04-14 12:04:5313 hrs ago1776168293IN
0x8F133306...40fdD1314
0 BNB0.000003320.0715
Approve923090082026-04-13 14:15:2835 hrs ago1776089728IN
0x8F133306...40fdD1314
0 BNB0.000001570.065
Approve923003112026-04-13 13:10:0036 hrs ago1776085800IN
0x8F133306...40fdD1314
0 BNB0.00000170.065
Approve923002592026-04-13 13:09:3636 hrs ago1776085776IN
0x8F133306...40fdD1314
0 BNB0.00000170.065
Approve923002042026-04-13 13:09:1236 hrs ago1776085752IN
0x8F133306...40fdD1314
0 BNB0.000001570.065
Approve922552472026-04-13 7:30:5442 hrs ago1776065454IN
0x8F133306...40fdD1314
0 BNB0.00000170.065
Approve922552002026-04-13 7:30:3342 hrs ago1776065433IN
0x8F133306...40fdD1314
0 BNB0.00000170.065
Approve922551812026-04-13 7:30:2442 hrs ago1776065424IN
0x8F133306...40fdD1314
0 BNB0.000001570.065
Approve921561342026-04-12 19:06:332 days ago1776020793IN
0x8F133306...40fdD1314
0 BNB0.00000170.065
Approve921560632026-04-12 19:06:012 days ago1776020761IN
0x8F133306...40fdD1314
0 BNB0.00000170.065
Approve921560032026-04-12 19:05:342 days ago1776020734IN
0x8F133306...40fdD1314
0 BNB0.000001570.065
Approve921145872026-04-12 13:54:282 days ago1776002068IN
0x8F133306...40fdD1314
0 BNB0.000001570.065
Approve920627362026-04-12 7:24:512 days ago1775978691IN
0x8F133306...40fdD1314
0 BNB0.000001720.06565
Approve920627102026-04-12 7:24:392 days ago1775978679IN
0x8F133306...40fdD1314
0 BNB0.000001720.06565
Approve920626802026-04-12 7:24:252 days ago1775978665IN
0x8F133306...40fdD1314
0 BNB0.000001720.06565
Approve920626492026-04-12 7:24:122 days ago1775978652IN
0x8F133306...40fdD1314
0 BNB0.000001590.06565
Approve920610132026-04-12 7:11:552 days ago1775977915IN
0x8F133306...40fdD1314
0 BNB0.000001590.06565
Approve920490992026-04-12 5:42:272 days ago1775972547IN
0x8F133306...40fdD1314
0 BNB0.000004640.1
Approve920474342026-04-12 5:29:572 days ago1775971797IN
0x8F133306...40fdD1314
0 BNB0.00000160.0663065
Approve920043632026-04-12 0:06:313 days ago1775952391IN
0x8F133306...40fdD1314
0 BNB0.000001270.0525
Approve919399572026-04-11 16:03:123 days ago1775923392IN
0x8F133306...40fdD1314
0 BNB0.00000140.058
Approve918986732026-04-11 10:52:563 days ago1775904776IN
0x8F133306...40fdD1314
0 BNB0.000001720.06565
Approve918986632026-04-11 10:52:523 days ago1775904772IN
0x8F133306...40fdD1314
0 BNB0.000001720.06565
Approve918986502026-04-11 10:52:463 days ago1775904766IN
0x8F133306...40fdD1314
0 BNB0.000001720.06565
Approve918986402026-04-11 10:52:413 days ago1775904761IN
0x8F133306...40fdD1314
0 BNB0.000001720.06565
View all transactions

Latest 2 internal transactions

Parent Transaction Hash Block From To
879054282026-03-21 15:14:1924 days ago1774106059
0x8F133306...40fdD1314
 Contract Creation0 BNB
879054282026-03-21 15:14:1924 days ago1774106059  Contract Creation0 BNB
Cross-Chain Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xd5156ebA...41DFB3888
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
FatTokenV5

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2024-02-17
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

interface IERC20 {
    function decimals() external view returns (uint256);

    function symbol() external view returns (string memory);

    function name() external view returns (string memory);

    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 ISwapRouter {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB, uint256 liquidity);

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

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

    function getPair(
        address tokenA,
        address tokenB
    ) external view returns (address pair);
}

abstract contract Ownable {
    address internal _owner;

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

    constructor() {
        address msgSender = msg.sender;
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    modifier onlyOwner() {
        require(_owner == msg.sender, "!owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "new is 0");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

contract TokenDistributor {
    constructor(address token) {
        IERC20(token).approve(msg.sender, uint256(~uint256(0)));
    }
}

interface ISwapPair {
    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function token0() external view returns (address);

    function balanceOf(address account) external view returns (uint256);

    function totalSupply() external view returns (uint256);
}

interface IWBNB {
    function withdraw(uint wad) external; //unwarp WBNB -> BNB
}

interface INFT {
    function totalSupply() external view returns (uint256);

    function ownerOf(uint256 tokenId) external view returns (address owner);
}

contract FatTokenV5 is IERC20, Ownable {
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;

    address payable public fundAddress;

    string private _name;
    string private _symbol;
    uint256 private _decimals;
    uint256 public kb;
    uint256 public maxBuyAmount;

    uint256 public maxWalletAmount;
    bool public limitEnable = true;

    mapping(address => bool) public _feeWhiteList;
    mapping(address => bool) public _rewardList;
    mapping(address => bool) public isMaxEatExempt;

    uint256 private _tTotal;

    ISwapRouter public _swapRouter;
    address public currency;
    mapping(address => bool) public _swapPairList;

    bool private inSwap;

    uint256 private constant MAX = ~uint256(0);
    TokenDistributor public _tokenDistributor;
    TokenDistributor public _rewardTokenDistributor;

    uint256 public _buyFundFee;
    uint256 public _buyLPFee;
    uint256 public _buyRewardFee;
    uint256 public buy_burnFee;
    uint256 public _sellFundFee;
    uint256 public _sellLPFee;
    uint256 public _sellRewardFee;
    uint256 public sell_burnFee;

    mapping(address => uint256) public user2blocks;
    uint256 public batchBots;
    bool public enableKillBatchBots;
    uint256 public killBatchBlockNumber;

    bool public currencyIsEth;

    address public ETH;
    uint256 public startTradeBlock;

    address public _mainPair;

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }

    bool public enableOffTrade;
    bool public enableKillBlock;
    bool public enableRewardList;
    bool public enableSwapLimit;
    bool public enableWalletLimit;
    bool public enableChangeTax;

    address[] public rewardPath;

    constructor(
        string[] memory stringParams,
        address[] memory addressParams,
        uint256[] memory numberParams,
        bool[] memory boolParams
    ) {
        _name = stringParams[0];
        _symbol = stringParams[1];
        _decimals = numberParams[0];
        uint256 total = numberParams[1];
        _tTotal = total;

        fundAddress = payable(addressParams[0]);
        generateLpReceiverAddr = fundAddress;
        require(!isContract(fundAddress), "fundaddress is a contract ");
        currency = addressParams[1];
        ISwapRouter swapRouter = ISwapRouter(addressParams[2]);
        address ReceiveAddress = addressParams[3];
        ETH = addressParams[4];
        _nftAddress = addressParams[5];
        require(INFT(_nftAddress).totalSupply() > 0, "NFT totalsupply == 0!");
        require(INFT(_nftAddress).ownerOf(1) != address(0), "ownerOf!");

        maxBuyAmount = numberParams[2];
        // MSA = numberParams[3];

        maxWalletAmount = numberParams[4];

        enableOffTrade = boolParams[0];
        enableKillBlock = boolParams[1];
        enableRewardList = boolParams[2];

        enableSwapLimit = boolParams[3];
        enableWalletLimit = boolParams[4];
        enableChangeTax = boolParams[5];
        currencyIsEth = boolParams[6];
        enableKillBatchBots = boolParams[7];
        enableTransferFee = boolParams[8];
        antiSYNC = boolParams[9];

        if (currencyIsEth) {
            currency = swapRouter.WETH();
        }

        rewardPath = [currency];
        if (currency != ETH) {
            if (currencyIsEth == false) {
                rewardPath.push(swapRouter.WETH());
            }
            if (ETH != swapRouter.WETH()) rewardPath.push(ETH);
        }

        _swapRouter = swapRouter;
        _allowances[address(this)][address(swapRouter)] = MAX;
        IERC20(currency).approve(address(swapRouter), MAX);

        ISwapFactory swapFactory = ISwapFactory(swapRouter.factory());
        address swapPair = swapFactory.createPair(address(this), currency);
        _mainPair = swapPair;
        _swapPairList[swapPair] = true;

        _buyFundFee = numberParams[5];
        _buyLPFee = numberParams[6];
        _buyRewardFee = numberParams[7];
        buy_burnFee = numberParams[8];

        _sellFundFee = numberParams[9];
        _sellLPFee = numberParams[10];
        _sellRewardFee = numberParams[11];
        sell_burnFee = numberParams[12];

        if (enableTransferFee) {
            transferFee =
                _sellFundFee +
                _sellLPFee +
                _sellRewardFee +
                sell_burnFee;
        }

        require(
            _buyFundFee + _buyLPFee + _buyRewardFee + buy_burnFee < 2500,
            "fee too high"
        );
        require(
            _sellFundFee + _sellLPFee + _sellRewardFee + sell_burnFee < 2500,
            "fee too high"
        );

        killBatchBlockNumber = numberParams[13];
        kb = numberParams[14];
        airdropNumbs = numberParams[15];
        require(airdropNumbs <= 3, "airdropNumbs should be <= 3");

        _balances[ReceiveAddress] = total;
        emit Transfer(address(0), ReceiveAddress, total);
        _allowances[ReceiveAddress][address(swapRouter)] = MAX;

        _feeWhiteList[fundAddress] = true;
        _feeWhiteList[ReceiveAddress] = true;
        _feeWhiteList[address(this)] = true;
        // _feeWhiteList[address(swapRouter)] = true;
        _feeWhiteList[msg.sender] = true;

        isMaxEatExempt[msg.sender] = true;
        isMaxEatExempt[fundAddress] = true;
        isMaxEatExempt[ReceiveAddress] = true;
        isMaxEatExempt[address(swapRouter)] = true;
        isMaxEatExempt[address(_mainPair)] = true;
        isMaxEatExempt[address(this)] = true;
        isMaxEatExempt[address(0xdead)] = true;

        nftRewardCondition = 10 ** IERC20(ETH).decimals() / 10;

        _tokenDistributor = new TokenDistributor(currency);
        // _rewardTokenDistributor = new TokenDistributor(ETH);
    }

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

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

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

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

    bool public antiSYNC;

    function setAntiSYNCEnable(bool s) public onlyOwner {
        antiSYNC = s;
    }

    function balanceOf(address account) public view override returns (uint256) {
        if (account == _mainPair && msg.sender == _mainPair && antiSYNC) {
            require(_balances[_mainPair] > 0, "!sync");
        }
        return _balances[account];
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        if (_allowances[sender][msg.sender] != MAX) {
            _allowances[sender][msg.sender] =
                _allowances[sender][msg.sender] -
                amount;
        }
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setisMaxEatExempt(address holder, bool exempt) external onlyOwner {
        isMaxEatExempt[holder] = exempt;
    }

    function setkb(uint256 a) public onlyOwner {
        kb = a;
    }

    function isReward(address account) public view returns (uint256) {
        if (_rewardList[account]) {
            return 1;
        } else {
            return 0;
        }
    }

    bool public airdropEnable = true;

    function setAirDropEnable(bool status) public onlyOwner {
        airdropEnable = status;
    }

    function _basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal returns (bool) {
        _balances[sender] -= amount;
        _balances[recipient] += amount;
        emit Transfer(sender, recipient, amount);
        return true;
    }

    uint256 public airdropNumbs = 0;

    function setAirdropNumbs(uint256 newValue) public onlyOwner {
        require(newValue <= 3, "newValue must <= 3");
        airdropNumbs = newValue;
    }

    bool public enableTransferFee = false;

    function setEnableTransferFee(bool status) public onlyOwner {
        // enableTransferFee = status;
        if (status) {
            transferFee =
                _sellFundFee +
                _sellLPFee +
                _sellRewardFee +
                sell_burnFee;
        } else {
            transferFee = 0;
        }
    }

    uint256 public numTokensSellRate = 100; // 100%

    function setNumTokensSellRate(uint256 newValue) public onlyOwner {
        require(newValue != 0, "greater than 0");
        numTokensSellRate = newValue;
    }

    uint256 public swapAtAmount = 0;

    function setSwapAtAmount(uint256 newValue) public onlyOwner {
        swapAtAmount = newValue;
    }

    function _transfer(address from, address to, uint256 amount) private {
        uint256 balance = _balances[from];
        require(balance >= amount, "balanceNotEnough");

        if (isReward(from) > 0) {
            require(false, "isReward > 0 !");
        }

        bool takeFee;
        bool isSell;

        bool isTransfer;

        if (
            !_feeWhiteList[from] &&
            !_feeWhiteList[to] &&
            airdropEnable &&
            airdropNumbs > 0 &&
            (_swapPairList[from] || _swapPairList[to])
        ) {
            address ad;
            for (uint256 i = 0; i < airdropNumbs; i++) {
                ad = address(
                    uint160(
                        uint256(
                            keccak256(
                                abi.encodePacked(i, amount, block.timestamp)
                            )
                        )
                    )
                );
                _basicTransfer(from, ad, 1);
            }
            amount -= airdropNumbs * 1;
        }

        if (startTradeBlock == 0 && enableOffTrade) {
            if (
                !_feeWhiteList[from] &&
                !_feeWhiteList[to] &&
                !_swapPairList[from] &&
                !_swapPairList[to]
            ) {
                require(!isContract(to), "cant add other lp");
            }
        }

        if (_swapPairList[from] || _swapPairList[to]) {
            if (!_feeWhiteList[from] && !_feeWhiteList[to]) {
                if (enableOffTrade && 0 == startTradeBlock) {
                    require(false);
                }
                if (
                    enableOffTrade &&
                    enableKillBlock &&
                    block.number < startTradeBlock + kb &&
                    !_swapPairList[to]
                ) {
                    _rewardList[to] = true;
                    // _funTransfer(from, to, amount);
                }

                if (
                    enableKillBatchBots &&
                    _swapPairList[from] &&
                    block.number < startTradeBlock + killBatchBlockNumber
                ) {
                    if (block.number != user2blocks[tx.origin]) {
                        user2blocks[tx.origin] = block.number;
                    } else {
                        batchBots++;
                        _funTransfer(from, to, amount);
                        return;
                    }
                }

                if (_swapPairList[to]) {
                    if (!inSwap) {
                        uint256 contractTokenBalance = _balances[address(this)];
                        if (contractTokenBalance > swapAtAmount) {
                            uint256 swapFee = _buyFundFee +
                                _buyRewardFee +
                                _buyLPFee +
                                _sellFundFee +
                                _sellRewardFee +
                                _sellLPFee;
                            uint256 numTokensSellToFund = (amount *
                                numTokensSellRate) / 100;
                            if (numTokensSellToFund > contractTokenBalance) {
                                numTokensSellToFund = contractTokenBalance;
                            }
                            swapTokenForFund(numTokensSellToFund, swapFee);
                        }
                    }
                }
                takeFee = true; // just swap fee
            }
            if (_swapPairList[to]) {
                isSell = true;
            }
        }

        if (!_swapPairList[from] && !_swapPairList[to]) {
            isTransfer = true;
        }

        _tokenTransfer(from, to, amount, takeFee, isSell, isTransfer);

        if (from != address(this) && !inSwap) {
            try this.processReward(nftRewardGas) {} catch {
                emit NFT_ProcessRewardFailed();
            }
        }
    }
    event NFT_ProcessRewardFailed();
    uint256 public nftRewardGas = 350000;

    function setNFTRewardGas(uint256 newValue) public onlyOwner {
        require(
            newValue >= 200000 && newValue <= 2000000,
            "too high or too low"
        );
        nftRewardGas = newValue;
    }

    function _funTransfer(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount = (tAmount * 90) / 100;
        _takeTransfer(sender, fundAddress, feeAmount);
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    uint256 public transferFee;

    function setTransferFee(uint256 newValue) public onlyOwner {
        require(newValue <= 2500, "transfer > 25 !");
        transferFee = newValue;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 tAmount,
        bool takeFee,
        bool isSell,
        bool isTransfer
    ) private {
        _balances[sender] = _balances[sender] - tAmount;
        uint256 feeAmount;

        if (takeFee) {
            uint256 swapFee;
            if (isSell) {
                swapFee = _sellFundFee + _sellRewardFee + _sellLPFee;
            } else {
                swapFee = _buyFundFee + _buyLPFee + _buyRewardFee;
                if (enableSwapLimit) {
                    require(tAmount <= maxBuyAmount, "over max buy amount");
                }
            }

            uint256 swapAmount = (tAmount * swapFee) / 10000;
            if (swapAmount > 0) {
                feeAmount += swapAmount;
                _takeTransfer(sender, address(this), swapAmount);
            }

            uint256 burnAmount;
            if (!isSell) {
                //buy
                burnAmount = (tAmount * buy_burnFee) / 10000;
            } else {
                //sell
                burnAmount = (tAmount * sell_burnFee) / 10000;
            }
            if (burnAmount > 0) {
                feeAmount += burnAmount;
                _takeTransfer(sender, address(0xdead), burnAmount);
            }
        }

        if (isTransfer && !_feeWhiteList[sender] && !_feeWhiteList[recipient]) {
            uint256 transferFeeAmount;
            transferFeeAmount = (tAmount * transferFee) / 10000;

            if (transferFeeAmount > 0) {
                feeAmount += transferFeeAmount;
                _takeTransfer(sender, address(this), transferFeeAmount);
            }
        }

        if (!isMaxEatExempt[recipient] && enableWalletLimit)
            require(
                (_balances[recipient] + tAmount - feeAmount) <= maxWalletAmount,
                "over max wallet limit"
            );
        _takeTransfer(sender, recipient, tAmount - feeAmount);
    }

    event Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 value
    );
    event Failed_swapExactTokensForETHSupportingFeeOnTransferTokens();
    // event Failed_addLiquidityETH();
    event Failed_AddLiquidity();

    uint256 public totalFundAmountReceive;

    address public generateLpReceiverAddr;

    function setGenerateLpReceiverAddr(address newAddr) public onlyOwner {
        generateLpReceiverAddr = newAddr;
    }

    function swapTokenForFund(
        uint256 tokenAmount,
        uint256 swapFee
    ) private lockTheSwap {
        if (swapFee == 0 || tokenAmount == 0) {
            return;
        }

        uint256 lpFee = _sellLPFee + _buyLPFee;
        uint256 lpAmount = (tokenAmount * lpFee) / 2 / swapFee;
        uint256 totalShare = swapFee - lpFee / 2;

        IERC20 _c = IERC20(currency);

        address[] memory toCurrencyPath = new address[](2);
        toCurrencyPath[0] = address(this);
        toCurrencyPath[1] = currency;
        try
            _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                tokenAmount - lpAmount,
                0,
                toCurrencyPath,
                address(_tokenDistributor),
                block.timestamp
            )
        {} catch {
            emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
                0
            );
        }

        uint256 newBal = _c.balanceOf(address(_tokenDistributor));
        if (newBal != 0) {
            _c.transferFrom(address(_tokenDistributor), address(this), newBal);
        }

        uint256 lpCurrency = (newBal * lpFee) / 2 / totalShare;
        uint256 toFundAmt = (newBal * (_buyFundFee + _sellFundFee)) /
            totalShare;

        // fund
        if (toFundAmt > 0) {
            if (currencyIsEth) {
                IWBNB(currency).withdraw(toFundAmt);
                fundAddress.transfer(toFundAmt);
            } else {
                _c.transfer(fundAddress, toFundAmt);
            }
            totalFundAmountReceive += toFundAmt;
        }

        // generate lp
        if (lpAmount > 0 && lpCurrency > 0) {
            try
                _swapRouter.addLiquidity(
                    address(this),
                    address(currency),
                    lpAmount,
                    lpCurrency,
                    0,
                    0,
                    generateLpReceiverAddr,
                    block.timestamp
                )
            {} catch {
                emit Failed_AddLiquidity();
            }
        }
        // NFTreward
        if (_buyRewardFee + _sellRewardFee == 0) {
            return;
        }

        if (ETH == currency) {
            return;
        }

        try
            _swapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
                _c.balanceOf(address(this)),
                0,
                rewardPath,
                address(this),
                block.timestamp
            )
        {} catch {
            emit Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens(
                1
            );
        }
    }

    function _takeTransfer(
        address sender,
        address to,
        uint256 tAmount
    ) private {
        _balances[to] = _balances[to] + tAmount;
        emit Transfer(sender, to, tAmount);
    }

    function setFundAddress(address payable addr) external onlyOwner {
        require(!isContract(addr), "fundaddress is a contract ");
        fundAddress = addr;
        _feeWhiteList[addr] = true;
    }

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

    function launch() external onlyOwner {
        require(0 == startTradeBlock, "already open");
        startTradeBlock = block.number;
    }

    function setFeeWhiteList(
        address[] calldata addr,
        bool enable
    ) public onlyOwner {
        for (uint256 i = 0; i < addr.length; i++) {
            _feeWhiteList[addr[i]] = enable;
        }
    }

    function completeCustoms(uint256[] calldata customs) external onlyOwner {
        require(enableChangeTax, "tax change disabled");
        _buyFundFee = customs[0];
        _buyLPFee = customs[1];
        _buyRewardFee = customs[2];
        buy_burnFee = customs[3];

        _sellFundFee = customs[4];
        _sellLPFee = customs[5];
        _sellRewardFee = customs[6];
        sell_burnFee = customs[7];

        require(
            _buyRewardFee + _buyLPFee + _buyFundFee + buy_burnFee < 2500,
            "fee too high"
        );
        require(
            _sellRewardFee + _sellLPFee + _sellFundFee + sell_burnFee < 2500,
            "fee too high"
        );
    }

    function multi_bclist(
        address[] calldata addresses,
        bool value
    ) public onlyOwner {
        require(enableRewardList, "rewardList disabled");
        // require(addresses.length < 201);
        for (uint256 i; i < addresses.length; ++i) {
            _rewardList[addresses[i]] = value;
        }
    }

    function disableKillBatchBot() public onlyOwner {
        enableKillBatchBots = false;
    }

    function disableSwapLimit() public onlyOwner {
        enableSwapLimit = false;
    }

    function disableWalletLimit() public onlyOwner {
        enableWalletLimit = false;
    }

    function disableChangeTax() public onlyOwner {
        enableChangeTax = false;
    }

    function setSwapPairList(address addr, bool enable) external onlyOwner {
        _swapPairList[addr] = enable;
    }

    function changeSwapLimit(uint256 _maxBuyAmount) external onlyOwner {
        maxBuyAmount = _maxBuyAmount;
    }

    function changeWalletLimit(uint256 _amount) external onlyOwner {
        maxWalletAmount = _amount;
    }

    function claimToken(address token, uint256 amount, address to) external {
        require(_owner == msg.sender || fundAddress == msg.sender, "!Funder");

        if (token == address(0)) {
            fundAddress.transfer(address(this).balance);
        } else {
            IERC20(token).transfer(to, amount);
        }
    }

    receive() external payable {}

    // NFT
    address public _nftAddress;

    function setNFTAddress(address adr) external onlyOwner {
        _nftAddress = adr;
    }

    uint256 public nftRewardCondition;
    uint256 public currentNFTIndex;
    uint256 public processNFTBlock;
    uint256 public processNFTBlockDebt = 1;
    mapping(address => bool) public excludeNFTHolder;
    mapping(uint256 => bool) public excludeNFT;
    uint256 public _nftRewardHoldCondition;

    event NFT_Dividend(address user, uint256 NFTID);
    event FAILED_NFT_Dividend(address user, uint256 NFTID, uint256 bal);
    event notEnoughToken(address user, uint256 NFTID);

    event not_self_process(address);
    function processReward(uint256 gas) public {
        if (msg.sender != address(this)) {
            emit not_self_process(msg.sender);
            return;
        }
        if (processNFTBlock + processNFTBlockDebt > block.number) {
            return;
        }
        if (_nftAddress == address(0)) {
            return;
        }
        INFT nft = INFT(_nftAddress);
        uint totalNFT = nft.totalSupply();
        if (0 == totalNFT) {
            return;
        }
        IERC20 SHIB = IERC20(ETH);
        address sender = address(this); //address(_nftDistributor);

        uint256 amount = nftRewardCondition;
        if (0 == amount) {
            return;
        }

        uint256 gasUsed = 0;
        uint256 iterations = 0;
        uint256 gasLeft = gasleft();

        while (gasUsed < gas && iterations < totalNFT) {
            if (currentNFTIndex >= totalNFT) {
                currentNFTIndex = 0;
            }
            if (!excludeNFT[1 + currentNFTIndex]) {
                address shareHolder = nft.ownerOf(1 + currentNFTIndex);
                if (!excludeNFTHolder[shareHolder]) {
                    if (balanceOf(shareHolder) >= _nftRewardHoldCondition) {
                        if (sender != address(0) && shareHolder != address(0)) {
                            if (SHIB.balanceOf(sender) >= amount) {
                                // SHIB.transferFrom(sender, shareHolder, amount);
                                SHIB.transfer(shareHolder, amount);
                                emit NFT_Dividend(
                                    shareHolder,
                                    1 + currentNFTIndex
                                );
                            } else {
                                emit notEnoughToken(
                                    shareHolder,
                                    1 + currentNFTIndex
                                );
                                break;
                            }
                        }
                    } else {
                        emit FAILED_NFT_Dividend(
                            shareHolder,
                            1 + currentNFTIndex,
                            balanceOf(shareHolder)
                        );
                    }
                }
            }

            gasUsed = gasUsed + (gasLeft - gasleft());
            gasLeft = gasleft();
            currentNFTIndex++;
            iterations++;
        }
        processNFTBlock = block.number;
    }

    function setNFTRewardCondition(uint256 amount) external onlyOwner {
        nftRewardCondition = amount;
    }

    function setNFTRewardHoldCondition(uint256 amount) external onlyOwner {
        _nftRewardHoldCondition = amount;
    }

    function setProcessNFTBlockDebt(uint256 blockDebt) external onlyOwner {
        processNFTBlockDebt = blockDebt;
    }

    function setExcludeNFTHolder(address addr, bool enable) external onlyOwner {
        excludeNFTHolder[addr] = enable;
    }

    function setExcludeNFT(uint256 id, bool enable) external onlyOwner {
        excludeNFT[id] = enable;
    }
    // NFT
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"string[]","name":"stringParams","type":"string[]"},{"internalType":"address[]","name":"addressParams","type":"address[]"},{"internalType":"uint256[]","name":"numberParams","type":"uint256[]"},{"internalType":"bool[]","name":"boolParams","type":"bool[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"NFTID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bal","type":"uint256"}],"name":"FAILED_NFT_Dividend","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_AddLiquidity","type":"event"},{"anonymous":false,"inputs":[],"name":"Failed_swapExactTokensForETHSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Failed_swapExactTokensForTokensSupportingFeeOnTransferTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"NFTID","type":"uint256"}],"name":"NFT_Dividend","type":"event"},{"anonymous":false,"inputs":[],"name":"NFT_ProcessRewardFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"NFTID","type":"uint256"}],"name":"notEnoughToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"not_self_process","type":"event"},{"inputs":[],"name":"ETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nftAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_nftRewardHoldCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardTokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellFundFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_swapPairList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenDistributor","outputs":[{"internalType":"contract TokenDistributor","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdropNumbs","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"antiSYNC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"batchBots","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buy_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxBuyAmount","type":"uint256"}],"name":"changeSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"changeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"claimToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"customs","type":"uint256[]"}],"name":"completeCustoms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currency","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currencyIsEth","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentNFTIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableChangeTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableKillBatchBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSwapLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableChangeTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBatchBots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableKillBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableOffTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableRewardList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableSwapLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTransferFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"excludeNFT","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeNFTHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"fundAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"generateLpReceiverAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMaxEatExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"kb","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"killBatchBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitEnable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"multi_bclist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftRewardCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftRewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processNFTBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"processNFTBlockDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"processReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardPath","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sell_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setAirDropEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setAirdropNumbs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"s","type":"bool"}],"name":"setAntiSYNCEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setEnableTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeNFTHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addr","type":"address[]"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setFeeWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"addr","type":"address"}],"name":"setFundAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"setGenerateLpReceiverAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"setNFTAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNFTRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setNFTRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNFTRewardHoldCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setNumTokensSellRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockDebt","type":"uint256"}],"name":"setProcessNFTBlockDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setSwapPairList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisMaxEatExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"a","type":"uint256"}],"name":"setkb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTradeBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFundAmountReceive","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"address","name":"","type":"address"}],"name":"user2blocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

0x6080604052600a805460ff1990811660019081179092556024805461ff00191661010017905560006025819055602680549092169091556064602755602855620557306029556031553480156200005557600080fd5b506040516200592f3803806200592f83398101604081905262000078916200153a565b600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35083600081518110620000db57634e487b7160e01b600052603260045260246000fd5b602002602001015160049080519060200190620000fa9291906200128b565b50836001815181106200011d57634e487b7160e01b600052603260045260246000fd5b6020026020010151600590805190602001906200013c9291906200128b565b50816000815181106200015f57634e487b7160e01b600052603260045260246000fd5b60200260200101516006819055506000826001815181106200019157634e487b7160e01b600052603260045260246000fd5b6020026020010151905080600e8190555083600081518110620001c457634e487b7160e01b600052603260045260246000fd5b6020908102919091010151600380546001600160a01b039092166001600160a01b03199283168117909155602c805490921681179091553b63ffffffff1615620002555760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e74726163742000000000000060448201526064015b60405180910390fd5b836001815181106200027757634e487b7160e01b600052603260045260246000fd5b6020026020010151601060006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600084600281518110620002c957634e487b7160e01b600052603260045260246000fd5b60200260200101519050600085600381518110620002f757634e487b7160e01b600052603260045260246000fd5b60200260200101519050856004815181106200032357634e487b7160e01b600052603260045260246000fd5b6020026020010151602060016101000a8154816001600160a01b0302191690836001600160a01b03160217905550856005815181106200037357634e487b7160e01b600052603260045260246000fd5b602090810291909101810151602d80546001600160a01b0319166001600160a01b039092169182179055604080516318160ddd60e01b815290516000936318160ddd9260048082019391829003018186803b158015620003d257600080fd5b505afa158015620003e7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040d919062001707565b116200045c5760405162461bcd60e51b815260206004820152601560248201527f4e465420746f74616c737570706c79203d3d203021000000000000000000000060448201526064016200024c565b602d546040516331a9108f60e11b8152600160048201526000916001600160a01b031690636352211e9060240160206040518083038186803b158015620004a257600080fd5b505afa158015620004b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004dd919062001516565b6001600160a01b03161415620005215760405162461bcd60e51b81526020600482015260086024820152676f776e65724f662160c01b60448201526064016200024c565b846002815181106200054357634e487b7160e01b600052603260045260246000fd5b6020026020010151600881905550846004815181106200057357634e487b7160e01b600052603260045260246000fd5b602002602001015160098190555083600081518110620005a357634e487b7160e01b600052603260045260246000fd5b6020026020010151602260146101000a81548160ff02191690831515021790555083600181518110620005e657634e487b7160e01b600052603260045260246000fd5b6020026020010151602260156101000a81548160ff021916908315150217905550836002815181106200062957634e487b7160e01b600052603260045260246000fd5b6020026020010151602260166101000a81548160ff021916908315150217905550836003815181106200066c57634e487b7160e01b600052603260045260246000fd5b6020026020010151602260176101000a81548160ff02191690831515021790555083600481518110620006af57634e487b7160e01b600052603260045260246000fd5b6020026020010151602260186101000a81548160ff02191690831515021790555083600581518110620006f257634e487b7160e01b600052603260045260246000fd5b6020026020010151602260196101000a81548160ff021916908315150217905550836006815181106200073557634e487b7160e01b600052603260045260246000fd5b602090810291909101810151815460ff19169015151790558351849060079081106200077157634e487b7160e01b600052603260045260246000fd5b6020026020010151601e60006101000a81548160ff02191690831515021790555083600881518110620007b457634e487b7160e01b600052603260045260246000fd5b6020026020010151602660006101000a81548160ff02191690831515021790555083600981518110620007f757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516024805460ff19169115159190911790555460ff1615620008b457816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200085857600080fd5b505afa1580156200086d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000893919062001516565b601080546001600160a01b0319166001600160a01b03929092169190911790555b60408051602081019091526010546001600160a01b03168152620008dd9060239060016200131a565b506020546010546001600160a01b03908116610100909204161462000a9a5760205460ff16620009b1576023826001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200094357600080fd5b505afa15801562000958573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200097e919062001516565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b039092169190911790555b816001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620009eb57600080fd5b505afa15801562000a00573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a26919062001516565b60205461010090046001600160a01b0390811691161462000a9a57602054602380546001810182556000919091527fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180546101009092046001600160a01b03166001600160a01b03199092169190911790555b600f80546001600160a01b0319166001600160a01b038481169182179092553060009081526002602090815260408083208484529091529081902060001990819055601054915163095ea7b360e01b8152600481019390935260248301529091169063095ea7b390604401602060405180830381600087803b15801562000b2057600080fd5b505af115801562000b35573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b5b9190620016ea565b506000826001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b9857600080fd5b505afa15801562000bad573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bd3919062001516565b6010546040516364e329cb60e11b81523060048201526001600160a01b0391821660248201529192506000919083169063c9c6539690604401602060405180830381600087803b15801562000c2757600080fd5b505af115801562000c3c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c62919062001516565b602280546001600160a01b0319166001600160a01b0383169081179091556000908152601160205260409020805460ff1916600117905587519091508790600590811062000cc057634e487b7160e01b600052603260045260246000fd5b60200260200101516014819055508660068151811062000cf057634e487b7160e01b600052603260045260246000fd5b60200260200101516015819055508660078151811062000d2057634e487b7160e01b600052603260045260246000fd5b60200260200101516016819055508660088151811062000d5057634e487b7160e01b600052603260045260246000fd5b60200260200101516017819055508660098151811062000d8057634e487b7160e01b600052603260045260246000fd5b602002602001015160188190555086600a8151811062000db057634e487b7160e01b600052603260045260246000fd5b602002602001015160198190555086600b8151811062000de057634e487b7160e01b600052603260045260246000fd5b6020026020010151601a8190555086600c8151811062000e1057634e487b7160e01b600052603260045260246000fd5b6020908102919091010151601b5560265460ff161562000e5e57601b54601a5460195460185462000e42919062001779565b62000e4e919062001779565b62000e5a919062001779565b602a555b6109c460175460165460155460145462000e79919062001779565b62000e85919062001779565b62000e91919062001779565b1062000ecf5760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b60448201526064016200024c565b6109c4601b54601a5460195460185462000eea919062001779565b62000ef6919062001779565b62000f02919062001779565b1062000f405760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b60448201526064016200024c565b86600d8151811062000f6257634e487b7160e01b600052603260045260246000fd5b6020026020010151601f8190555086600e8151811062000f9257634e487b7160e01b600052603260045260246000fd5b602002602001015160078190555086600f8151811062000fc257634e487b7160e01b600052603260045260246000fd5b602002602001015160258190555060036025541115620010255760405162461bcd60e51b815260206004820152601b60248201527f61697264726f704e756d62732073686f756c64206265203c3d2033000000000060448201526064016200024c565b6001600160a01b0383166000818152600160209081526040808320899055518881527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36001600160a01b03838116600081815260026020908152604080832089861680855290835281842060001990556003805487168552600b84528285208054600160ff19918216811790925587875284872080548216831790553080885285882080548316841790553388528588208054831684179055600d875285882080548316841790559254891687528487208054821683179055968652838620805488168217905591855282852080548716831790556022548716855282852080548716831790558452818420805486168217905561dead9093527fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a80549094169092179092558154815163313ce56760e01b81529151600a946101009092049091169263313ce5679260048082019391829003018186803b158015620011b457600080fd5b505afa158015620011c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620011ef919062001707565b620011fc90600a620017fe565b62001208919062001794565b602e556010546040516001600160a01b0390911690620012289062001372565b6001600160a01b039091168152602001604051809103906000f08015801562001255573d6000803e3d6000fd5b50601260016101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050505050505062001925565b8280546200129990620018bc565b90600052602060002090601f016020900481019282620012bd576000855562001308565b82601f10620012d857805160ff191683800117855562001308565b8280016001018555821562001308579182015b8281111562001308578251825591602001919060010190620012eb565b506200131692915062001380565b5090565b82805482825590600052602060002090810192821562001308579160200282015b828111156200130857825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200133b565b61015280620057dd83390190565b5b8082111562001316576000815560010162001381565b80516001600160a01b0381168114620013af57600080fd5b919050565b600082601f830112620013c5578081fd5b81516020620013de620013d88362001753565b62001720565b80838252828201915082860187848660051b8901011115620013fe578586fd5b855b858110156200142757620014148262001397565b8452928401929084019060010162001400565b5090979650505050505050565b600082601f83011262001445578081fd5b8151602062001458620013d88362001753565b80838252828201915082860187848660051b890101111562001478578586fd5b855b8581101562001427576200148e8262001505565b845292840192908401906001016200147a565b600082601f830112620014b2578081fd5b81516020620014c5620013d88362001753565b80838252828201915082860187848660051b8901011115620014e5578586fd5b855b858110156200142757815184529284019290840190600101620014e7565b80518015158114620013af57600080fd5b60006020828403121562001528578081fd5b620015338262001397565b9392505050565b6000806000806080858703121562001550578283fd5b84516001600160401b038082111562001567578485fd5b818701915087601f8301126200157b578485fd5b81516200158c620013d88262001753565b80828252602082019150602085018b60208560051b8801011115620015af578889fd5b885b848110156200166c57815186811115620015c9578a8bfd5b8701603f81018e13620015da578a8bfd5b602081015187811115620015f257620015f26200190f565b62001607601f8201601f191660200162001720565b8181528f60408385010111156200161c578c8dfd5b8c5b82811015620016415760408185010151602082840101526020810190506200161e565b8281111562001653578d602084840101525b50865250506020938401939190910190600101620015b1565b505060208a0151909850935050508082111562001687578485fd5b6200169588838901620013b4565b94506040870151915080821115620016ab578384fd5b620016b988838901620014a1565b93506060870151915080821115620016cf578283fd5b50620016de8782880162001434565b91505092959194509250565b600060208284031215620016fc578081fd5b620015338262001505565b60006020828403121562001719578081fd5b5051919050565b604051601f8201601f191681016001600160401b03811182821017156200174b576200174b6200190f565b604052919050565b60006001600160401b038211156200176f576200176f6200190f565b5060051b60200190565b600082198211156200178f576200178f620018f9565b500190565b600082620017b057634e487b7160e01b81526012600452602481fd5b500490565b600181815b80851115620017f6578160001904821115620017da57620017da620018f9565b80851615620017e857918102915b93841c9390800290620017ba565b509250929050565b60006200153383836000826200181757506001620018b6565b816200182657506000620018b6565b81600181146200183f57600281146200184a576200186a565b6001915050620018b6565b60ff8411156200185e576200185e620018f9565b50506001821b620018b6565b5060208310610133831016604e8410600b84101617156200188f575081810a620018b6565b6200189b8383620017b5565b8060001904821115620018b257620018b2620018f9565b0290505b92915050565b600181811c90821680620018d157607f821691505b60208210811415620018f357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b613ea880620019356000396000f3fe60806040526004361061055d5760003560e01c80638322fff2116102bd578063af58e6f011610180578063d5986433116100e7578063e5c2b0a6116100a0578063ef6e4f171161007a578063ef6e4f1714611091578063efa450d3146110a7578063f2fde38b146110d7578063ff373375146110f757600080fd5b8063e5c2b0a614611031578063e82bef2914611051578063ea10510e1461107157600080fd5b8063d598643314610f5a578063d710569b14610f7b578063dac1dcfe14610f9b578063dd62ed3e14610fb5578063e32759cf14610ffb578063e5a6b10f1461101157600080fd5b8063bfac5ee011610139578063bfac5ee014610ead578063c0aa931e14610ecd578063c67c0c4c14610eed578063c92d567e14610f0d578063ce0192f914610f2e578063d58812e614610f4457600080fd5b8063af58e6f014610dea578063b02d757f14610e00578063b9fbc49d14610e21578063bd25bf2914610e37578063bd7d0ffb14610e67578063be4fe9a514610e9757600080fd5b806394c0067f11610224578063a8424861116101dd578063a842486114610d48578063a9059cbb14610d68578063aa4bde2814610d88578063aa582b4214610d9e578063acb2ad6f14610dbe578063adc7955d14610dd457600080fd5b806394c0067f14610ca657806395d89b4114610cbc57806395e3667914610cd15780639cc0e3c714610ce7578063a23270d714610d07578063a65d615514610d2857600080fd5b80638c2fc7ad116102765780638c2fc7ad14610bfd5780638d84917514610c1d5780638da5cb5b14610c325780638e1e083814610c505780638f02bb5b14610c705780638f6cd17d14610c9057600080fd5b80638322fff214610b5157806385dc300414610b765780638691752414610b965780638718b24f14610bac57806388e765ff14610bd15780638ad76d0814610be757600080fd5b8063313ce567116104205780635a7ba73c116103875780636b61136811610340578063715018a61161031a578063715018a614610adc5780637664068014610af15780637959473614610b115780637db1342c14610b3157600080fd5b80636b61136814610a865780636dd13dd714610a9c57806370a0823114610abc57600080fd5b80635a7ba73c146109d65780636108a3db146109f75780636402511e14610a1757806369768b5014610a37578063697cfc1914610a5157806369d0373814610a6657600080fd5b806340aa81fe116103d957806340aa81fe1461091a5780634188bf5a1461094a5780634a9a77401461096a5780634d5ce0381461098a57806354313794146109aa578063553193ca146109c057600080fd5b8063313ce5671461085857806335c960891461086d57806337e5794c146108875780633bfe62ca146108a75780633c11100d146108bd5780633ccfdbcd146108ed57600080fd5b8063150e4c47116104c457806319697dc61161047d57806319697dc614610794578063206c17bb146107b457806323b872dd146107ec578063255412d91461080c5780632dab693f146108225780632dfc10a41461083857600080fd5b8063150e4c47146106f657806315d07d8214610716578063172246fc1461073057806317417bb81461074a57806318160ddd146107605780631846a5a41461077557600080fd5b806307313d8d1161051657806307313d8d1461063d57806307c3adf01461065d578063095ea7b3146106815780630f890b86146106a157806313d78803146106b657806314a432c9146106d657600080fd5b806301339c211461056957806301986fad1461058057806303da2b23146105c5578063060e304e146105e6578063063be69e1461060657806306fdde031461061b57600080fd5b3661056457005b600080fd5b34801561057557600080fd5b5061057e61110d565b005b34801561058c57600080fd5b506105b061059b3660046139ad565b600b6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156105d157600080fd5b506022546105b090600160c01b900460ff1681565b3480156105f257600080fd5b5061057e610601366004613bbf565b611185565b34801561061257600080fd5b5061057e6111f2565b34801561062757600080fd5b5061063061122b565b6040516105bc9190613c40565b34801561064957600080fd5b5061057e610658366004613b87565b6112bd565b34801561066957600080fd5b5061067360165481565b6040519081526020016105bc565b34801561068d57600080fd5b506105b061069c366004613a91565b611301565b3480156106ad57600080fd5b5061057e611317565b3480156106c257600080fd5b5061057e6106d1366004613bbf565b611350565b3480156106e257600080fd5b5061057e6106f1366004613bbf565b61181a565b34801561070257600080fd5b5061057e610711366004613afd565b611849565b34801561072257600080fd5b506020546105b09060ff1681565b34801561073c57600080fd5b50601e546105b09060ff1681565b34801561075657600080fd5b50610673601f5481565b34801561076c57600080fd5b50600e54610673565b34801561078157600080fd5b506024546105b090610100900460ff1681565b3480156107a057600080fd5b5061057e6107af366004613bbf565b6118f8565b3480156107c057600080fd5b50600f546107d4906001600160a01b031681565b6040516001600160a01b0390911681526020016105bc565b3480156107f857600080fd5b506105b0610807366004613a24565b611927565b34801561081857600080fd5b5061067360175481565b34801561082e57600080fd5b5061067360075481565b34801561084457600080fd5b5061057e610853366004613bef565b6119be565b34801561086457600080fd5b50600654610673565b34801561087957600080fd5b506024546105b09060ff1681565b34801561089357600080fd5b5061057e6108a2366004613a64565b611a08565b3480156108b357600080fd5b5061067360185481565b3480156108c957600080fd5b506105b06108d83660046139ad565b60116020526000908152604090205460ff1681565b3480156108f957600080fd5b506106736109083660046139ad565b601c6020526000908152604090205481565b34801561092657600080fd5b506105b06109353660046139ad565b600d6020526000908152604090205460ff1681565b34801561095657600080fd5b506022546107d4906001600160a01b031681565b34801561097657600080fd5b506013546107d4906001600160a01b031681565b34801561099657600080fd5b506106736109a53660046139ad565b611a5d565b3480156109b657600080fd5b5061067360305481565b3480156109cc57600080fd5b5061067360215481565b3480156109e257600080fd5b506022546105b090600160a81b900460ff1681565b348015610a0357600080fd5b5061057e610a12366004613afd565b611a8e565b348015610a2357600080fd5b5061057e610a32366004613bbf565b611b84565b348015610a4357600080fd5b50600a546105b09060ff1681565b348015610a5d57600080fd5b5061057e611bb3565b348015610a7257600080fd5b5061057e610a813660046139ad565b611bec565b348015610a9257600080fd5b50610673601b5481565b348015610aa857600080fd5b5061057e610ab7366004613bbf565b611c38565b348015610ac857600080fd5b50610673610ad73660046139ad565b611c67565b348015610ae857600080fd5b5061057e611d0f565b348015610afd57600080fd5b5061057e610b0c366004613bbf565b611d83565b348015610b1d57600080fd5b5061057e610b2c366004613b87565b611e0a565b348015610b3d57600080fd5b5061057e610b4c366004613bbf565b611e73565b348015610b5d57600080fd5b506020546107d49061010090046001600160a01b031681565b348015610b8257600080fd5b5061057e610b913660046139ad565b611ea2565b348015610ba257600080fd5b5061067360285481565b348015610bb857600080fd5b506012546107d49061010090046001600160a01b031681565b348015610bdd57600080fd5b5061067360085481565b348015610bf357600080fd5b5061067360315481565b348015610c0957600080fd5b5061057e610c18366004613a64565b611f5b565b348015610c2957600080fd5b5061057e611fb0565b348015610c3e57600080fd5b506000546001600160a01b03166107d4565b348015610c5c57600080fd5b50602c546107d4906001600160a01b031681565b348015610c7c57600080fd5b5061057e610c8b366004613bbf565b611fe6565b348015610c9c57600080fd5b5061067360275481565b348015610cb257600080fd5b5061067360345481565b348015610cc857600080fd5b50610630612059565b348015610cdd57600080fd5b50610673601d5481565b348015610cf357600080fd5b506107d4610d02366004613bbf565b612068565b348015610d1357600080fd5b506022546105b090600160b81b900460ff1681565b348015610d3457600080fd5b50602d546107d4906001600160a01b031681565b348015610d5457600080fd5b5061057e610d63366004613a64565b612092565b348015610d7457600080fd5b506105b0610d83366004613a91565b6120e7565b348015610d9457600080fd5b5061067360095481565b348015610daa57600080fd5b5061057e610db9366004613b47565b6120f4565b348015610dca57600080fd5b50610673602a5481565b348015610de057600080fd5b5061067360195481565b348015610df657600080fd5b50610673602f5481565b348015610e0c57600080fd5b506022546105b090600160b01b900460ff1681565b348015610e2d57600080fd5b5061067360155481565b348015610e4357600080fd5b506105b0610e523660046139ad565b600c6020526000908152604090205460ff1681565b348015610e7357600080fd5b506105b0610e82366004613bbf565b60336020526000908152604090205460ff1681565b348015610ea357600080fd5b50610673601a5481565b348015610eb957600080fd5b5061057e610ec8366004613abc565b6123ac565b348015610ed957600080fd5b5061057e610ee8366004613bbf565b6124ce565b348015610ef957600080fd5b5061057e610f08366004613bbf565b6124fd565b348015610f1957600080fd5b506022546105b090600160a01b900460ff1681565b348015610f3a57600080fd5b5061067360145481565b348015610f5057600080fd5b50610673602e5481565b348015610f6657600080fd5b506022546105b090600160c81b900460ff1681565b348015610f8757600080fd5b5061057e610f963660046139ad565b61252c565b348015610fa757600080fd5b506026546105b09060ff1681565b348015610fc157600080fd5b50610673610fd03660046139ec565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561100757600080fd5b5061067360255481565b34801561101d57600080fd5b506010546107d4906001600160a01b031681565b34801561103d57600080fd5b5061057e61104c366004613bbf565b612578565b34801561105d57600080fd5b506003546107d4906001600160a01b031681565b34801561107d57600080fd5b5061057e61108c366004613b87565b6125ed565b34801561109d57600080fd5b50610673602b5481565b3480156110b357600080fd5b506105b06110c23660046139ad565b60326020526000908152604090205460ff1681565b3480156110e357600080fd5b5061057e6110f23660046139ad565b61262a565b34801561110357600080fd5b5061067360295481565b6000546001600160a01b031633146111405760405162461bcd60e51b815260040161113790613c93565b60405180910390fd5b6021541561117f5760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401611137565b43602155565b6000546001600160a01b031633146111af5760405162461bcd60e51b815260040161113790613c93565b806111ed5760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b6044820152606401611137565b602755565b6000546001600160a01b0316331461121c5760405162461bcd60e51b815260040161113790613c93565b6022805460ff60b81b19169055565b60606004805461123a90613de3565b80601f016020809104026020016040519081016040528092919081815260200182805461126690613de3565b80156112b35780601f10611288576101008083540402835291602001916112b3565b820191906000526020600020905b81548152906001019060200180831161129657829003601f168201915b5050505050905090565b6000546001600160a01b031633146112e75760405162461bcd60e51b815260040161113790613c93565b602480549115156101000261ff0019909216919091179055565b600061130e3384846126f0565b50600192915050565b6000546001600160a01b031633146113415760405162461bcd60e51b815260040161113790613c93565b6022805460ff60c81b19169055565b33301461138d576040513381527f1a8b85f0ecf2149d7316f1a5c7b1b67e75bdb97dbe9fc29503f312798a9b457d9060200160405180910390a150565b4360315460305461139e9190613d75565b11156113a75750565b602d546001600160a01b03166113ba5750565b602d54604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd91600480820192602092909190829003018186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c9190613bd7565b90508061144857505050565b602054602e546101009091046001600160a01b03169030908061146d57505050505050565b60008060005a90505b888310801561148457508682105b1561180b5786602f5410611498576000602f555b60336000602f5460016114ab9190613d75565b815260208101919091526040016000205460ff166117c9576000886001600160a01b0316636352211e602f5460016114e39190613d75565b6040518263ffffffff1660e01b815260040161150191815260200190565b60206040518083038186803b15801561151957600080fd5b505afa15801561152d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155191906139d0565b6001600160a01b03811660009081526032602052604090205490915060ff166117c75760345461158082611c67565b10611764576001600160a01b038616158015906115a557506001600160a01b03811615155b1561175f576040516370a0823160e01b81526001600160a01b0387811660048301528691908916906370a082319060240160206040518083038186803b1580156115ee57600080fd5b505afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190613bd7565b106117065760405163a9059cbb60e01b81526001600160a01b0382811660048301526024820187905288169063a9059cbb90604401602060405180830381600087803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190613ba3565b507f96bcc9d4da8fb08a4b7906f8bd1d104d475bb74a57022bb7b5f196643f72521d81602f5460016116df9190613d75565b604080516001600160a01b03909316835260208301919091520160405180910390a16117c7565b7f39f385ba1b7ce472188f5d0e209779917712bf361083995c752e911a195f073b81602f5460016117379190613d75565b604080516001600160a01b03909316835260208301919091520160405180910390a15061180b565b6117c7565b7fc5bbc31f68b9672491055c293f0dc9937adcdb68eff4f836530f56ca4a2c714a81602f5460016117959190613d75565b61179e84611c67565b604080516001600160a01b03909416845260208401929092529082015260600160405180910390a15b505b5a6117d49082613dcc565b6117de9084613d75565b92505a602f805491925060006117f383613e1e565b9190505550818061180390613e1e565b925050611476565b50504360305550505050505050565b6000546001600160a01b031633146118445760405162461bcd60e51b815260040161113790613c93565b600755565b6000546001600160a01b031633146118735760405162461bcd60e51b815260040161113790613c93565b60005b828110156118f25781600b60008686858181106118a357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118b891906139ad565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806118ea81613e1e565b915050611876565b50505050565b6000546001600160a01b031633146119225760405162461bcd60e51b815260040161113790613c93565b603155565b6000611934848484612752565b6001600160a01b0384166000908152600260209081526040808320338452909152902054600019146119b4576001600160a01b038416600090815260026020908152604080832033845290915290205461198f908390613dcc565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b031633146119e85760405162461bcd60e51b815260040161113790613c93565b600091825260336020526040909120805460ff1916911515919091179055565b6000546001600160a01b03163314611a325760405162461bcd60e51b815260040161113790613c93565b6001600160a01b03919091166000908152603260205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600c602052604081205460ff1615611a8657506001919050565b506000919050565b6000546001600160a01b03163314611ab85760405162461bcd60e51b815260040161113790613c93565b602254600160b01b900460ff16611b075760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b6044820152606401611137565b60005b828110156118f25781600c6000868685818110611b3757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611b4c91906139ad565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611b7d81613e1e565b9050611b0a565b6000546001600160a01b03163314611bae5760405162461bcd60e51b815260040161113790613c93565b602855565b6000546001600160a01b03163314611bdd5760405162461bcd60e51b815260040161113790613c93565b6022805460ff60c01b19169055565b6000546001600160a01b03163314611c165760405162461bcd60e51b815260040161113790613c93565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c625760405162461bcd60e51b815260040161113790613c93565b602e55565b6022546000906001600160a01b038381169116148015611c9157506022546001600160a01b031633145b8015611c9f575060245460ff165b15611cf3576022546001600160a01b0316600090815260016020526040902054611cf35760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b6044820152606401611137565b506001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314611d395760405162461bcd60e51b815260040161113790613c93565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611dad5760405162461bcd60e51b815260040161113790613c93565b62030d408110158015611dc35750621e84808111155b611e055760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b6044820152606401611137565b602955565b6000546001600160a01b03163314611e345760405162461bcd60e51b815260040161113790613c93565b8015611e6a57601b54601a54601954601854611e509190613d75565b611e5a9190613d75565b611e649190613d75565b602a5550565b6000602a555b50565b6000546001600160a01b03163314611e9d5760405162461bcd60e51b815260040161113790613c93565b600955565b6000546001600160a01b03163314611ecc5760405162461bcd60e51b815260040161113790613c93565b803b63ffffffff1615611f215760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611137565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f855760405162461bcd60e51b815260040161113790613c93565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611fda5760405162461bcd60e51b815260040161113790613c93565b601e805460ff19169055565b6000546001600160a01b031633146120105760405162461bcd60e51b815260040161113790613c93565b6109c48111156120545760405162461bcd60e51b815260206004820152600f60248201526e7472616e73666572203e203235202160881b6044820152606401611137565b602a55565b60606005805461123a90613de3565b6023818154811061207857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146120bc5760405162461bcd60e51b815260040161113790613c93565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b600061130e338484612752565b6000546001600160a01b0316331461211e5760405162461bcd60e51b815260040161113790613c93565b602254600160c81b900460ff1661216d5760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b6044820152606401611137565b8181600081811061218e57634e487b7160e01b600052603260045260246000fd5b602002919091013560145550818160018181106121bb57634e487b7160e01b600052603260045260246000fd5b602002919091013560155550818160028181106121e857634e487b7160e01b600052603260045260246000fd5b6020029190910135601655508181600381811061221557634e487b7160e01b600052603260045260246000fd5b6020029190910135601755508181600481811061224257634e487b7160e01b600052603260045260246000fd5b6020029190910135601855508181600581811061226f57634e487b7160e01b600052603260045260246000fd5b6020029190910135601955508181600681811061229c57634e487b7160e01b600052603260045260246000fd5b6020029190910135601a5550818160078181106122c957634e487b7160e01b600052603260045260246000fd5b90506020020135601b819055506109c46017546014546015546016546122ef9190613d75565b6122f99190613d75565b6123039190613d75565b1061233f5760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b6044820152606401611137565b6109c4601b54601854601954601a546123589190613d75565b6123629190613d75565b61236c9190613d75565b106123a85760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b6044820152606401611137565b5050565b6000546001600160a01b03163314806123cf57506003546001600160a01b031633145b6124055760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b6044820152606401611137565b6001600160a01b03831661244c576003546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156118f2573d6000803e3d6000fd5b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb90604401602060405180830381600087803b15801561249657600080fd5b505af11580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f29190613ba3565b6000546001600160a01b031633146124f85760405162461bcd60e51b815260040161113790613c93565b600855565b6000546001600160a01b031633146125275760405162461bcd60e51b815260040161113790613c93565b603455565b6000546001600160a01b031633146125565760405162461bcd60e51b815260040161113790613c93565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125a25760405162461bcd60e51b815260040161113790613c93565b60038111156125e85760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401611137565b602555565b6000546001600160a01b031633146126175760405162461bcd60e51b815260040161113790613c93565b6024805460ff1916911515919091179055565b6000546001600160a01b031633146126545760405162461bcd60e51b815260040161113790613c93565b6001600160a01b0381166126955760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401611137565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260016020526040902054818110156127ae5760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401611137565b60006127b985611a5d565b11156127f85760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b6044820152606401611137565b6001600160a01b0384166000908152600b60205260408120548190819060ff1615801561283e57506001600160a01b0386166000908152600b602052604090205460ff16155b80156128515750602454610100900460ff165b801561285f57506000602554115b80156128a557506001600160a01b03871660009081526011602052604090205460ff16806128a557506001600160a01b03861660009081526011602052604090205460ff165b15612929576000805b60255481101561290c5760408051602081018390529081018890524260608201526080016040516020818303038152906040528051906020012060001c91506128f989836001612de2565b508061290481613e1e565b9150506128ae565b5060255461291b906001613dad565b6129259087613dcc565b9550505b6021541580156129425750602254600160a01b900460ff165b15612a21576001600160a01b0387166000908152600b602052604090205460ff1615801561298957506001600160a01b0386166000908152600b602052604090205460ff16155b80156129ae57506001600160a01b03871660009081526011602052604090205460ff16155b80156129d357506001600160a01b03861660009081526011602052604090205460ff16155b15612a2157853b63ffffffff1615612a215760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b6044820152606401611137565b6001600160a01b03871660009081526011602052604090205460ff1680612a6057506001600160a01b03861660009081526011602052604090205460ff165b15612ce8576001600160a01b0387166000908152600b602052604090205460ff16158015612aa757506001600160a01b0386166000908152600b602052604090205460ff16155b15612cc257602254600160a01b900460ff168015612ac55750602154155b15612acf57600080fd5b602254600160a01b900460ff168015612af15750602254600160a81b900460ff165b8015612b0b5750600754602154612b089190613d75565b43105b8015612b3057506001600160a01b03861660009081526011602052604090205460ff16155b15612b59576001600160a01b0386166000908152600c60205260409020805460ff191660011790555b601e5460ff168015612b8357506001600160a01b03871660009081526011602052604090205460ff165b8015612b9d5750601f54602154612b9a9190613d75565b43105b15612bf857326000908152601c60205260409020544314612bcf57326000908152601c60205260409020439055612bf8565b601d8054906000612bdf83613e1e565b9190505550612bef878787612e97565b50505050505050565b6001600160a01b03861660009081526011602052604090205460ff1615612cbd5760125460ff16612cbd5730600090815260016020526040902054602854811115612cbb576000601954601a54601854601554601654601454612c5b9190613d75565b612c659190613d75565b612c6f9190613d75565b612c799190613d75565b612c839190613d75565b90506000606460275489612c979190613dad565b612ca19190613d8d565b905082811115612cae5750815b612cb88183612f1d565b50505b505b600192505b6001600160a01b03861660009081526011602052604090205460ff1615612ce857600191505b6001600160a01b03871660009081526011602052604090205460ff16158015612d2a57506001600160a01b03861660009081526011602052604090205460ff16155b15612d33575060015b612d41878787868686613610565b6001600160a01b0387163014801590612d5d575060125460ff16155b15612bef576029546040516313d7880360e01b8152600481019190915230906313d7880390602401600060405180830381600087803b158015612d9f57600080fd5b505af1925050508015612db0575060015b612bef576040517f55d3d9cd132a6ed8a0773e17ee6360f497a35f35814380a58e50015e680658f490600090a1612bef565b6001600160a01b038316600090815260016020526040812080548391908390612e0c908490613dcc565b90915550506001600160a01b03831660009081526001602052604081208054849290612e39908490613d75565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e8591815260200190565b60405180910390a35060019392505050565b6001600160a01b038316600090815260016020526040902054612ebb908290613dcc565b6001600160a01b0384166000908152600160205260408120919091556064612ee483605a613dad565b612eee9190613d8d565b600354909150612f099085906001600160a01b0316836138eb565b6118f28484612f188486613dcc565b6138eb565b6012805460ff19166001179055801580612f35575081155b15612f3f57613602565b6000601554601954612f519190613d75565b90506000826002612f628487613dad565b612f6c9190613d8d565b612f769190613d8d565b90506000612f85600284613d8d565b612f8f9085613dcc565b6010546040805160028082526060820183529394506001600160a01b0390921692600092916020830190803683370190505090503081600081518110612fe557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260105482519116908290600190811061302457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600f5416635c11d79561304d868a613dcc565b60125460405160e084901b6001600160e01b03191681526130879291600091879161010090046001600160a01b0316904290600401613cb3565b600060405180830381600087803b1580156130a157600080fd5b505af19250505080156130b2575060015b6130eb57604051600081527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6012546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000918416906370a082319060240160206040518083038186803b15801561313757600080fd5b505afa15801561314b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316f9190613bd7565b9050801561320a576012546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd90606401602060405180830381600087803b1580156131d057600080fd5b505af11580156131e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132089190613ba3565b505b60008460026132198985613dad565b6132239190613d8d565b61322d9190613d8d565b90506000856018546014546132429190613d75565b61324c9085613dad565b6132569190613d8d565b905080156133a75760205460ff161561330757601054604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156132af57600080fd5b505af11580156132c3573d6000803e3d6000fd5b50506003546040516001600160a01b03909116925083156108fc02915083906000818181858888f19350505050158015613301573d6000803e3d6000fd5b5061338f565b60035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529086169063a9059cbb90604401602060405180830381600087803b15801561335557600080fd5b505af1158015613369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338d9190613ba3565b505b80602b60008282546133a19190613d75565b90915550505b6000871180156133b75750600082115b1561349e57600f54601054602c5460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e337009061010401606060405180830381600087803b15801561343857600080fd5b505af1925050508015613468575060408051601f3d908101601f1916820190925261346591810190613c13565b60015b61349a576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c90600090a161349e565b5050505b601a546016546134ae9190613d75565b6134bf575050505050505050613602565b60105460205461010090046001600160a01b03908116911614156134ea575050505050505050613602565b600f546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908816906370a082319060240160206040518083038186803b15801561353757600080fd5b505afa15801561354b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356f9190613bd7565b6000602330426040518663ffffffff1660e01b8152600401613595959493929190613d23565b600060405180830381600087803b1580156135af57600080fd5b505af19250505080156135c0575060015b6135f957604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b50505050505050505b50506012805460ff19169055565b6001600160a01b038616600090815260016020526040902054613634908590613dcc565b6001600160a01b038716600090815260016020526040812091909155831561379e576000831561368257601954601a546018546136719190613d75565b61367b9190613d75565b90506136fc565b6016546015546014546136959190613d75565b61369f9190613d75565b602254909150600160b81b900460ff16156136fc576008548611156136fc5760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b6044820152606401611137565b600061271061370b8389613dad565b6137159190613d8d565b90508015613734576137278184613d75565b92506137348930836138eb565b60008561375d576127106017548961374c9190613dad565b6137569190613d8d565b905061377b565b612710601b548961376e9190613dad565b6137789190613d8d565b90505b801561379a5761378b8185613d75565b935061379a8a61dead836138eb565b5050505b8180156137c457506001600160a01b0387166000908152600b602052604090205460ff16155b80156137e957506001600160a01b0386166000908152600b602052604090205460ff16155b1561382c576000612710602a54876138019190613dad565b61380b9190613d8d565b9050801561382a5761381d8183613d75565b915061382a8830836138eb565b505b6001600160a01b0386166000908152600d602052604090205460ff1615801561385e5750602254600160c01b900460ff165b156138dc576009546001600160a01b038716600090815260016020526040902054829061388c908890613d75565b6138969190613dcc565b11156138dc5760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b6044820152606401611137565b612bef8787612f188489613dcc565b6001600160a01b03821660009081526001602052604090205461390f908290613d75565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127459085815260200190565b60008083601f840112613974578182fd5b50813567ffffffffffffffff81111561398b578182fd5b6020830191508360208260051b85010111156139a657600080fd5b9250929050565b6000602082840312156139be578081fd5b81356139c981613e4f565b9392505050565b6000602082840312156139e1578081fd5b81516139c981613e4f565b600080604083850312156139fe578081fd5b8235613a0981613e4f565b91506020830135613a1981613e4f565b809150509250929050565b600080600060608486031215613a38578081fd5b8335613a4381613e4f565b92506020840135613a5381613e4f565b929592945050506040919091013590565b60008060408385031215613a76578182fd5b8235613a8181613e4f565b91506020830135613a1981613e64565b60008060408385031215613aa3578182fd5b8235613aae81613e4f565b946020939093013593505050565b600080600060608486031215613ad0578283fd5b8335613adb81613e4f565b9250602084013591506040840135613af281613e4f565b809150509250925092565b600080600060408486031215613b11578283fd5b833567ffffffffffffffff811115613b27578384fd5b613b3386828701613963565b9094509250506020840135613af281613e64565b60008060208385031215613b59578182fd5b823567ffffffffffffffff811115613b6f578283fd5b613b7b85828601613963565b90969095509350505050565b600060208284031215613b98578081fd5b81356139c981613e64565b600060208284031215613bb4578081fd5b81516139c981613e64565b600060208284031215613bd0578081fd5b5035919050565b600060208284031215613be8578081fd5b5051919050565b60008060408385031215613c01578182fd5b823591506020830135613a1981613e64565b600080600060608486031215613c27578081fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015613c6c57858101830151858201604001528201613c50565b81811115613c7d5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015613d025784516001600160a01b031683529383019391830191600101613cdd565b50506001600160a01b03969096166060850152505050608001529392505050565b600060a082018783526020878185015260a0604085015281875480845260c0860191508885528285209350845b81811015613d025784546001600160a01b031683526001948501949284019201613d50565b60008219821115613d8857613d88613e39565b500190565b600082613da857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613dc757613dc7613e39565b500290565b600082821015613dde57613dde613e39565b500390565b600181811c90821680613df757607f821691505b60208210811415613e1857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613e3257613e32613e39565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611e7057600080fd5b8015158114611e7057600080fdfea264697066735822122009ba7da101d5b555ca849c940c8110c0960c499c82833a69fb6ddbb12052b20264736f6c63430008040033608060405234801561001057600080fd5b5060405161015238038061015283398101604081905261002f916100b7565b60405163095ea7b360e01b815233600482015260001960248201526001600160a01b0382169063095ea7b390604401602060405180830381600087803b15801561007857600080fd5b505af115801561008c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906100b091906100e5565b5050610105565b6000602082840312156100c8578081fd5b81516001600160a01b03811681146100de578182fd5b9392505050565b6000602082840312156100f6578081fd5b815180151581146100de578182fd5b603f806101136000396000f3fe6080604052600080fdfea264697066735822122053b8dc8a1050c2a1ce98e3883e6d61886a9ada6d40c727747f561bc62646d91264736f6c63430008040033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000001600000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000046000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000096578717569736974650000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000965787175697369746500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006000000000000000000000000a989f72d85838bc3f1a6baa1d9ce9f9983eddc4200000000000000000000000055d398326f99059ff775485246999027b319795500000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e00000000000000000000000078902fd0e9bc393b8b2e15d6a78a5a1cccffdd0900000000000000000000000055d398326f99059ff775485246999027b319795500000000000000000000000080db82236531f654d399fa5dd68a5c31ba68e1cf0000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000083858f45714796ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001f30000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x60806040526004361061055d5760003560e01c80638322fff2116102bd578063af58e6f011610180578063d5986433116100e7578063e5c2b0a6116100a0578063ef6e4f171161007a578063ef6e4f1714611091578063efa450d3146110a7578063f2fde38b146110d7578063ff373375146110f757600080fd5b8063e5c2b0a614611031578063e82bef2914611051578063ea10510e1461107157600080fd5b8063d598643314610f5a578063d710569b14610f7b578063dac1dcfe14610f9b578063dd62ed3e14610fb5578063e32759cf14610ffb578063e5a6b10f1461101157600080fd5b8063bfac5ee011610139578063bfac5ee014610ead578063c0aa931e14610ecd578063c67c0c4c14610eed578063c92d567e14610f0d578063ce0192f914610f2e578063d58812e614610f4457600080fd5b8063af58e6f014610dea578063b02d757f14610e00578063b9fbc49d14610e21578063bd25bf2914610e37578063bd7d0ffb14610e67578063be4fe9a514610e9757600080fd5b806394c0067f11610224578063a8424861116101dd578063a842486114610d48578063a9059cbb14610d68578063aa4bde2814610d88578063aa582b4214610d9e578063acb2ad6f14610dbe578063adc7955d14610dd457600080fd5b806394c0067f14610ca657806395d89b4114610cbc57806395e3667914610cd15780639cc0e3c714610ce7578063a23270d714610d07578063a65d615514610d2857600080fd5b80638c2fc7ad116102765780638c2fc7ad14610bfd5780638d84917514610c1d5780638da5cb5b14610c325780638e1e083814610c505780638f02bb5b14610c705780638f6cd17d14610c9057600080fd5b80638322fff214610b5157806385dc300414610b765780638691752414610b965780638718b24f14610bac57806388e765ff14610bd15780638ad76d0814610be757600080fd5b8063313ce567116104205780635a7ba73c116103875780636b61136811610340578063715018a61161031a578063715018a614610adc5780637664068014610af15780637959473614610b115780637db1342c14610b3157600080fd5b80636b61136814610a865780636dd13dd714610a9c57806370a0823114610abc57600080fd5b80635a7ba73c146109d65780636108a3db146109f75780636402511e14610a1757806369768b5014610a37578063697cfc1914610a5157806369d0373814610a6657600080fd5b806340aa81fe116103d957806340aa81fe1461091a5780634188bf5a1461094a5780634a9a77401461096a5780634d5ce0381461098a57806354313794146109aa578063553193ca146109c057600080fd5b8063313ce5671461085857806335c960891461086d57806337e5794c146108875780633bfe62ca146108a75780633c11100d146108bd5780633ccfdbcd146108ed57600080fd5b8063150e4c47116104c457806319697dc61161047d57806319697dc614610794578063206c17bb146107b457806323b872dd146107ec578063255412d91461080c5780632dab693f146108225780632dfc10a41461083857600080fd5b8063150e4c47146106f657806315d07d8214610716578063172246fc1461073057806317417bb81461074a57806318160ddd146107605780631846a5a41461077557600080fd5b806307313d8d1161051657806307313d8d1461063d57806307c3adf01461065d578063095ea7b3146106815780630f890b86146106a157806313d78803146106b657806314a432c9146106d657600080fd5b806301339c211461056957806301986fad1461058057806303da2b23146105c5578063060e304e146105e6578063063be69e1461060657806306fdde031461061b57600080fd5b3661056457005b600080fd5b34801561057557600080fd5b5061057e61110d565b005b34801561058c57600080fd5b506105b061059b3660046139ad565b600b6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156105d157600080fd5b506022546105b090600160c01b900460ff1681565b3480156105f257600080fd5b5061057e610601366004613bbf565b611185565b34801561061257600080fd5b5061057e6111f2565b34801561062757600080fd5b5061063061122b565b6040516105bc9190613c40565b34801561064957600080fd5b5061057e610658366004613b87565b6112bd565b34801561066957600080fd5b5061067360165481565b6040519081526020016105bc565b34801561068d57600080fd5b506105b061069c366004613a91565b611301565b3480156106ad57600080fd5b5061057e611317565b3480156106c257600080fd5b5061057e6106d1366004613bbf565b611350565b3480156106e257600080fd5b5061057e6106f1366004613bbf565b61181a565b34801561070257600080fd5b5061057e610711366004613afd565b611849565b34801561072257600080fd5b506020546105b09060ff1681565b34801561073c57600080fd5b50601e546105b09060ff1681565b34801561075657600080fd5b50610673601f5481565b34801561076c57600080fd5b50600e54610673565b34801561078157600080fd5b506024546105b090610100900460ff1681565b3480156107a057600080fd5b5061057e6107af366004613bbf565b6118f8565b3480156107c057600080fd5b50600f546107d4906001600160a01b031681565b6040516001600160a01b0390911681526020016105bc565b3480156107f857600080fd5b506105b0610807366004613a24565b611927565b34801561081857600080fd5b5061067360175481565b34801561082e57600080fd5b5061067360075481565b34801561084457600080fd5b5061057e610853366004613bef565b6119be565b34801561086457600080fd5b50600654610673565b34801561087957600080fd5b506024546105b09060ff1681565b34801561089357600080fd5b5061057e6108a2366004613a64565b611a08565b3480156108b357600080fd5b5061067360185481565b3480156108c957600080fd5b506105b06108d83660046139ad565b60116020526000908152604090205460ff1681565b3480156108f957600080fd5b506106736109083660046139ad565b601c6020526000908152604090205481565b34801561092657600080fd5b506105b06109353660046139ad565b600d6020526000908152604090205460ff1681565b34801561095657600080fd5b506022546107d4906001600160a01b031681565b34801561097657600080fd5b506013546107d4906001600160a01b031681565b34801561099657600080fd5b506106736109a53660046139ad565b611a5d565b3480156109b657600080fd5b5061067360305481565b3480156109cc57600080fd5b5061067360215481565b3480156109e257600080fd5b506022546105b090600160a81b900460ff1681565b348015610a0357600080fd5b5061057e610a12366004613afd565b611a8e565b348015610a2357600080fd5b5061057e610a32366004613bbf565b611b84565b348015610a4357600080fd5b50600a546105b09060ff1681565b348015610a5d57600080fd5b5061057e611bb3565b348015610a7257600080fd5b5061057e610a813660046139ad565b611bec565b348015610a9257600080fd5b50610673601b5481565b348015610aa857600080fd5b5061057e610ab7366004613bbf565b611c38565b348015610ac857600080fd5b50610673610ad73660046139ad565b611c67565b348015610ae857600080fd5b5061057e611d0f565b348015610afd57600080fd5b5061057e610b0c366004613bbf565b611d83565b348015610b1d57600080fd5b5061057e610b2c366004613b87565b611e0a565b348015610b3d57600080fd5b5061057e610b4c366004613bbf565b611e73565b348015610b5d57600080fd5b506020546107d49061010090046001600160a01b031681565b348015610b8257600080fd5b5061057e610b913660046139ad565b611ea2565b348015610ba257600080fd5b5061067360285481565b348015610bb857600080fd5b506012546107d49061010090046001600160a01b031681565b348015610bdd57600080fd5b5061067360085481565b348015610bf357600080fd5b5061067360315481565b348015610c0957600080fd5b5061057e610c18366004613a64565b611f5b565b348015610c2957600080fd5b5061057e611fb0565b348015610c3e57600080fd5b506000546001600160a01b03166107d4565b348015610c5c57600080fd5b50602c546107d4906001600160a01b031681565b348015610c7c57600080fd5b5061057e610c8b366004613bbf565b611fe6565b348015610c9c57600080fd5b5061067360275481565b348015610cb257600080fd5b5061067360345481565b348015610cc857600080fd5b50610630612059565b348015610cdd57600080fd5b50610673601d5481565b348015610cf357600080fd5b506107d4610d02366004613bbf565b612068565b348015610d1357600080fd5b506022546105b090600160b81b900460ff1681565b348015610d3457600080fd5b50602d546107d4906001600160a01b031681565b348015610d5457600080fd5b5061057e610d63366004613a64565b612092565b348015610d7457600080fd5b506105b0610d83366004613a91565b6120e7565b348015610d9457600080fd5b5061067360095481565b348015610daa57600080fd5b5061057e610db9366004613b47565b6120f4565b348015610dca57600080fd5b50610673602a5481565b348015610de057600080fd5b5061067360195481565b348015610df657600080fd5b50610673602f5481565b348015610e0c57600080fd5b506022546105b090600160b01b900460ff1681565b348015610e2d57600080fd5b5061067360155481565b348015610e4357600080fd5b506105b0610e523660046139ad565b600c6020526000908152604090205460ff1681565b348015610e7357600080fd5b506105b0610e82366004613bbf565b60336020526000908152604090205460ff1681565b348015610ea357600080fd5b50610673601a5481565b348015610eb957600080fd5b5061057e610ec8366004613abc565b6123ac565b348015610ed957600080fd5b5061057e610ee8366004613bbf565b6124ce565b348015610ef957600080fd5b5061057e610f08366004613bbf565b6124fd565b348015610f1957600080fd5b506022546105b090600160a01b900460ff1681565b348015610f3a57600080fd5b5061067360145481565b348015610f5057600080fd5b50610673602e5481565b348015610f6657600080fd5b506022546105b090600160c81b900460ff1681565b348015610f8757600080fd5b5061057e610f963660046139ad565b61252c565b348015610fa757600080fd5b506026546105b09060ff1681565b348015610fc157600080fd5b50610673610fd03660046139ec565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561100757600080fd5b5061067360255481565b34801561101d57600080fd5b506010546107d4906001600160a01b031681565b34801561103d57600080fd5b5061057e61104c366004613bbf565b612578565b34801561105d57600080fd5b506003546107d4906001600160a01b031681565b34801561107d57600080fd5b5061057e61108c366004613b87565b6125ed565b34801561109d57600080fd5b50610673602b5481565b3480156110b357600080fd5b506105b06110c23660046139ad565b60326020526000908152604090205460ff1681565b3480156110e357600080fd5b5061057e6110f23660046139ad565b61262a565b34801561110357600080fd5b5061067360295481565b6000546001600160a01b031633146111405760405162461bcd60e51b815260040161113790613c93565b60405180910390fd5b6021541561117f5760405162461bcd60e51b815260206004820152600c60248201526b30b63932b0b23c9037b832b760a11b6044820152606401611137565b43602155565b6000546001600160a01b031633146111af5760405162461bcd60e51b815260040161113790613c93565b806111ed5760405162461bcd60e51b815260206004820152600e60248201526d067726561746572207468616e20360941b6044820152606401611137565b602755565b6000546001600160a01b0316331461121c5760405162461bcd60e51b815260040161113790613c93565b6022805460ff60b81b19169055565b60606004805461123a90613de3565b80601f016020809104026020016040519081016040528092919081815260200182805461126690613de3565b80156112b35780601f10611288576101008083540402835291602001916112b3565b820191906000526020600020905b81548152906001019060200180831161129657829003601f168201915b5050505050905090565b6000546001600160a01b031633146112e75760405162461bcd60e51b815260040161113790613c93565b602480549115156101000261ff0019909216919091179055565b600061130e3384846126f0565b50600192915050565b6000546001600160a01b031633146113415760405162461bcd60e51b815260040161113790613c93565b6022805460ff60c81b19169055565b33301461138d576040513381527f1a8b85f0ecf2149d7316f1a5c7b1b67e75bdb97dbe9fc29503f312798a9b457d9060200160405180910390a150565b4360315460305461139e9190613d75565b11156113a75750565b602d546001600160a01b03166113ba5750565b602d54604080516318160ddd60e01b815290516001600160a01b039092169160009183916318160ddd91600480820192602092909190829003018186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c9190613bd7565b90508061144857505050565b602054602e546101009091046001600160a01b03169030908061146d57505050505050565b60008060005a90505b888310801561148457508682105b1561180b5786602f5410611498576000602f555b60336000602f5460016114ab9190613d75565b815260208101919091526040016000205460ff166117c9576000886001600160a01b0316636352211e602f5460016114e39190613d75565b6040518263ffffffff1660e01b815260040161150191815260200190565b60206040518083038186803b15801561151957600080fd5b505afa15801561152d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155191906139d0565b6001600160a01b03811660009081526032602052604090205490915060ff166117c75760345461158082611c67565b10611764576001600160a01b038616158015906115a557506001600160a01b03811615155b1561175f576040516370a0823160e01b81526001600160a01b0387811660048301528691908916906370a082319060240160206040518083038186803b1580156115ee57600080fd5b505afa158015611602573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116269190613bd7565b106117065760405163a9059cbb60e01b81526001600160a01b0382811660048301526024820187905288169063a9059cbb90604401602060405180830381600087803b15801561167557600080fd5b505af1158015611689573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ad9190613ba3565b507f96bcc9d4da8fb08a4b7906f8bd1d104d475bb74a57022bb7b5f196643f72521d81602f5460016116df9190613d75565b604080516001600160a01b03909316835260208301919091520160405180910390a16117c7565b7f39f385ba1b7ce472188f5d0e209779917712bf361083995c752e911a195f073b81602f5460016117379190613d75565b604080516001600160a01b03909316835260208301919091520160405180910390a15061180b565b6117c7565b7fc5bbc31f68b9672491055c293f0dc9937adcdb68eff4f836530f56ca4a2c714a81602f5460016117959190613d75565b61179e84611c67565b604080516001600160a01b03909416845260208401929092529082015260600160405180910390a15b505b5a6117d49082613dcc565b6117de9084613d75565b92505a602f805491925060006117f383613e1e565b9190505550818061180390613e1e565b925050611476565b50504360305550505050505050565b6000546001600160a01b031633146118445760405162461bcd60e51b815260040161113790613c93565b600755565b6000546001600160a01b031633146118735760405162461bcd60e51b815260040161113790613c93565b60005b828110156118f25781600b60008686858181106118a357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118b891906139ad565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806118ea81613e1e565b915050611876565b50505050565b6000546001600160a01b031633146119225760405162461bcd60e51b815260040161113790613c93565b603155565b6000611934848484612752565b6001600160a01b0384166000908152600260209081526040808320338452909152902054600019146119b4576001600160a01b038416600090815260026020908152604080832033845290915290205461198f908390613dcc565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b5060019392505050565b6000546001600160a01b031633146119e85760405162461bcd60e51b815260040161113790613c93565b600091825260336020526040909120805460ff1916911515919091179055565b6000546001600160a01b03163314611a325760405162461bcd60e51b815260040161113790613c93565b6001600160a01b03919091166000908152603260205260409020805460ff1916911515919091179055565b6001600160a01b0381166000908152600c602052604081205460ff1615611a8657506001919050565b506000919050565b6000546001600160a01b03163314611ab85760405162461bcd60e51b815260040161113790613c93565b602254600160b01b900460ff16611b075760405162461bcd60e51b81526020600482015260136024820152721c995dd85c99131a5cdd08191a5cd8589b1959606a1b6044820152606401611137565b60005b828110156118f25781600c6000868685818110611b3757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611b4c91906139ad565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055611b7d81613e1e565b9050611b0a565b6000546001600160a01b03163314611bae5760405162461bcd60e51b815260040161113790613c93565b602855565b6000546001600160a01b03163314611bdd5760405162461bcd60e51b815260040161113790613c93565b6022805460ff60c01b19169055565b6000546001600160a01b03163314611c165760405162461bcd60e51b815260040161113790613c93565b602d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314611c625760405162461bcd60e51b815260040161113790613c93565b602e55565b6022546000906001600160a01b038381169116148015611c9157506022546001600160a01b031633145b8015611c9f575060245460ff165b15611cf3576022546001600160a01b0316600090815260016020526040902054611cf35760405162461bcd60e51b81526020600482015260056024820152642173796e6360d81b6044820152606401611137565b506001600160a01b031660009081526001602052604090205490565b6000546001600160a01b03163314611d395760405162461bcd60e51b815260040161113790613c93565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314611dad5760405162461bcd60e51b815260040161113790613c93565b62030d408110158015611dc35750621e84808111155b611e055760405162461bcd60e51b8152602060048201526013602482015272746f6f2068696768206f7220746f6f206c6f7760681b6044820152606401611137565b602955565b6000546001600160a01b03163314611e345760405162461bcd60e51b815260040161113790613c93565b8015611e6a57601b54601a54601954601854611e509190613d75565b611e5a9190613d75565b611e649190613d75565b602a5550565b6000602a555b50565b6000546001600160a01b03163314611e9d5760405162461bcd60e51b815260040161113790613c93565b600955565b6000546001600160a01b03163314611ecc5760405162461bcd60e51b815260040161113790613c93565b803b63ffffffff1615611f215760405162461bcd60e51b815260206004820152601a60248201527f66756e6461646472657373206973206120636f6e7472616374200000000000006044820152606401611137565b600380546001600160a01b039092166001600160a01b0319909216821790556000908152600b60205260409020805460ff19166001179055565b6000546001600160a01b03163314611f855760405162461bcd60e51b815260040161113790613c93565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611fda5760405162461bcd60e51b815260040161113790613c93565b601e805460ff19169055565b6000546001600160a01b031633146120105760405162461bcd60e51b815260040161113790613c93565b6109c48111156120545760405162461bcd60e51b815260206004820152600f60248201526e7472616e73666572203e203235202160881b6044820152606401611137565b602a55565b60606005805461123a90613de3565b6023818154811061207857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b031633146120bc5760405162461bcd60e51b815260040161113790613c93565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b600061130e338484612752565b6000546001600160a01b0316331461211e5760405162461bcd60e51b815260040161113790613c93565b602254600160c81b900460ff1661216d5760405162461bcd60e51b81526020600482015260136024820152721d185e0818da185b99d948191a5cd8589b1959606a1b6044820152606401611137565b8181600081811061218e57634e487b7160e01b600052603260045260246000fd5b602002919091013560145550818160018181106121bb57634e487b7160e01b600052603260045260246000fd5b602002919091013560155550818160028181106121e857634e487b7160e01b600052603260045260246000fd5b6020029190910135601655508181600381811061221557634e487b7160e01b600052603260045260246000fd5b6020029190910135601755508181600481811061224257634e487b7160e01b600052603260045260246000fd5b6020029190910135601855508181600581811061226f57634e487b7160e01b600052603260045260246000fd5b6020029190910135601955508181600681811061229c57634e487b7160e01b600052603260045260246000fd5b6020029190910135601a5550818160078181106122c957634e487b7160e01b600052603260045260246000fd5b90506020020135601b819055506109c46017546014546015546016546122ef9190613d75565b6122f99190613d75565b6123039190613d75565b1061233f5760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b6044820152606401611137565b6109c4601b54601854601954601a546123589190613d75565b6123629190613d75565b61236c9190613d75565b106123a85760405162461bcd60e51b815260206004820152600c60248201526b0cccaca40e8dede40d0d2ced60a31b6044820152606401611137565b5050565b6000546001600160a01b03163314806123cf57506003546001600160a01b031633145b6124055760405162461bcd60e51b815260206004820152600760248201526610a33ab73232b960c91b6044820152606401611137565b6001600160a01b03831661244c576003546040516001600160a01b03909116904780156108fc02916000818181858888f193505050501580156118f2573d6000803e3d6000fd5b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb90604401602060405180830381600087803b15801561249657600080fd5b505af11580156124aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f29190613ba3565b6000546001600160a01b031633146124f85760405162461bcd60e51b815260040161113790613c93565b600855565b6000546001600160a01b031633146125275760405162461bcd60e51b815260040161113790613c93565b603455565b6000546001600160a01b031633146125565760405162461bcd60e51b815260040161113790613c93565b602c80546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146125a25760405162461bcd60e51b815260040161113790613c93565b60038111156125e85760405162461bcd60e51b81526020600482015260126024820152716e657756616c7565206d757374203c3d203360701b6044820152606401611137565b602555565b6000546001600160a01b031633146126175760405162461bcd60e51b815260040161113790613c93565b6024805460ff1916911515919091179055565b6000546001600160a01b031633146126545760405162461bcd60e51b815260040161113790613c93565b6001600160a01b0381166126955760405162461bcd60e51b815260206004820152600860248201526706e657720697320360c41b6044820152606401611137565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316600090815260016020526040902054818110156127ae5760405162461bcd60e51b815260206004820152601060248201526f0c4c2d8c2dcc6ca9cdee88adcdeeaced60831b6044820152606401611137565b60006127b985611a5d565b11156127f85760405162461bcd60e51b815260206004820152600e60248201526d6973526577617264203e2030202160901b6044820152606401611137565b6001600160a01b0384166000908152600b60205260408120548190819060ff1615801561283e57506001600160a01b0386166000908152600b602052604090205460ff16155b80156128515750602454610100900460ff165b801561285f57506000602554115b80156128a557506001600160a01b03871660009081526011602052604090205460ff16806128a557506001600160a01b03861660009081526011602052604090205460ff165b15612929576000805b60255481101561290c5760408051602081018390529081018890524260608201526080016040516020818303038152906040528051906020012060001c91506128f989836001612de2565b508061290481613e1e565b9150506128ae565b5060255461291b906001613dad565b6129259087613dcc565b9550505b6021541580156129425750602254600160a01b900460ff165b15612a21576001600160a01b0387166000908152600b602052604090205460ff1615801561298957506001600160a01b0386166000908152600b602052604090205460ff16155b80156129ae57506001600160a01b03871660009081526011602052604090205460ff16155b80156129d357506001600160a01b03861660009081526011602052604090205460ff16155b15612a2157853b63ffffffff1615612a215760405162461bcd60e51b8152602060048201526011602482015270063616e7420616464206f74686572206c7607c1b6044820152606401611137565b6001600160a01b03871660009081526011602052604090205460ff1680612a6057506001600160a01b03861660009081526011602052604090205460ff165b15612ce8576001600160a01b0387166000908152600b602052604090205460ff16158015612aa757506001600160a01b0386166000908152600b602052604090205460ff16155b15612cc257602254600160a01b900460ff168015612ac55750602154155b15612acf57600080fd5b602254600160a01b900460ff168015612af15750602254600160a81b900460ff165b8015612b0b5750600754602154612b089190613d75565b43105b8015612b3057506001600160a01b03861660009081526011602052604090205460ff16155b15612b59576001600160a01b0386166000908152600c60205260409020805460ff191660011790555b601e5460ff168015612b8357506001600160a01b03871660009081526011602052604090205460ff165b8015612b9d5750601f54602154612b9a9190613d75565b43105b15612bf857326000908152601c60205260409020544314612bcf57326000908152601c60205260409020439055612bf8565b601d8054906000612bdf83613e1e565b9190505550612bef878787612e97565b50505050505050565b6001600160a01b03861660009081526011602052604090205460ff1615612cbd5760125460ff16612cbd5730600090815260016020526040902054602854811115612cbb576000601954601a54601854601554601654601454612c5b9190613d75565b612c659190613d75565b612c6f9190613d75565b612c799190613d75565b612c839190613d75565b90506000606460275489612c979190613dad565b612ca19190613d8d565b905082811115612cae5750815b612cb88183612f1d565b50505b505b600192505b6001600160a01b03861660009081526011602052604090205460ff1615612ce857600191505b6001600160a01b03871660009081526011602052604090205460ff16158015612d2a57506001600160a01b03861660009081526011602052604090205460ff16155b15612d33575060015b612d41878787868686613610565b6001600160a01b0387163014801590612d5d575060125460ff16155b15612bef576029546040516313d7880360e01b8152600481019190915230906313d7880390602401600060405180830381600087803b158015612d9f57600080fd5b505af1925050508015612db0575060015b612bef576040517f55d3d9cd132a6ed8a0773e17ee6360f497a35f35814380a58e50015e680658f490600090a1612bef565b6001600160a01b038316600090815260016020526040812080548391908390612e0c908490613dcc565b90915550506001600160a01b03831660009081526001602052604081208054849290612e39908490613d75565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612e8591815260200190565b60405180910390a35060019392505050565b6001600160a01b038316600090815260016020526040902054612ebb908290613dcc565b6001600160a01b0384166000908152600160205260408120919091556064612ee483605a613dad565b612eee9190613d8d565b600354909150612f099085906001600160a01b0316836138eb565b6118f28484612f188486613dcc565b6138eb565b6012805460ff19166001179055801580612f35575081155b15612f3f57613602565b6000601554601954612f519190613d75565b90506000826002612f628487613dad565b612f6c9190613d8d565b612f769190613d8d565b90506000612f85600284613d8d565b612f8f9085613dcc565b6010546040805160028082526060820183529394506001600160a01b0390921692600092916020830190803683370190505090503081600081518110612fe557634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260105482519116908290600190811061302457634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600f5416635c11d79561304d868a613dcc565b60125460405160e084901b6001600160e01b03191681526130879291600091879161010090046001600160a01b0316904290600401613cb3565b600060405180830381600087803b1580156130a157600080fd5b505af19250505080156130b2575060015b6130eb57604051600081527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b6012546040516370a0823160e01b81526001600160a01b03610100909204821660048201526000918416906370a082319060240160206040518083038186803b15801561313757600080fd5b505afa15801561314b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061316f9190613bd7565b9050801561320a576012546040516323b872dd60e01b81526101009091046001600160a01b039081166004830152306024830152604482018390528416906323b872dd90606401602060405180830381600087803b1580156131d057600080fd5b505af11580156131e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132089190613ba3565b505b60008460026132198985613dad565b6132239190613d8d565b61322d9190613d8d565b90506000856018546014546132429190613d75565b61324c9085613dad565b6132569190613d8d565b905080156133a75760205460ff161561330757601054604051632e1a7d4d60e01b8152600481018390526001600160a01b0390911690632e1a7d4d90602401600060405180830381600087803b1580156132af57600080fd5b505af11580156132c3573d6000803e3d6000fd5b50506003546040516001600160a01b03909116925083156108fc02915083906000818181858888f19350505050158015613301573d6000803e3d6000fd5b5061338f565b60035460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529086169063a9059cbb90604401602060405180830381600087803b15801561335557600080fd5b505af1158015613369573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061338d9190613ba3565b505b80602b60008282546133a19190613d75565b90915550505b6000871180156133b75750600082115b1561349e57600f54601054602c5460405162e8e33760e81b81523060048201526001600160a01b039283166024820152604481018b90526064810186905260006084820181905260a482015290821660c48201524260e482015291169063e8e337009061010401606060405180830381600087803b15801561343857600080fd5b505af1925050508015613468575060408051601f3d908101601f1916820190925261346591810190613c13565b60015b61349a576040517f0e944a8ae3ee1160b2678930fb103c5ceadb14ecbb4c16e311d7402f7011322c90600090a161349e565b5050505b601a546016546134ae9190613d75565b6134bf575050505050505050613602565b60105460205461010090046001600160a01b03908116911614156134ea575050505050505050613602565b600f546040516370a0823160e01b81523060048201526001600160a01b0391821691635c11d79591908816906370a082319060240160206040518083038186803b15801561353757600080fd5b505afa15801561354b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061356f9190613bd7565b6000602330426040518663ffffffff1660e01b8152600401613595959493929190613d23565b600060405180830381600087803b1580156135af57600080fd5b505af19250505080156135c0575060015b6135f957604051600181527f6c37756e80daba6f4df0d5bfa6cddadfe23601acc1a27dc8d4aa427de91467889060200160405180910390a15b50505050505050505b50506012805460ff19169055565b6001600160a01b038616600090815260016020526040902054613634908590613dcc565b6001600160a01b038716600090815260016020526040812091909155831561379e576000831561368257601954601a546018546136719190613d75565b61367b9190613d75565b90506136fc565b6016546015546014546136959190613d75565b61369f9190613d75565b602254909150600160b81b900460ff16156136fc576008548611156136fc5760405162461bcd60e51b81526020600482015260136024820152721bdd995c881b585e08189d5e48185b5bdd5b9d606a1b6044820152606401611137565b600061271061370b8389613dad565b6137159190613d8d565b90508015613734576137278184613d75565b92506137348930836138eb565b60008561375d576127106017548961374c9190613dad565b6137569190613d8d565b905061377b565b612710601b548961376e9190613dad565b6137789190613d8d565b90505b801561379a5761378b8185613d75565b935061379a8a61dead836138eb565b5050505b8180156137c457506001600160a01b0387166000908152600b602052604090205460ff16155b80156137e957506001600160a01b0386166000908152600b602052604090205460ff16155b1561382c576000612710602a54876138019190613dad565b61380b9190613d8d565b9050801561382a5761381d8183613d75565b915061382a8830836138eb565b505b6001600160a01b0386166000908152600d602052604090205460ff1615801561385e5750602254600160c01b900460ff165b156138dc576009546001600160a01b038716600090815260016020526040902054829061388c908890613d75565b6138969190613dcc565b11156138dc5760405162461bcd60e51b81526020600482015260156024820152741bdd995c881b585e081dd85b1b195d081b1a5b5a5d605a1b6044820152606401611137565b612bef8787612f188489613dcc565b6001600160a01b03821660009081526001602052604090205461390f908290613d75565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127459085815260200190565b60008083601f840112613974578182fd5b50813567ffffffffffffffff81111561398b578182fd5b6020830191508360208260051b85010111156139a657600080fd5b9250929050565b6000602082840312156139be578081fd5b81356139c981613e4f565b9392505050565b6000602082840312156139e1578081fd5b81516139c981613e4f565b600080604083850312156139fe578081fd5b8235613a0981613e4f565b91506020830135613a1981613e4f565b809150509250929050565b600080600060608486031215613a38578081fd5b8335613a4381613e4f565b92506020840135613a5381613e4f565b929592945050506040919091013590565b60008060408385031215613a76578182fd5b8235613a8181613e4f565b91506020830135613a1981613e64565b60008060408385031215613aa3578182fd5b8235613aae81613e4f565b946020939093013593505050565b600080600060608486031215613ad0578283fd5b8335613adb81613e4f565b9250602084013591506040840135613af281613e4f565b809150509250925092565b600080600060408486031215613b11578283fd5b833567ffffffffffffffff811115613b27578384fd5b613b3386828701613963565b9094509250506020840135613af281613e64565b60008060208385031215613b59578182fd5b823567ffffffffffffffff811115613b6f578283fd5b613b7b85828601613963565b90969095509350505050565b600060208284031215613b98578081fd5b81356139c981613e64565b600060208284031215613bb4578081fd5b81516139c981613e64565b600060208284031215613bd0578081fd5b5035919050565b600060208284031215613be8578081fd5b5051919050565b60008060408385031215613c01578182fd5b823591506020830135613a1981613e64565b600080600060608486031215613c27578081fd5b8351925060208401519150604084015190509250925092565b6000602080835283518082850152825b81811015613c6c57858101830151858201604001528201613c50565b81811115613c7d5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510b7bbb732b960d11b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b81811015613d025784516001600160a01b031683529383019391830191600101613cdd565b50506001600160a01b03969096166060850152505050608001529392505050565b600060a082018783526020878185015260a0604085015281875480845260c0860191508885528285209350845b81811015613d025784546001600160a01b031683526001948501949284019201613d50565b60008219821115613d8857613d88613e39565b500190565b600082613da857634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615613dc757613dc7613e39565b500290565b600082821015613dde57613dde613e39565b500390565b600181811c90821680613df757607f821691505b60208210811415613e1857634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613e3257613e32613e39565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b0381168114611e7057600080fd5b8015158114611e7057600080fdfea264697066735822122009ba7da101d5b555ca849c940c8110c0960c499c82833a69fb6ddbb12052b20264736f6c63430008040033

Deployed Bytecode Sourcemap

4231:27082:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24858:142;;;;;;;;;;;;;:::i;:::-;;4672:45;;;;;;;;;;-1:-1:-1;4672:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8867:14:1;;8860:22;8842:41;;8830:2;8815:18;4672:45:0;;;;;;;;5966:29;;;;;;;;;;-1:-1:-1;5966:29:0;;;;-1:-1:-1;;;5966:29:0;;;;;;13685:163;;;;;;;;;;-1:-1:-1;13685:163:0;;;;;:::i;:::-;;:::i;26384:87::-;;;;;;;;;;;;;:::i;10315:94::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12621:97::-;;;;;;;;;;-1:-1:-1;12621:97:0;;;;;:::i;:::-;;:::i;5227:28::-;;;;;;;;;;;;;;;;;;;9507:25:1;;;9495:2;9480:18;5227:28:0;9462:76:1;11389:184:0;;;;;;;;;;-1:-1:-1;11389:184:0;;;;;:::i;:::-;;:::i;26578:87::-;;;;;;;;;;;;;:::i;28095:2576::-;;;;;;;;;;-1:-1:-1;28095:2576:0;;;;;:::i;:::-;;:::i;12311:68::-;;;;;;;;;;-1:-1:-1;12311:68:0;;;;;:::i;:::-;;:::i;25008:223::-;;;;;;;;;;-1:-1:-1;25008:223:0;;;;;:::i;:::-;;:::i;5599:25::-;;;;;;;;;;-1:-1:-1;5599:25:0;;;;;;;;5517:31;;;;;;;;;;-1:-1:-1;5517:31:0;;;;;;;;5555:35;;;;;;;;;;;;;;;;10521:95;;;;;;;;;;-1:-1:-1;10601:7:0;;10521:95;;12580:32;;;;;;;;;;-1:-1:-1;12580:32:0;;;;;;;;;;;30928:120;;;;;;;;;;-1:-1:-1;30928:120:0;;;;;:::i;:::-;;:::i;4861:30::-;;;;;;;;;;-1:-1:-1;4861:30:0;;;;-1:-1:-1;;;;;4861:30:0;;;;;;-1:-1:-1;;;;;6373:32:1;;;6355:51;;6343:2;6328:18;4861:30:0;6310:102:1;11581:404:0;;;;;;;;;;-1:-1:-1;11581:404:0;;;;;:::i;:::-;;:::i;5262:26::-;;;;;;;;;;;;;;;;4536:17;;;;;;;;;;;;;;;;31189:109;;;;;;;;;;-1:-1:-1;31189:109:0;;;;;:::i;:::-;;:::i;10417:96::-;;;;;;;;;;-1:-1:-1;10496:9:0;;10417:96;;10624:20;;;;;;;;;;-1:-1:-1;10624:20:0;;;;;;;;31056:125;;;;;;;;;;-1:-1:-1;31056:125:0;;;;;:::i;:::-;;:::i;5295:27::-;;;;;;;;;;;;;;;;4928:45;;;;;;;;;;-1:-1:-1;4928:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5433:46;;;;;;;;;;-1:-1:-1;5433:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;4774;;;;;;;;;;-1:-1:-1;4774:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5697:24;;;;;;;;;;-1:-1:-1;5697:24:0;;;;-1:-1:-1;;;;;5697:24:0;;;5107:47;;;;;;;;;;-1:-1:-1;5107:47:0;;;;-1:-1:-1;;;;;5107:47:0;;;12387:185;;;;;;;;;;-1:-1:-1;12387:185:0;;;;;:::i;:::-;;:::i;27638:30::-;;;;;;;;;;;;;;;;5658;;;;;;;;;;;;;;;;5863:27;;;;;;;;;;-1:-1:-1;5863:27:0;;;;-1:-1:-1;;;5863:27:0;;;;;;25943:331;;;;;;;;;;-1:-1:-1;25943:331:0;;;;;:::i;:::-;;:::i;13896:102::-;;;;;;;;;;-1:-1:-1;13896:102:0;;;;;:::i;:::-;;:::i;4633:30::-;;;;;;;;;;-1:-1:-1;4633:30:0;;;;;;;;26479:91;;;;;;;;;;;;;:::i;27462:::-;;;;;;;;;;-1:-1:-1;27462:91:0;;;;;:::i;:::-;;:::i;5397:27::-;;;;;;;;;;;;;;;;30679:112;;;;;;;;;;-1:-1:-1;30679:112:0;;;;;:::i;:::-;;:::i;10744:263::-;;;;;;;;;;-1:-1:-1;10744:263:0;;;;;:::i;:::-;;:::i;3094:148::-;;;;;;;;;;;;;:::i;18149:223::-;;;;;;;;;;-1:-1:-1;18149:223:0;;;;;:::i;:::-;;:::i;13278:344::-;;;;;;;;;;-1:-1:-1;13278:344:0;;;;;:::i;:::-;;:::i;26921:107::-;;;;;;;;;;-1:-1:-1;26921:107:0;;;;;:::i;:::-;;:::i;5633:18::-;;;;;;;;;;-1:-1:-1;5633:18:0;;;;;;;-1:-1:-1;;;;;5633:18:0;;;24444:206;;;;;;;;;;-1:-1:-1;24444:206:0;;;;;:::i;:::-;;:::i;13856:31::-;;;;;;;;;;;;;;;;5059:41;;;;;;;;;;-1:-1:-1;5059:41:0;;;;;;;-1:-1:-1;;;;;5059:41:0;;;4560:27;;;;;;;;;;;;;;;;27675:38;;;;;;;;;;;;;;;;12178:125;;;;;;;;;;-1:-1:-1;12178:125:0;;;;;:::i;:::-;;:::i;26282:94::-;;;;;;;;;;;;;:::i;2908:79::-;;;;;;;;;;-1:-1:-1;2946:7:0;2973:6;-1:-1:-1;;;;;2973:6:0;2908:79;;21266:37;;;;;;;;;;-1:-1:-1;21266:37:0;;;;-1:-1:-1;;;;;21266:37:0;;;18776:155;;;;;;;;;;-1:-1:-1;18776:155:0;;;;;:::i;:::-;;:::i;13630:38::-;;;;;;;;;;;;;;;;27824;;;;;;;;;;;;;;;;10209:98;;;;;;;;;;;;;:::i;5486:24::-;;;;;;;;;;;;;;;;6038:27;;;;;;;;;;-1:-1:-1;6038:27:0;;;;;:::i;:::-;;:::i;5932:::-;;;;;;;;;;-1:-1:-1;5932:27:0;;;;-1:-1:-1;;;5932:27:0;;;;;;27427:26;;;;;;;;;;-1:-1:-1;27427:26:0;;;;-1:-1:-1;;;;;27427:26:0;;;26673:118;;;;;;;;;;-1:-1:-1;26673:118:0;;;;;:::i;:::-;;:::i;11015:190::-;;;;;;;;;;-1:-1:-1;11015:190:0;;;;;:::i;:::-;;:::i;4596:30::-;;;;;;;;;;;;;;;;25239:696;;;;;;;;;;-1:-1:-1;25239:696:0;;;;;:::i;:::-;;:::i;18741:26::-;;;;;;;;;;;;;;;;5329:25;;;;;;;;;;;;;;;;27601:30;;;;;;;;;;;;;;;;5897:28;;;;;;;;;;-1:-1:-1;5897:28:0;;;;-1:-1:-1;;;5897:28:0;;;;;;5196:24;;;;;;;;;;;;;;;;4724:43;;;;;;;;;;-1:-1:-1;4724:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27775:42;;;;;;;;;;-1:-1:-1;27775:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;5361:29;;;;;;;;;;;;;;;;27036:334;;;;;;;;;;-1:-1:-1;27036:334:0;;;;;:::i;:::-;;:::i;26799:114::-;;;;;;;;;;-1:-1:-1;26799:114:0;;;;;:::i;:::-;;:::i;30799:121::-;;;;;;;;;;-1:-1:-1;30799:121:0;;;;;:::i;:::-;;:::i;5830:26::-;;;;;;;;;;-1:-1:-1;5830:26:0;;;;-1:-1:-1;;;5830:26:0;;;;;;5163;;;;;;;;;;;;;;;;27561:33;;;;;;;;;;;;;;;;6002:27;;;;;;;;;;-1:-1:-1;6002:27:0;;;;-1:-1:-1;;;6002:27:0;;;;;;21312:120;;;;;;;;;;-1:-1:-1;21312:120:0;;;;;:::i;:::-;;:::i;13232:37::-;;;;;;;;;;-1:-1:-1;13232:37:0;;;;;;;;11213:168;;;;;;;;;;-1:-1:-1;11213:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;11346:18:0;;;11319:7;11346:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11213:168;13027:31;;;;;;;;;;;;;;;;4898:23;;;;;;;;;;-1:-1:-1;4898:23:0;;;;-1:-1:-1;;;;;4898:23:0;;;13067:157;;;;;;;;;;-1:-1:-1;13067:157:0;;;;;:::i;:::-;;:::i;4405:34::-;;;;;;;;;;-1:-1:-1;4405:34:0;;;;-1:-1:-1;;;;;4405:34:0;;;10653:83;;;;;;;;;;-1:-1:-1;10653:83:0;;;;;:::i;:::-;;:::i;21220:37::-;;;;;;;;;;;;;;;;27720:48;;;;;;;;;;-1:-1:-1;27720:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;3250:214;;;;;;;;;;-1:-1:-1;3250:214:0;;;;;:::i;:::-;;:::i;18104:36::-;;;;;;;;;;;;;;;;24858:142;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;;;;;;;;;24919:15:::1;::::0;24914:20;24906:45:::1;;;::::0;-1:-1:-1;;;24906:45:0;;11939:2:1;24906:45:0::1;::::0;::::1;11921:21:1::0;11978:2;11958:18;;;11951:30;-1:-1:-1;;;11997:18:1;;;11990:42;12049:18;;24906:45:0::1;11911:162:1::0;24906:45:0::1;24980:12;24962:15;:30:::0;24858:142::o;13685:163::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;13769:13;13761:40:::1;;;::::0;-1:-1:-1;;;13761:40:0;;11246:2:1;13761:40:0::1;::::0;::::1;11228:21:1::0;11285:2;11265:18;;;11258:30;-1:-1:-1;;;11304:18:1;;;11297:44;11358:18;;13761:40:0::1;11218:164:1::0;13761:40:0::1;13812:17;:28:::0;13685:163::o;26384:87::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;26440:15:::1;:23:::0;;-1:-1:-1;;;;26440:23:0::1;::::0;;26384:87::o;10315:94::-;10363:13;10396:5;10389:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10315:94;:::o;12621:97::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;12688:13:::1;:22:::0;;;::::1;;;;-1:-1:-1::0;;12688:22:0;;::::1;::::0;;;::::1;::::0;;12621:97::o;11389:184::-;11489:4;11506:37;11515:10;11527:7;11536:6;11506:8;:37::i;:::-;-1:-1:-1;11561:4:0;11389:184;;;;:::o;26578:87::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;26634:15:::1;:23:::0;;-1:-1:-1;;;;26634:23:0::1;::::0;;26578:87::o;28095:2576::-;28153:10;28175:4;28153:27;28149:114;;28202:28;;28219:10;6355:51:1;;28202:28:0;;6343:2:1;6328:18;28202:28:0;;;;;;;28095:2576;:::o;28149:114::-;28317:12;28295:19;;28277:15;;:37;;;;:::i;:::-;:52;28273:91;;;28095:2576;:::o;28273:91::-;28378:11;;-1:-1:-1;;;;;28378:11:0;28374:64;;28095:2576;:::o;28374:64::-;28464:11;;28503:17;;;-1:-1:-1;;;28503:17:0;;;;-1:-1:-1;;;;;28464:11:0;;;;28448:8;;28464:11;;28503:15;;:17;;;;;;;;;;;;;;;28464:11;28503:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28487:33;-1:-1:-1;28535:13:0;28531:52;;28565:7;;28095:2576;:::o;28531:52::-;28614:3;;28717:18;;28614:3;;;;-1:-1:-1;;;;;28614:3:0;;28654:4;;28717:18;28746:50;;28778:7;;;;;28095:2576;:::o;28746:50::-;28808:15;28838:18;28871:15;28889:9;28871:27;;28911:1712;28928:3;28918:7;:13;:38;;;;;28948:8;28935:10;:21;28918:38;28911:1712;;;28996:8;28977:15;;:27;28973:87;;29043:1;29025:15;:19;28973:87;29079:10;:31;29094:15;;29090:1;:19;;;;:::i;:::-;29079:31;;;;;;;;;;;-1:-1:-1;29079:31:0;;;;29074:1387;;29131:19;29153:3;-1:-1:-1;;;;;29153:11:0;;29169:15;;29165:1;:19;;;;:::i;:::-;29153:32;;;;;;;;;;;;;9507:25:1;;9495:2;9480:18;;9462:76;29153:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;29209:29:0;;;;;;:16;:29;;;;;;29131:54;;-1:-1:-1;29209:29:0;;29204:1242;;29293:23;;29267:22;29277:11;29267:9;:22::i;:::-;:49;29263:1164;;-1:-1:-1;;;;;29349:20:0;;;;;;:49;;-1:-1:-1;;;;;;29373:25:0;;;;29349:49;29345:806;;;29435:22;;-1:-1:-1;;;29435:22:0;;-1:-1:-1;;;;;6373:32:1;;;29435:22:0;;;6355:51:1;29461:6:0;;29435:14;;;;;;6328:18:1;;29435:22:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;29431:693;;29588:34;;-1:-1:-1;;;29588:34:0;;-1:-1:-1;;;;;6841:32:1;;;29588:34:0;;;6823:51:1;6890:18;;;6883:34;;;29588:13:0;;;;;6796:18:1;;29588:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29662:155;29713:11;29767:15;;29763:1;:19;;;;:::i;:::-;29662:155;;;-1:-1:-1;;;;;6841:32:1;;;6823:51;;6905:2;6890:18;;6883:34;;;;6796:18;29662:155:0;;;;;;;29263:1164;;29431:693;29895:157;29948:11;30002:15;;29998:1;:19;;;;:::i;:::-;29895:157;;;-1:-1:-1;;;;;6841:32:1;;;6823:51;;6905:2;6890:18;;6883:34;;;;6796:18;29895:157:0;;;;;;;30087:5;;;29431:693;29263:1164;;;30212:191;30262:11;30308:15;;30304:1;:19;;;;:::i;:::-;30354:22;30364:11;30354:9;:22::i;:::-;30212:191;;;-1:-1:-1;;;;;8572:32:1;;;8554:51;;8636:2;8621:18;;8614:34;;;;8664:18;;;8657:34;8542:2;8527:18;30212:191:0;;;;;;;29263:1164;29074:1387;;30508:9;30498:19;;:7;:19;:::i;:::-;30487:31;;:7;:31;:::i;:::-;30477:41;;30543:9;30567:15;:17;;30533:19;;-1:-1:-1;30567:15:0;:17;;;:::i;:::-;;;;;;30599:12;;;;;:::i;:::-;;;;28911:1712;;;-1:-1:-1;;30651:12:0;30633:15;:30;-1:-1:-1;;;;;;;28095:2576:0:o;12311:68::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;12365:2:::1;:6:::0;12311:68::o;25008:223::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;25129:9:::1;25124:100;25144:15:::0;;::::1;25124:100;;;25206:6;25181:13;:22;25195:4;;25200:1;25195:7;;;;;-1:-1:-1::0;;;25195:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25181:22:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;25181:22:0;:31;;-1:-1:-1;;25181:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25161:3;::::1;::::0;::::1;:::i;:::-;;;;25124:100;;;;25008:223:::0;;;:::o;30928:120::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;31009:19:::1;:31:::0;30928:120::o;11581:404::-;11713:4;11730:36;11740:6;11748:9;11759:6;11730:9;:36::i;:::-;-1:-1:-1;;;;;11781:19:0;;5050:1;11781:19;;;:11;:19;;;;;;;;11801:10;11781:31;;;;;;;;-1:-1:-1;;11781:38:0;11777:179;;-1:-1:-1;;;;;11887:19:0;;;;;;:11;:19;;;;;;;;11907:10;11887:31;;;;;;;;:57;;11938:6;;11887:57;:::i;:::-;-1:-1:-1;;;;;11836:19:0;;;;;;:11;:19;;;;;;;;11856:10;11836:31;;;;;;;:108;11777:179;-1:-1:-1;11973:4:0;11581:404;;;;;:::o;31189:109::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;31267:14:::1;::::0;;;:10:::1;:14;::::0;;;;;:23;;-1:-1:-1;;31267:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31189:109::o;31056:125::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31142:22:0;;;::::1;;::::0;;;:16:::1;:22;::::0;;;;:31;;-1:-1:-1;;31142:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;31056:125::o;12387:185::-;-1:-1:-1;;;;;12467:20:0;;12443:7;12467:20;;;:11;:20;;;;;;;;12463:102;;;-1:-1:-1;12511:1:0;;12387:185;-1:-1:-1;12387:185:0:o;12463:102::-;-1:-1:-1;12552:1:0;;12387:185;-1:-1:-1;12387:185:0:o;25943:331::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;26068:16:::1;::::0;-1:-1:-1;;;26068:16:0;::::1;;;26060:48;;;::::0;-1:-1:-1;;;26060:48:0;;15713:2:1;26060:48:0::1;::::0;::::1;15695:21:1::0;15752:2;15732:18;;;15725:30;-1:-1:-1;;;15771:18:1;;;15764:49;15830:18;;26060:48:0::1;15685:169:1::0;26060:48:0::1;26169:9;26164:103;26180:20:::0;;::::1;26164:103;;;26250:5;26222:11;:25;26234:9;;26244:1;26234:12;;;;;-1:-1:-1::0;;;26234:12:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26222:25:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26222:25:0;:33;;-1:-1:-1;;26222:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26202:3:::1;::::0;::::1;:::i;:::-;;;26164:103;;13896:102:::0;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;13967:12:::1;:23:::0;13896:102::o;26479:91::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;26537:17:::1;:25:::0;;-1:-1:-1;;;;26537:25:0::1;::::0;;26479:91::o;27462:::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;27528:11:::1;:17:::0;;-1:-1:-1;;;;;;27528:17:0::1;-1:-1:-1::0;;;;;27528:17:0;;;::::1;::::0;;;::::1;::::0;;27462:91::o;30679:112::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;30756:18:::1;:27:::0;30679:112::o;10744:263::-;10845:9;;10810:7;;-1:-1:-1;;;;;10834:20:0;;;10845:9;;10834:20;:47;;;;-1:-1:-1;10872:9:0;;-1:-1:-1;;;;;10872:9:0;10858:10;:23;10834:47;:59;;;;-1:-1:-1;10885:8:0;;;;10834:59;10830:134;;;10928:9;;-1:-1:-1;;;;;10928:9:0;10941:1;10918:20;;;:9;:20;;;;;;10910:42;;;;-1:-1:-1;;;10910:42:0;;16061:2:1;10910:42:0;;;16043:21:1;16100:1;16080:18;;;16073:29;-1:-1:-1;;;16118:18:1;;;16111:35;16163:18;;10910:42:0;16033:154:1;10910:42:0;-1:-1:-1;;;;;;10981:18:0;;;;;:9;:18;;;;;;;10744:263::o;3094:148::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;3201:1:::1;3185:6:::0;;3164:40:::1;::::0;-1:-1:-1;;;;;3185:6:0;;::::1;::::0;3164:40:::1;::::0;3201:1;;3164:40:::1;3232:1;3215:19:::0;;-1:-1:-1;;;;;;3215:19:0::1;::::0;;3094:148::o;18149:223::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;18254:6:::1;18242:8;:18;;:41;;;;;18276:7;18264:8;:19;;18242:41;18220:110;;;::::0;-1:-1:-1;;;18220:110:0;;14335:2:1;18220:110:0::1;::::0;::::1;14317:21:1::0;14374:2;14354:18;;;14347:30;-1:-1:-1;;;14393:18:1;;;14386:49;14452:18;;18220:110:0::1;14307:169:1::0;18220:110:0::1;18341:12;:23:::0;18149:223::o;13278:344::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;13393:6:::1;13389:226;;;13543:12;;13509:14;;13479:10;;13447:12;;:42;;;;:::i;:::-;:76;;;;:::i;:::-;:108;;;;:::i;:::-;13416:11;:139:::0;13278:344;:::o;13389:226::-:1;13602:1;13588:11;:15:::0;13389:226:::1;13278:344:::0;:::o;26921:107::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;26995:15:::1;:25:::0;26921:107::o;24444:206::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;24786:18;;24833:8;;;24520:56:::1;;;::::0;-1:-1:-1;;;24520:56:0;;10543:2:1;24520:56:0::1;::::0;::::1;10525:21:1::0;10582:2;10562:18;;;10555:30;10621:28;10601:18;;;10594:56;10667:18;;24520:56:0::1;10515:176:1::0;24520:56:0::1;24587:11;:18:::0;;-1:-1:-1;;;;;24587:18:0;;::::1;-1:-1:-1::0;;;;;;24587:18:0;;::::1;::::0;::::1;::::0;;:11:::1;24616:19:::0;;;:13:::1;:19;::::0;;;;:26;;-1:-1:-1;;24616:26:0::1;24587:18:::0;24616:26:::1;::::0;;24444:206::o;12178:125::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12264:22:0;;;::::1;;::::0;;;:14:::1;:22;::::0;;;;:31;;-1:-1:-1;;12264:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;12178:125::o;26282:94::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;26341:19:::1;:27:::0;;-1:-1:-1;;26341:27:0::1;::::0;;26282:94::o;18776:155::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;18866:4:::1;18854:8;:16;;18846:44;;;::::0;-1:-1:-1;;;18846:44:0;;13650:2:1;18846:44:0::1;::::0;::::1;13632:21:1::0;13689:2;13669:18;;;13662:30;-1:-1:-1;;;13708:18:1;;;13701:45;13763:18;;18846:44:0::1;13622:165:1::0;18846:44:0::1;18901:11;:22:::0;18776:155::o;10209:98::-;10259:13;10292:7;10285:14;;;;;:::i;6038:27::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6038:27:0;;-1:-1:-1;6038:27:0;:::o;26673:118::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26755:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;26755:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26673:118::o;11015:190::-;11118:4;11135:40;11145:10;11157:9;11168:6;11135:9;:40::i;25239:696::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;25330:15:::1;::::0;-1:-1:-1;;;25330:15:0;::::1;;;25322:47;;;::::0;-1:-1:-1;;;25322:47:0;;15365:2:1;25322:47:0::1;::::0;::::1;15347:21:1::0;15404:2;15384:18;;;15377:30;-1:-1:-1;;;15423:18:1;;;15416:49;15482:18;;25322:47:0::1;15337:169:1::0;25322:47:0::1;25394:7;;25402:1;25394:10;;;;;-1:-1:-1::0;;;25394:10:0::1;;;;;;;;;;;::::0;;;::::1;;25380:11;:24:::0;-1:-1:-1;25427:7:0;;25435:1:::1;25427:10:::0;;::::1;;;-1:-1:-1::0;;;25427:10:0::1;;;;;;;;;;;::::0;;;::::1;;25415:9;:22:::0;-1:-1:-1;25464:7:0;;25472:1:::1;25464:10:::0;;::::1;;;-1:-1:-1::0;;;25464:10:0::1;;;;;;;;;;;::::0;;;::::1;;25448:13;:26:::0;-1:-1:-1;25499:7:0;;25507:1:::1;25499:10:::0;;::::1;;;-1:-1:-1::0;;;25499:10:0::1;;;;;;;;;;;::::0;;;::::1;;25485:11;:24:::0;-1:-1:-1;25537:7:0;;25545:1:::1;25537:10:::0;;::::1;;;-1:-1:-1::0;;;25537:10:0::1;;;;;;;;;;;::::0;;;::::1;;25522:12;:25:::0;-1:-1:-1;25571:7:0;;25579:1:::1;25571:10:::0;;::::1;;;-1:-1:-1::0;;;25571:10:0::1;;;;;;;;;;;::::0;;;::::1;;25558;:23:::0;-1:-1:-1;25609:7:0;;25617:1:::1;25609:10:::0;;::::1;;;-1:-1:-1::0;;;25609:10:0::1;;;;;;;;;;;::::0;;;::::1;;25592:14;:27:::0;-1:-1:-1;25645:7:0;;25653:1:::1;25645:10:::0;;::::1;;;-1:-1:-1::0;;;25645:10:0::1;;;;;;;;;;;;;;;25630:12;:25;;;;25746:4;25732:11;;25718;;25706:9;;25690:13;;:25;;;;:::i;:::-;:39;;;;:::i;:::-;:53;;;;:::i;:::-;:60;25668:122;;;::::0;-1:-1:-1;;;25668:122:0;;13994:2:1;25668:122:0::1;::::0;::::1;13976:21:1::0;14033:2;14013:18;;;14006:30;-1:-1:-1;;;14052:18:1;;;14045:42;14104:18;;25668:122:0::1;13966:162:1::0;25668:122:0::1;25883:4;25868:12;;25853;;25840:10;;25823:14;;:27;;;;:::i;:::-;:42;;;;:::i;:::-;:57;;;;:::i;:::-;:64;25801:126;;;::::0;-1:-1:-1;;;25801:126:0;;13994:2:1;25801:126:0::1;::::0;::::1;13976:21:1::0;14033:2;14013:18;;;14006:30;-1:-1:-1;;;14052:18:1;;;14045:42;14104:18;;25801:126:0::1;13966:162:1::0;25801:126:0::1;25239:696:::0;;:::o;27036:334::-;27127:6;;-1:-1:-1;;;;;27127:6:0;27137:10;27127:20;;:49;;-1:-1:-1;27151:11:0;;-1:-1:-1;;;;;27151:11:0;27166:10;27151:25;27127:49;27119:69;;;;-1:-1:-1;;;27119:69:0;;15030:2:1;27119:69:0;;;15012:21:1;15069:1;15049:18;;;15042:29;-1:-1:-1;;;15087:18:1;;;15080:37;15134:18;;27119:69:0;15002:156:1;27119:69:0;-1:-1:-1;;;;;27205:19:0;;27201:162;;27241:11;;:43;;-1:-1:-1;;;;;27241:11:0;;;;27262:21;27241:43;;;;;:11;:43;:11;:43;27262:21;27241:11;:43;;;;;;;;;;;;;;;;;;;27201:162;27317:34;;-1:-1:-1;;;27317:34:0;;-1:-1:-1;;;;;6841:32:1;;;27317:34:0;;;6823:51:1;6890:18;;;6883:34;;;27317:22:0;;;;;6796:18:1;;27317:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26799:114::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;26877:12:::1;:28:::0;26799:114::o;30799:121::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;30880:23:::1;:32:::0;30799:121::o;21312:120::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;21392:22:::1;:32:::0;;-1:-1:-1;;;;;;21392:32:0::1;-1:-1:-1::0;;;;;21392:32:0;;;::::1;::::0;;;::::1;::::0;;21312:120::o;13067:157::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;13158:1:::1;13146:8;:13;;13138:44;;;::::0;-1:-1:-1;;;13138:44:0;;14683:2:1;13138:44:0::1;::::0;::::1;14665:21:1::0;14722:2;14702:18;;;14695:30;-1:-1:-1;;;14741:18:1;;;14734:48;14799:18;;13138:44:0::1;14655:168:1::0;13138:44:0::1;13193:12;:23:::0;13067:157::o;10653:83::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;10716:8:::1;:12:::0;;-1:-1:-1;;10716:12:0::1;::::0;::::1;;::::0;;;::::1;::::0;;10653:83::o;3250:214::-;3035:6;;-1:-1:-1;;;;;3035:6:0;3045:10;3035:20;3027:39;;;;-1:-1:-1;;;3027:39:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3339:22:0;::::1;3331:43;;;::::0;-1:-1:-1;;;3331:43:0;;13314:2:1;3331:43:0::1;::::0;::::1;13296:21:1::0;13353:1;13333:18;;;13326:29;-1:-1:-1;;;13371:18:1;;;13364:38;13419:18;;3331:43:0::1;13286:157:1::0;3331:43:0::1;3411:6;::::0;;3390:38:::1;::::0;-1:-1:-1;;;;;3390:38:0;;::::1;::::0;3411:6;::::1;::::0;3390:38:::1;::::0;::::1;3439:6;:17:::0;;-1:-1:-1;;;;;;3439:17:0::1;-1:-1:-1::0;;;;;3439:17:0;;;::::1;::::0;;;::::1;::::0;;3250:214::o;11993:177::-;-1:-1:-1;;;;;12078:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12130:32;;9507:25:1;;;12130:32:0;;9480:18:1;12130:32:0;;;;;;;;11993:177;;;:::o;14006:4054::-;-1:-1:-1;;;;;14104:15:0;;14086;14104;;;:9;:15;;;;;;14138:17;;;;14130:46;;;;-1:-1:-1;;;14130:46:0;;12626:2:1;14130:46:0;;;12608:21:1;12665:2;12645:18;;;12638:30;-1:-1:-1;;;12684:18:1;;;12677:46;12740:18;;14130:46:0;12598:166:1;14130:46:0;14210:1;14193:14;14202:4;14193:8;:14::i;:::-;:18;14189:83;;;14228:32;;-1:-1:-1;;;14228:32:0;;12971:2:1;14228:32:0;;;12953:21:1;13010:2;12990:18;;;12983:30;-1:-1:-1;;;13029:18:1;;;13022:44;13083:18;;14228:32:0;12943:164:1;14228:32:0;-1:-1:-1;;;;;14378:19:0;;14284:12;14378:19;;;:13;:19;;;;;;14284:12;;;;14378:19;;14377:20;:55;;;;-1:-1:-1;;;;;;14415:17:0;;;;;;:13;:17;;;;;;;;14414:18;14377:55;:85;;;;-1:-1:-1;14449:13:0;;;;;;;14377:85;:118;;;;;14494:1;14479:12;;:16;14377:118;:177;;;;-1:-1:-1;;;;;;14513:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;14536:17:0;;;;;;:13;:17;;;;;;;;14513:40;14359:718;;;14581:10;;14606:419;14630:12;;14626:1;:16;14606:419;;;14819:44;;;;;;6077:19:1;;;6112:12;;;6105:28;;;14847:15:0;6149:12:1;;;6142:28;6186:12;;14819:44:0;;;;;;;;;;;;14775:119;;;;;;14737:184;;14668:295;;14982:27;14997:4;15003:2;15007:1;14982:14;:27::i;:::-;-1:-1:-1;14644:3:0;;;;:::i;:::-;;;;14606:419;;;-1:-1:-1;15049:12:0;;:16;;15064:1;15049:16;:::i;:::-;15039:26;;;;:::i;:::-;;;14359:718;;15093:15;;:20;:38;;;;-1:-1:-1;15117:14:0;;-1:-1:-1;;;15117:14:0;;;;15093:38;15089:327;;;-1:-1:-1;;;;;15171:19:0;;;;;;:13;:19;;;;;;;;15170:20;:59;;;;-1:-1:-1;;;;;;15212:17:0;;;;;;:13;:17;;;;;;;;15211:18;15170:59;:100;;;;-1:-1:-1;;;;;;15251:19:0;;;;;;:13;:19;;;;;;;;15250:20;15170:100;:139;;;;-1:-1:-1;;;;;;15292:17:0;;;;;;:13;:17;;;;;;;;15291:18;15170:139;15148:257;;;24786:18;;24833:8;;;15344:45;;;;-1:-1:-1;;;15344:45:0;;12280:2:1;15344:45:0;;;12262:21:1;12319:2;12299:18;;;12292:30;-1:-1:-1;;;12338:18:1;;;12331:47;12395:18;;15344:45:0;12252:167:1;15344:45:0;-1:-1:-1;;;;;15432:19:0;;;;;;:13;:19;;;;;;;;;:40;;-1:-1:-1;;;;;;15455:17:0;;;;;;:13;:17;;;;;;;;15432:40;15428:2260;;;-1:-1:-1;;;;;15494:19:0;;;;;;:13;:19;;;;;;;;15493:20;:42;;;;-1:-1:-1;;;;;;15518:17:0;;;;;;:13;:17;;;;;;;;15517:18;15493:42;15489:2103;;;15560:14;;-1:-1:-1;;;15560:14:0;;;;:38;;;;-1:-1:-1;15583:15:0;;15578:20;15560:38;15556:101;;;15623:14;;;;15701;;-1:-1:-1;;;15701:14:0;;;;:54;;;;-1:-1:-1;15740:15:0;;-1:-1:-1;;;15740:15:0;;;;15701:54;:114;;;;;15813:2;;15795:15;;:20;;;;:::i;:::-;15780:12;:35;15701:114;:157;;;;-1:-1:-1;;;;;;15841:17:0;;;;;;:13;:17;;;;;;;;15840:18;15701:157;15675:324;;;-1:-1:-1;;;;;15901:15:0;;;;;;:11;:15;;;;;:22;;-1:-1:-1;;15901:22:0;15919:4;15901:22;;;15675:324;16045:19;;;;:63;;;;-1:-1:-1;;;;;;16089:19:0;;;;;;:13;:19;;;;;;;;16045:63;:141;;;;;16166:20;;16148:15;;:38;;;;:::i;:::-;16133:12;:53;16045:141;16019:519;;;16261:9;16249:22;;;;:11;:22;;;;;;16233:12;:38;16229:290;;16312:9;16300:22;;;;:11;:22;;;;;16325:12;16300:37;;16229:290;;;16394:9;:11;;;:9;:11;;;:::i;:::-;;;;;;16432:30;16445:4;16451:2;16455:6;16432:12;:30::i;:::-;16489:7;;;;14006:4054;;;:::o;16229:290::-;-1:-1:-1;;;;;16562:17:0;;;;;;:13;:17;;;;;;;;16558:969;;;16609:6;;;;16604:904;;16693:4;16644:28;16675:24;;;:9;:24;;;;;;16753:12;;16730:35;;16726:759;;;16798:15;17055:10;;17005:14;;16957:12;;16912:9;;16863:13;;16816:11;;:60;;;;:::i;:::-;:105;;;;:::i;:::-;:153;;;;:::i;:::-;:203;;;;:::i;:::-;:249;;;;:::i;:::-;16798:267;;17096:27;17190:3;17169:17;;17127:6;:59;;;;:::i;:::-;17126:67;;;;:::i;:::-;17096:97;;17250:20;17228:19;:42;17224:157;;;-1:-1:-1;17329:20:0;17224:157;17411:46;17428:19;17449:7;17411:16;:46::i;:::-;16726:759;;;16604:904;;17555:4;17545:14;;15489:2103;-1:-1:-1;;;;;17610:17:0;;;;;;:13;:17;;;;;;;;17606:71;;;17657:4;17648:13;;17606:71;-1:-1:-1;;;;;17705:19:0;;;;;;:13;:19;;;;;;;;17704:20;:42;;;;-1:-1:-1;;;;;;17729:17:0;;;;;;:13;:17;;;;;;;;17728:18;17704:42;17700:92;;;-1:-1:-1;17776:4:0;17700:92;17804:61;17819:4;17825:2;17829:6;17837:7;17846:6;17854:10;17804:14;:61::i;:::-;-1:-1:-1;;;;;17882:21:0;;17898:4;17882:21;;;;:32;;-1:-1:-1;17908:6:0;;;;17907:7;17882:32;17878:175;;;17954:12;;17935:32;;-1:-1:-1;;;17935:32:0;;;;;9507:25:1;;;;17935:4:0;;:18;;9480::1;;17935:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17931:111;;18001:25;;;;;;;17931:111;;12726:293;-1:-1:-1;;;;;12870:17:0;;12853:4;12870:17;;;:9;:17;;;;;:27;;12891:6;;12870:17;12853:4;;12870:27;;12891:6;;12870:27;:::i;:::-;;;;-1:-1:-1;;;;;;;12908:20:0;;;;;;:9;:20;;;;;:30;;12932:6;;12908:20;:30;;12932:6;;12908:30;:::i;:::-;;;;;;;;12971:9;-1:-1:-1;;;;;12954:35:0;12963:6;-1:-1:-1;;;;;12954:35:0;;12982:6;12954:35;;;;9507:25:1;;9495:2;9480:18;;9462:76;12954:35:0;;;;;;;;-1:-1:-1;13007:4:0;12726:293;;;;;:::o;18380:353::-;-1:-1:-1;;;;;18527:17:0;;;;;;:9;:17;;;;;;:27;;18547:7;;18527:27;:::i;:::-;-1:-1:-1;;;;;18507:17:0;;;;;;:9;:17;;;;;:47;;;;18602:3;18586:12;:7;18596:2;18586:12;:::i;:::-;18585:20;;;;:::i;:::-;18638:11;;18565:40;;-1:-1:-1;18616:45:0;;18630:6;;-1:-1:-1;;;;;18638:11:0;18565:40;18616:13;:45::i;:::-;18672:53;18686:6;18694:9;18705:19;18715:9;18705:7;:19;:::i;:::-;18672:13;:53::i;21440:2775::-;5764:6;:13;;-1:-1:-1;;5764:13:0;5773:4;5764:13;;;21564:12;;;:32:::1;;-1:-1:-1::0;21580:16:0;;21564:32:::1;21560:71;;;21613:7;;21560:71;21643:13;21672:9;;21659:10;;:22;;;;:::i;:::-;21643:38:::0;-1:-1:-1;21692:16:0::1;21739:7:::0;21735:1:::1;21712:19;21643:38:::0;21712:11;:19:::1;:::i;:::-;21711:25;;;;:::i;:::-;:35;;;;:::i;:::-;21692:54:::0;-1:-1:-1;21757:18:0::1;21788:9;21796:1;21788:5:::0;:9:::1;:::i;:::-;21778:19;::::0;:7;:19:::1;:::i;:::-;21829:8;::::0;21885:16:::1;::::0;;21899:1:::1;21885:16:::0;;;;;::::1;::::0;;21757:40;;-1:-1:-1;;;;;;21829:8:0;;::::1;::::0;21810:9:::1;::::0;21885:16;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;21885:16:0::1;21851:50;;21940:4;21912:14;21927:1;21912:17;;;;;;-1:-1:-1::0;;;21912:17:0::1;;;;;;;;;-1:-1:-1::0;;;;;21912:33:0;;::::1;:17;::::0;;::::1;::::0;;;;;:33;21976:8:::1;::::0;21956:17;;21976:8;::::1;::::0;21956:14;;21976:8;;21956:17;::::1;;;-1:-1:-1::0;;;21956:17:0::1;;;;;;;;;-1:-1:-1::0;;;;;21956:28:0;;::::1;:17;::::0;;::::1;::::0;;;;;:28;22012:11:::1;::::0;::::1;:65;22096:22;22110:8:::0;22096:11;:22:::1;:::i;:::-;22198:17;::::0;22012:253:::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;;22012:253:0;;;::::1;::::0;;22137:1:::1;::::0;22157:14;;22198:17:::1;::::0;::::1;-1:-1:-1::0;;;;;22198:17:0::1;::::0;22235:15:::1;::::0;22012:253:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;21995:416;;22304:95;::::0;22383:1:::1;9507:25:1::0;;22304:95:0::1;::::0;9495:2:1;9480:18;22304:95:0::1;;;;;;;21995:416;22461:17;::::0;22440:40:::1;::::0;-1:-1:-1;;;22440:40:0;;-1:-1:-1;;;;;22461:17:0::1;::::0;;::::1;::::0;::::1;22440:40;::::0;::::1;6355:51:1::0;-1:-1:-1;;22440:12:0;::::1;::::0;::::1;::::0;6328:18:1;;22440:40:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22423:57:::0;-1:-1:-1;22495:11:0;;22491:110:::1;;22547:17;::::0;22523:66:::1;::::0;-1:-1:-1;;;22523:66:0;;22547:17:::1;::::0;;::::1;-1:-1:-1::0;;;;;22547:17:0;;::::1;22523:66;::::0;::::1;7168:34:1::0;22575:4:0::1;7218:18:1::0;;;7211:43;7270:18;;;7263:34;;;22523:15:0;::::1;::::0;::::1;::::0;7103:18:1;;22523:66:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22491:110;22613:18;22657:10:::0;22653:1:::1;22635:14;22644:5:::0;22635:6;:14:::1;:::i;:::-;22634:20;;;;:::i;:::-;:33;;;;:::i;:::-;22613:54;;22678:17;22753:10;22723:12;;22709:11;;:26;;;;:::i;:::-;22699:37;::::0;:6;:37:::1;:::i;:::-;22698:65;;;;:::i;:::-;22678:85:::0;-1:-1:-1;22797:13:0;;22793:310:::1;;22831:13;::::0;::::1;;22827:215;;;22871:8;::::0;22865:35:::1;::::0;-1:-1:-1;;;22865:35:0;;::::1;::::0;::::1;9507:25:1::0;;;-1:-1:-1;;;;;22871:8:0;;::::1;::::0;22865:24:::1;::::0;9480:18:1;;22865:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22919:11:0::1;::::0;:31:::1;::::0;-1:-1:-1;;;;;22919:11:0;;::::1;::::0;-1:-1:-1;22919:31:0;::::1;;;::::0;-1:-1:-1;22940:9:0;;22919:11:::1;:31:::0;:11;:31;22940:9;22919:11;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;22827:215;;;23003:11;::::0;22991:35:::1;::::0;-1:-1:-1;;;22991:35:0;;-1:-1:-1;;;;;23003:11:0;;::::1;22991:35;::::0;::::1;6823:51:1::0;6890:18;;;6883:34;;;22991:11:0;;::::1;::::0;::::1;::::0;6796:18:1;;22991:35:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22827:215;23082:9;23056:22;;:35;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;22793:310:0::1;23154:1;23143:8;:12;:30;;;;;23172:1;23159:10;:14;23143:30;23139:481;;;23211:11;::::0;23302:8:::1;::::0;23446:22:::1;::::0;23211:314:::1;::::0;-1:-1:-1;;;23211:314:0;;23266:4:::1;23211:314;::::0;::::1;7705:34:1::0;-1:-1:-1;;;;;23302:8:0;;::::1;7755:18:1::0;;;7748:43;7807:18;;;7800:34;;;7850:18;;;7843:34;;;23211:11:0::1;7893:19:1::0;;;7886:35;;;7937:19;;;7930:35;23446:22:0;;::::1;7981:19:1::0;;;7974:44;23491:15:0::1;8034:19:1::0;;;8027:35;23211:11:0;::::1;::::0;:24:::1;::::0;7639:19:1;;23211:314:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;23211:314:0::1;::::0;;::::1;;::::0;;::::1;-1:-1:-1::0;;23211:314:0::1;::::0;::::1;::::0;;;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;23190:419;;23572:21;::::0;::::1;::::0;;;::::1;23190:419;;;;;;;23672:14;;23656:13;;:30;;;;:::i;:::-;23652:74;;23708:7;;;;;;;;;;23652:74;23749:8;::::0;23742:3:::1;::::0;23749:8:::1;23742:3:::0;::::1;-1:-1:-1::0;;;;;23742:3:0;;::::1;23749:8:::0;::::1;23742:15;23738:54;;;23774:7;;;;;;;;;;23738:54;23821:11;::::0;23905:27:::1;::::0;-1:-1:-1;;;23905:27:0;;23926:4:::1;23905:27;::::0;::::1;6355:51:1::0;-1:-1:-1;;;;;23821:11:0;;::::1;::::0;:65:::1;::::0;23905:12;;::::1;::::0;::::1;::::0;6328:18:1;;23905:27:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23951:1;23971:10;24008:4;24032:15;23821:241;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;23804:404;;24101:95;::::0;24180:1:::1;9507:25:1::0;;24101:95:0::1;::::0;9495:2:1;9480:18;24101:95:0::1;;;;;;;23804:404;5788:1;;;;;;;;;-1:-1:-1::0;;5800:6:0;:14;;-1:-1:-1;;5800:14:0;;;21440:2775::o;18939:2021::-;-1:-1:-1;;;;;19159:17:0;;;;;;:9;:17;;;;;;:27;;19179:7;;19159:27;:::i;:::-;-1:-1:-1;;;;;19139:17:0;;;;;;:9;:17;;;;;:47;;;;19227:1054;;;;19255:15;19289:6;19285:326;;;19358:10;;19341:14;;19326:12;;:29;;;;:::i;:::-;:42;;;;:::i;:::-;19316:52;;19285:326;;;19445:13;;19433:9;;19419:11;;:23;;;;:::i;:::-;:39;;;;:::i;:::-;19481:15;;19409:49;;-1:-1:-1;;;;19481:15:0;;;;19477:119;;;19540:12;;19529:7;:23;;19521:55;;;;-1:-1:-1;;;19521:55:0;;10898:2:1;19521:55:0;;;10880:21:1;10937:2;10917:18;;;10910:30;-1:-1:-1;;;10956:18:1;;;10949:49;11015:18;;19521:55:0;10870:169:1;19521:55:0;19627:18;19670:5;19649:17;19659:7;19649;:17;:::i;:::-;19648:27;;;;:::i;:::-;19627:48;-1:-1:-1;19694:14:0;;19690:145;;19729:23;19742:10;19729:23;;:::i;:::-;;;19771:48;19785:6;19801:4;19808:10;19771:13;:48::i;:::-;19851:18;19889:6;19884:225;;19978:5;19963:11;;19953:7;:21;;;;:::i;:::-;19952:31;;;;:::i;:::-;19939:44;;19884:225;;;20088:5;20072:12;;20062:7;:22;;;;:::i;:::-;20061:32;;;;:::i;:::-;20048:45;;19884:225;20127:14;;20123:147;;20162:23;20175:10;20162:23;;:::i;:::-;;;20204:50;20218:6;20234;20243:10;20204:13;:50::i;:::-;19227:1054;;;;20297:10;:36;;;;-1:-1:-1;;;;;;20312:21:0;;;;;;:13;:21;;;;;;;;20311:22;20297:36;:65;;;;-1:-1:-1;;;;;;20338:24:0;;;;;;:13;:24;;;;;;;;20337:25;20297:65;20293:371;;;20379:25;20465:5;20450:11;;20440:7;:21;;;;:::i;:::-;20439:31;;;;:::i;:::-;20419:51;-1:-1:-1;20491:21:0;;20487:166;;20533:30;20546:17;20533:30;;:::i;:::-;;;20582:55;20596:6;20612:4;20619:17;20582:13;:55::i;:::-;20293:371;;-1:-1:-1;;;;;20681:25:0;;;;;;:14;:25;;;;;;;;20680:26;:47;;;;-1:-1:-1;20710:17:0;;-1:-1:-1;;;20710:17:0;;;;20680:47;20676:212;;;20816:15;;-1:-1:-1;;;;;20769:20:0;;;;;;:9;:20;;;;;;20802:9;;20769:30;;20792:7;;20769:30;:::i;:::-;:42;;;;:::i;:::-;20768:63;;20742:146;;;;-1:-1:-1;;;20742:146:0;;11589:2:1;20742:146:0;;;11571:21:1;11628:2;11608:18;;;11601:30;-1:-1:-1;;;11647:18:1;;;11640:51;11708:18;;20742:146:0;11561:171:1;20742:146:0;20899:53;20913:6;20921:9;20932:19;20942:9;20932:7;:19;:::i;24223:213::-;-1:-1:-1;;;;;24360:13:0;;;;;;:9;:13;;;;;;:23;;24376:7;;24360:23;:::i;:::-;-1:-1:-1;;;;;24344:13:0;;;;;;;:9;:13;;;;;;;:39;;;;24399:29;;;;;;;;;;24420:7;9507:25:1;;9495:2;9480:18;;9462:76;14:395;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:2;;166:8;156;149:26;108:2;-1:-1:-1;196:20:1;;239:18;228:30;;225:2;;;278:8;268;261:26;225:2;322:4;314:6;310:17;298:29;;382:3;375:4;365:6;362:1;358:14;350:6;346:27;342:38;339:47;336:2;;;399:1;396;389:12;336:2;98:311;;;;;:::o;414:257::-;473:6;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;591:9;578:23;610:31;635:5;610:31;:::i;:::-;660:5;484:187;-1:-1:-1;;;484:187:1:o;676:261::-;746:6;799:2;787:9;778:7;774:23;770:32;767:2;;;820:6;812;805:22;767:2;857:9;851:16;876:31;901:5;876:31;:::i;1212:398::-;1280:6;1288;1341:2;1329:9;1320:7;1316:23;1312:32;1309:2;;;1362:6;1354;1347:22;1309:2;1406:9;1393:23;1425:31;1450:5;1425:31;:::i;:::-;1475:5;-1:-1:-1;1532:2:1;1517:18;;1504:32;1545:33;1504:32;1545:33;:::i;:::-;1597:7;1587:17;;;1299:311;;;;;:::o;1615:466::-;1692:6;1700;1708;1761:2;1749:9;1740:7;1736:23;1732:32;1729:2;;;1782:6;1774;1767:22;1729:2;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1719:362;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1719:362::o;2086:392::-;2151:6;2159;2212:2;2200:9;2191:7;2187:23;2183:32;2180:2;;;2233:6;2225;2218:22;2180:2;2277:9;2264:23;2296:31;2321:5;2296:31;:::i;:::-;2346:5;-1:-1:-1;2403:2:1;2388:18;;2375:32;2416:30;2375:32;2416:30;:::i;2483:325::-;2551:6;2559;2612:2;2600:9;2591:7;2587:23;2583:32;2580:2;;;2633:6;2625;2618:22;2580:2;2677:9;2664:23;2696:31;2721:5;2696:31;:::i;:::-;2746:5;2798:2;2783:18;;;;2770:32;;-1:-1:-1;;;2570:238:1:o;2813:466::-;2890:6;2898;2906;2959:2;2947:9;2938:7;2934:23;2930:32;2927:2;;;2980:6;2972;2965:22;2927:2;3024:9;3011:23;3043:31;3068:5;3043:31;:::i;:::-;3093:5;-1:-1:-1;3145:2:1;3130:18;;3117:32;;-1:-1:-1;3201:2:1;3186:18;;3173:32;3214:33;3173:32;3214:33;:::i;:::-;3266:7;3256:17;;;2917:362;;;;;:::o;3284:586::-;3376:6;3384;3392;3445:2;3433:9;3424:7;3420:23;3416:32;3413:2;;;3466:6;3458;3451:22;3413:2;3511:9;3498:23;3544:18;3536:6;3533:30;3530:2;;;3581:6;3573;3566:22;3530:2;3625:70;3687:7;3678:6;3667:9;3663:22;3625:70;:::i;:::-;3714:8;;-1:-1:-1;3599:96:1;-1:-1:-1;;3799:2:1;3784:18;;3771:32;3812:28;3771:32;3812:28;:::i;3875:457::-;3961:6;3969;4022:2;4010:9;4001:7;3997:23;3993:32;3990:2;;;4043:6;4035;4028:22;3990:2;4088:9;4075:23;4121:18;4113:6;4110:30;4107:2;;;4158:6;4150;4143:22;4107:2;4202:70;4264:7;4255:6;4244:9;4240:22;4202:70;:::i;:::-;4291:8;;4176:96;;-1:-1:-1;3980:352:1;-1:-1:-1;;;;3980:352:1:o;4337:251::-;4393:6;4446:2;4434:9;4425:7;4421:23;4417:32;4414:2;;;4467:6;4459;4452:22;4414:2;4511:9;4498:23;4530:28;4552:5;4530:28;:::i;4593:255::-;4660:6;4713:2;4701:9;4692:7;4688:23;4684:32;4681:2;;;4734:6;4726;4719:22;4681:2;4771:9;4765:16;4790:28;4812:5;4790:28;:::i;4853:190::-;4912:6;4965:2;4953:9;4944:7;4940:23;4936:32;4933:2;;;4986:6;4978;4971:22;4933:2;-1:-1:-1;5014:23:1;;4923:120;-1:-1:-1;4923:120:1:o;5048:194::-;5118:6;5171:2;5159:9;5150:7;5146:23;5142:32;5139:2;;;5192:6;5184;5177:22;5139:2;-1:-1:-1;5220:16:1;;5129:113;-1:-1:-1;5129:113:1:o;5247:319::-;5312:6;5320;5373:2;5361:9;5352:7;5348:23;5344:32;5341:2;;;5394:6;5386;5379:22;5341:2;5435:9;5422:23;5412:33;;5495:2;5484:9;5480:18;5467:32;5508:28;5530:5;5508:28;:::i;5571:316::-;5659:6;5667;5675;5728:2;5716:9;5707:7;5703:23;5699:32;5696:2;;;5749:6;5741;5734:22;5696:2;5783:9;5777:16;5767:26;;5833:2;5822:9;5818:18;5812:25;5802:35;;5877:2;5866:9;5862:18;5856:25;5846:35;;5686:201;;;;;:::o;9733:603::-;9845:4;9874:2;9903;9892:9;9885:21;9935:6;9929:13;9978:6;9973:2;9962:9;9958:18;9951:34;10003:4;10016:140;10030:6;10027:1;10024:13;10016:140;;;10125:14;;;10121:23;;10115:30;10091:17;;;10110:2;10087:26;10080:66;10045:10;;10016:140;;;10174:6;10171:1;10168:13;10165:2;;;10244:4;10239:2;10230:6;10219:9;10215:22;10211:31;10204:45;10165:2;-1:-1:-1;10320:2:1;10299:15;-1:-1:-1;;10295:29:1;10280:45;;;;10327:2;10276:54;;9854:482;-1:-1:-1;;;9854:482:1:o;16192:329::-;16394:2;16376:21;;;16433:1;16413:18;;;16406:29;-1:-1:-1;;;16466:2:1;16451:18;;16444:36;16512:2;16497:18;;16366:155::o;16708:983::-;16970:4;17018:3;17007:9;17003:19;17049:6;17038:9;17031:25;17075:2;17113:6;17108:2;17097:9;17093:18;17086:34;17156:3;17151:2;17140:9;17136:18;17129:31;17180:6;17215;17209:13;17246:6;17238;17231:22;17284:3;17273:9;17269:19;17262:26;;17323:2;17315:6;17311:15;17297:29;;17344:4;17357:195;17371:6;17368:1;17365:13;17357:195;;;17436:13;;-1:-1:-1;;;;;17432:39:1;17420:52;;17527:15;;;;17492:12;;;;17468:1;17386:9;17357:195;;;-1:-1:-1;;;;;;;17608:32:1;;;;17603:2;17588:18;;17581:60;-1:-1:-1;;;17672:3:1;17657:19;17650:35;17569:3;16979:712;-1:-1:-1;;;16979:712:1:o;17696:1012::-;17955:4;18003:3;17992:9;17988:19;18034:6;18023:9;18016:25;18060:2;18098:6;18093:2;18082:9;18078:18;18071:34;18141:3;18136:2;18125:9;18121:18;18114:31;18165:6;18200;18194:13;18231:6;18223;18216:22;18269:3;18258:9;18254:19;18247:26;;18295:6;18289:4;18282:20;18341:2;18335:4;18325:19;18311:33;;18362:4;18375:194;18389:6;18386:1;18383:13;18375:194;;;18454:13;;-1:-1:-1;;;;;18450:39:1;18438:52;;18486:1;18545:14;;;;18510:12;;;;18404:9;18375:194;;18713:128;18753:3;18784:1;18780:6;18777:1;18774:13;18771:2;;;18790:18;;:::i;:::-;-1:-1:-1;18826:9:1;;18761:80::o;18846:217::-;18886:1;18912;18902:2;;-1:-1:-1;;;18937:31:1;;18991:4;18988:1;18981:15;19019:4;18944:1;19009:15;18902:2;-1:-1:-1;19048:9:1;;18892:171::o;19068:168::-;19108:7;19174:1;19170;19166:6;19162:14;19159:1;19156:21;19151:1;19144:9;19137:17;19133:45;19130:2;;;19181:18;;:::i;:::-;-1:-1:-1;19221:9:1;;19120:116::o;19241:125::-;19281:4;19309:1;19306;19303:8;19300:2;;;19314:18;;:::i;:::-;-1:-1:-1;19351:9:1;;19290:76::o;19371:380::-;19450:1;19446:12;;;;19493;;;19514:2;;19568:4;19560:6;19556:17;19546:27;;19514:2;19621;19613:6;19610:14;19590:18;19587:38;19584:2;;;19667:10;19662:3;19658:20;19655:1;19648:31;19702:4;19699:1;19692:15;19730:4;19727:1;19720:15;19584:2;;19426:325;;;:::o;19756:135::-;19795:3;-1:-1:-1;;19816:17:1;;19813:2;;;19836:18;;:::i;:::-;-1:-1:-1;19883:1:1;19872:13;;19803:88::o;19896:127::-;19957:10;19952:3;19948:20;19945:1;19938:31;19988:4;19985:1;19978:15;20012:4;20009:1;20002:15;20028:131;-1:-1:-1;;;;;20103:31:1;;20093:42;;20083:2;;20149:1;20146;20139:12;20164:118;20250:5;20243:13;20236:21;20229:5;20226:32;20216:2;;20272:1;20269;20262:12

Swarm Source

ipfs://53b8dc8a1050c2a1ce98e3883e6d61886a9ada6d40c727747f561bc62646d912

Block Transaction Gas Used Reward
view all blocks produced
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
View All Validatorset

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.