ETH Price: $3,108.78 (+1.32%)
Gas: 7 Gwei

Token

Incinerator (INC)
 

Overview

Max Total Supply

95,424,233.45460421259994668 INC

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1 INC

Value
$0.00
0x73a4eeecfdd0919611491fb850b8e1e2b281657a
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Incineratorf

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-29
*/

/*
       
       Incinerator LETS BURN

*/

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

library SafeMath {
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

interface IBEP20 {
    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 IBEP20Metadata is IBEP20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

contract BEP20 is Context, IBEP20, IBEP20Metadata {
    using SafeMath for uint256;
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 internal _totalSupply;
    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue,
                "BEP20: decreased allowance below zero"));
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(amount,"BEP20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

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

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

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

abstract contract Ownable is Context {

    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 value);
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint256);

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

    event Swap(address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out,
               uint256 amount1Out, address indexed to);
    event Sync(uint112 reserve0, uint112 reserve1);

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

    function price0CumulativeLast() external view returns (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

    function swap(uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data) external;

    function skim(address to) external;
    function sync() external;
    function initialize(address, address) external;
}

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

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

    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);

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

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

    function removeLiquidityWithPermit(address tokenA, address tokenB, uint256 liquidity,
                                       uint256 amountAMin, uint256 amountBMin, address to,
                                       uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                       external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(address token, uint256 liquidity, uint256 amountTokenMin,
                                          uint256 amountETHMin, address to, uint256 deadline,
                                          bool approveMax, uint8 v, bytes32 r, bytes32 s) 
                                          external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                      address to, uint256 deadline) 
                                      external returns (uint256[] memory amounts);

    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path,
                                   address to, uint256 deadline) 
                                   external returns (uint256[] memory amounts);

    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to,
                                   uint256 deadline) 
                                   external payable returns (uint256[] memory amounts);

    function quote(uint256 amountA, uint256 reserveA, uint256 reserveB) 
                   external pure returns (uint256 amountB);

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) 
                          external pure returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) 
                         external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
                           external view returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
                          external view returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline) 
        external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(address token, uint256 liquidity,
        uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax,
        uint8 v, bytes32 r, bytes32 s) external returns (uint256 amountETH);

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(uint256 amountOutMin,
        address[] calldata path, address to, uint256 deadline) external payable;

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

contract Incineratorf is BEP20, Ownable { // 
    using SafeMath for uint256;

    IUniswapV2Router02 public uniswapV2Router;

    address public uniswapV2Pair;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    address public USD = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48; //
    bool public tradingEnabled = false;

    //uint256 internal sellAmount = 0;
    //uint256 internal buyAmount = 0;

    uint256 private totalSellFees;
    uint256 private totalBuyFees;

    address payable public marketingWallet; //
    address payable public devWallet; //

    uint256 public maxWallet;
    bool public maxWalletEnabled = true;
    uint256 public swapTokensAtAmount;
    uint256 public sellMarketingFees;
    uint256 public sellBurnFee;
    uint256 public buyMarketingFees;
    uint256 public buyBurnFee;
    uint256 public buyDevFee;
    uint256 public sellDevFee;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isBot;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private canTransferBeforeTradingIsEnabled;

    bool public limitsInEffect = false; 
    uint256 private gasPriceLimit = 40 * 1 gwei; // MAX GWEI
    mapping(address => uint256) private _holderLastTransferBlock; // FOR 1TX PER BLOCK
    mapping(address => uint256) private _holderLastTransferTimestamp; // FOR COOLDOWN
    uint256 public launchblock; // FOR DEADBLOCKS
    uint256 public launchtimestamp; // FOR LAUNCH TIMESTAMP 
    uint256 public cooldowntimer = 0; // DEFAULT COOLDOWN TIMER

    event SetPreSaleWallet(address wallet);
    event updateMarketingWallet(address wallet);
    event updateDevWallet(address wallet);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);
    event TradingEnabled();

    event UpdateFees(uint256 sellMarketingFees, uint256 sellBurnFee, uint256 buyMarketingFees,
                     uint256 buyBurnFee, uint256 buyDevFee, uint256 sellDevFee);

    event Airdrop(address holder, uint256 amount);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event blackList(address);
    event unblackList(address);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SendDividends(uint256 opAmount, bool success);
    event transferUSD(uint256 amountUSD);

    constructor() BEP20("Incinerator", "INC") { // 
        marketingWallet = payable(0xC99465875b4d324A93b04Aaa630Bd9776a636734); // 
        devWallet = payable(0xC99465875b4d324A93b04Aaa630Bd9776a636734); // 
        address router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; /// 

        //INITIAL FEE VALUES HERE
        buyMarketingFees = 7;
        sellMarketingFees = 7;
        buyBurnFee = 2;
        sellBurnFee = 2;
        buyDevFee = 0;
        sellDevFee = 0;

        // TOTAL BUY AND TOTAL SELL FEE CALCS
        totalBuyFees = buyMarketingFees.add(buyDevFee);
        totalSellFees = sellMarketingFees.add(sellDevFee);

        uniswapV2Router = IUniswapV2Router02(router);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(
                address(this), USD);

        _setAutomatedMarketMakerPair(uniswapV2Pair, true);

        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[msg.sender] = true;
        _isExcludedFromFees[marketingWallet] = true;

        uint256 totalSupply = (100_000_000) * (10**18); // TOTAL SUPPLY IS SET HERE
        _mint(owner(), totalSupply); // only time internal mint function is ever called is to create supply
        maxWallet = _totalSupply / 50; // 2%
        swapTokensAtAmount = _totalSupply / 1000; // 1%;
        canTransferBeforeTradingIsEnabled[owner()] = true;
        canTransferBeforeTradingIsEnabled[address(this)] = true;
    }

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

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingEnabled);
        tradingEnabled = true;
        launchblock = block.number;
        launchtimestamp = block.timestamp;
        emit TradingEnabled();
    }
    
    function setMarketingWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        marketingWallet = payable(wallet);
        emit updateMarketingWallet(wallet);
    }

    function setDevWallet(address wallet) external onlyOwner {
        _isExcludedFromFees[wallet] = true;
        devWallet = payable(wallet);
        emit updateDevWallet(wallet);
    }
    
    function setExcludeFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function addBot(address account) public onlyOwner {
        _isBot[account] = true;
        emit blackList(account);
    }

    function removeBot(address account) public onlyOwner {
        _isBot[account] = false;
        emit unblackList(account);
    }

    function setCanTransferBefore(address wallet, bool enable) external onlyOwner {
        canTransferBeforeTradingIsEnabled[wallet] = enable;
    }

    function setLimitsInEffect(bool value) external onlyOwner {
        limitsInEffect = value;
    }

    function setMaxWalletEnabled(bool value) external onlyOwner {
        maxWalletEnabled = value;
    }

    function setcooldowntimer(uint256 value) external onlyOwner {
        require(value <= 300, "cooldown timer cannot exceed 5 minutes");
        cooldowntimer = value;
    }
    
    function setmaxWallet(uint256 value) external onlyOwner {
        value = value * (10**18);
        require(value >= _totalSupply / 100, "max wallet cannot be set to less than 1%");
        maxWallet = value;
    }

    // TAKES ALL BNB/ETH FROM THE CONTRACT ADDRESS AND SENDS IT TO OWNERS WALLET
    function Sweep() external onlyOwner {
        uint256 amountBNB = address(this).balance;
        payable(msg.sender).transfer(amountBNB);
    }

    function SendUSD() external onlyOwner {
        uint256 amountUSD = IBEP20(USD).balanceOf(address(this));
        IBEP20(USD).approve(address(this), amountUSD.mul(10));
        IBEP20(USD).transferFrom(address(this),msg.sender,amountUSD);
        emit transferUSD(amountUSD);
    }

    function setSwapTriggerAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * (10**18);
    }

    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // THIS IS THE ONE YOU USE TO TRASNFER OWNER IF U EVER DO
    function transferAdmin(address newOwner) public onlyOwner {
        _isExcludedFromFees[newOwner] = true;
        canTransferBeforeTradingIsEnabled[newOwner] = true;
        transferOwnership(newOwner);
    }

    function updateFees(uint256 marketingBuy, uint256 marketingSell, uint256 burnBuy,
                        uint256 burnSell, uint256 devBuy, uint256 devSell) public onlyOwner {

        buyMarketingFees = marketingBuy;
        buyBurnFee = burnBuy;
        sellMarketingFees = marketingSell;
        sellBurnFee = burnSell;
        buyDevFee = devBuy;
        sellDevFee = devSell;

        totalSellFees = sellMarketingFees.add(sellDevFee);
        totalBuyFees = buyMarketingFees.add(buyDevFee);

        // ABSOLUTE TAX LIMITS GO HERE
        require(totalSellFees <= 99 && totalBuyFees <= 15, "total fees cannot be higher than 15%");

        emit UpdateFees(sellMarketingFees, sellBurnFee, sellDevFee, buyMarketingFees,
                        buyBurnFee, buyDevFee);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function isBot(address account) public view returns (bool) {
        return _isBot[account];
    }

    function _transfer(address from, address to, uint256 amount) internal override {

        require(from != address(0), "IBEP20: transfer from the zero address");
        require(to != address(0), "IBEP20: transfer to the zero address");
        require(!_isBot[from] && !_isBot[to]);

        uint256 marketingFees;
        uint256 burnFee;
        uint256 devFee;

        if (!canTransferBeforeTradingIsEnabled[from]) {
            require(tradingEnabled, "Trading has not yet been enabled");          
        }

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        } 
        
        else if (
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to]
        ) {
            bool isSelling = automatedMarketMakerPairs[to];
            if (isSelling) {
                marketingFees = sellMarketingFees;
                burnFee = sellBurnFee;
                devFee = sellDevFee;

                if (limitsInEffect) {
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
                }
            } 
            
            else {
                marketingFees = buyMarketingFees;
                burnFee = buyBurnFee;
                devFee = buyDevFee;

                if (limitsInEffect) {
                require(block.number > launchblock + 2,"you shall not pass");
                require(tx.gasprice <= gasPriceLimit,"Gas price exceeds limit.");
                require(_holderLastTransferBlock[tx.origin] != block.number,"Too many TX in block");
                require(block.timestamp >= _holderLastTransferTimestamp[tx.origin] + cooldowntimer,
                        "cooldown period active");
                _holderLastTransferBlock[tx.origin] = block.number;
                _holderLastTransferTimestamp[tx.origin] = block.timestamp;
            }

            if (maxWalletEnabled) {
            uint256 contractBalanceRecipient = balanceOf(to);
            require(contractBalanceRecipient + amount <= maxWallet,
                    "Exceeds maximum wallet token amount." );
            }
            }

            uint256 totalFees = marketingFees.add(devFee);

            uint256 contractTokenBalance = balanceOf(address(this));

            bool canSwap = contractTokenBalance >= swapTokensAtAmount;

            if (canSwap && !automatedMarketMakerPairs[from]) {
                uint256 tokensFromFees=contractTokenBalance;
                uint256 totalMarketingFees = sellMarketingFees+buyMarketingFees;
                uint256 totalDevFees = sellDevFee + buyDevFee;
                uint256 totalFee = totalMarketingFees+totalDevFees;
                uint256 partMarketing = (totalMarketingFees*100).div(totalFee); //*100 because uint256
                uint256 partDev = (totalDevFees*100).div(totalFee); //*100 because uint256

                uint256 marketingPayout = (tokensFromFees * partMarketing).div(100);
                uint256 devPayout = (tokensFromFees * partDev).div(100);

                if (marketingPayout > 0) {
                    swapTokensForUSD(marketingPayout, marketingWallet);
                }
                
                if (devPayout > 0) {
                    swapTokensForUSD(devPayout, devWallet);

                }
             
            }

            uint256 fees = amount.mul(totalFees).div(100);
            uint256 burntokens = amount.mul(burnFee).div(100);

            amount = amount.sub(fees + burntokens);

            super._transfer(from, address(this), fees);

            if (burntokens > 0) {
                super._transfer(from, DEAD, burntokens);
                _totalSupply = _totalSupply.sub(burntokens);
            }
           
        }
        super._transfer(from, to, amount); 
    }


    function swapTokensForUSD(uint256 tokenAmount, address destAddr) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = USD;
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForTokens(
            tokenAmount,
            0, // accept any amount of USD
            path,
            destAddr,
            block.timestamp
        );
    }

    function forceSwapAndSendDividends(uint256 tokens) public onlyOwner {
        payWallets(tokens);
    }

    // in this function, the contract sells his tokens and send USD to marketing and dev wallets
    function payWallets(uint256 tokensFromFees) private {

        uint256 totalMarketingFees = sellMarketingFees+buyMarketingFees;
        uint256 totalDevFees = sellDevFee + buyDevFee;
        uint256 totalFees = totalMarketingFees+totalDevFees;
        uint256 partMarketing = (totalMarketingFees*100).div(totalFees); //*100 because uint256
        uint256 partDev = (totalDevFees*100).div(totalFees); //*100 because uint256

        uint256 marketingPayout = (tokensFromFees * partMarketing).div(100);
        uint256 devPayout = (tokensFromFees * partDev).div(100);

        if (marketingPayout > 0) {
            swapTokensForUSD(marketingPayout, marketingWallet);
        }
        
        if (devPayout > 0) {
            swapTokensForUSD(devPayout, devWallet);
        }

    }

    function airdropToWallets(
        address[] memory airdropWallets,
        uint256[] memory amount
    ) external onlyOwner {
        require(airdropWallets.length == amount.length, "Arrays must be the same length");
        require(airdropWallets.length <= 200, "Wallets list length must be <= 200");
        for (uint256 i = 0; i < airdropWallets.length; i++) {
            address wallet = airdropWallets[i];
            uint256 airdropAmount = amount[i] * (10**18);
            super._transfer(msg.sender, wallet, airdropAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"holder","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Airdrop","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"opAmount","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"SetPreSaleWallet","type":"event"},{"anonymous":false,"inputs":[],"name":"TradingEnabled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyMarketingFees","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyBurnFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyDevFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"sellDevFee","type":"uint256"}],"name":"UpdateFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"blackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountUSD","type":"uint256"}],"name":"transferUSD","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"","type":"address"}],"name":"unblackList","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateDevWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"wallet","type":"address"}],"name":"updateMarketingWallet","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SendUSD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"Sweep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"USD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"airdropWallets","type":"address[]"},{"internalType":"uint256[]","name":"amount","type":"uint256[]"}],"name":"airdropToWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldowntimer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"forceSwapAndSendDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchblock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchtimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setCanTransferBefore","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setLimitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setMaxWalletEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTriggerAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setcooldowntimer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setmaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"burnBuy","type":"uint256"},{"internalType":"uint256","name":"burnSell","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405261dead600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600960146101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff0219169083151502179055506409502f9000601c5560006021553480156200010857600080fd5b506040518060400160405280600b81526020017f496e63696e657261746f720000000000000000000000000000000000000000008152506040518060400160405280600381526020017f494e43000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200018d92919062000abd565b508060049080519060200190620001a692919062000abd565b5050506000620001bb620007d460201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35073c99465875b4d324a93b04aaa630bd9776a636734600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c99465875b4d324a93b04aaa630bd9776a636734600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506007601381905550600760118190555060026014819055506002601281905550600060158190555060006016819055506200036b601554601354620007dc60201b62002d2d1790919060201c565b600b819055506200038f601654601154620007dc60201b62002d2d1790919060201c565b600a8190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200046a919062000bd7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620004c892919062000c1a565b6020604051808303816000875af1158015620004e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200050e919062000bd7565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000583600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200083f60201b60201c565b6001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060006a52b7d2dcc80cd2e40000009050620006de620006d1620008e060201b60201c565b826200090a60201b60201c565b6032600254620006ef919062000caf565b600e819055506103e860025462000707919062000caf565b6010819055506001601a600062000723620008e060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505062000ecb565b600033905090565b6000808284620007ed919062000ce7565b90508381101562000835576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200082c9062000da5565b60405180910390fd5b8091505092915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200097c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009739062000e17565b60405180910390fd5b620009906000838362000ab860201b60201c565b620009ac81600254620007dc60201b62002d2d1790919060201c565b60028190555062000a0a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620007dc60201b62002d2d1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000aac919062000e4a565b60405180910390a35050565b505050565b82805462000acb9062000e96565b90600052602060002090601f01602090048101928262000aef576000855562000b3b565b82601f1062000b0a57805160ff191683800117855562000b3b565b8280016001018555821562000b3b579182015b8281111562000b3a57825182559160200191906001019062000b1d565b5b50905062000b4a919062000b4e565b5090565b5b8082111562000b6957600081600090555060010162000b4f565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b9f8262000b72565b9050919050565b62000bb18162000b92565b811462000bbd57600080fd5b50565b60008151905062000bd18162000ba6565b92915050565b60006020828403121562000bf05762000bef62000b6d565b5b600062000c008482850162000bc0565b91505092915050565b62000c148162000b92565b82525050565b600060408201905062000c31600083018562000c09565b62000c40602083018462000c09565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000cbc8262000c47565b915062000cc98362000c47565b92508262000cdc5762000cdb62000c51565b5b828204905092915050565b600062000cf48262000c47565b915062000d018362000c47565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d395762000d3862000c80565b5b828201905092915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000d8d601b8362000d44565b915062000d9a8262000d55565b602082019050919050565b6000602082019050818103600083015262000dc08162000d7e565b9050919050565b7f42455032303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000dff601f8362000d44565b915062000e0c8262000dc7565b602082019050919050565b6000602082019050818103600083015262000e328162000df0565b9050919050565b62000e448162000c47565b82525050565b600060208201905062000e61600083018462000e39565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000eaf57607f821691505b60208210810362000ec55762000ec462000e67565b5b50919050565b615a3b8062000edb6000396000f3fe60806040526004361061036f5760003560e01c806375f0a874116101c6578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c7f578063f8b45b0514610ca8578063fc6b151c14610cd3578063ffecf51614610cfc57610376565b8063dd62ed3e14610bec578063e2f4560514610c29578063e71dc3f514610c5457610376565b8063b4942988116100d1578063b494298814610b30578063b62496f514610b5b578063b74e3b1114610b98578063d045a32914610bc157610376565b8063a614ff7514610a9f578063a9059cbb14610ac8578063adb873bd14610b0557610376565b806395d89b41116101645780639a7a23d61161013e5780639a7a23d6146109e35780639c3b4fdc14610a0c578063a0d82dc514610a37578063a457c2d714610a6257610376565b806395d89b4114610978578063964365f1146109a3578063992c58e4146109ba57610376565b80638c3c82b2116101a05780638c3c82b2146108cc5780638da5cb5b146108f75780638ea5220f1461092257806395451c291461094d57610376565b806375f0a874146108615780637fdde05c1461088c5780638a8c523c146108b557610376565b80633bbac579116102a05780635eee4bae1161023e5780637088fb7f116102185780637088fb7f146107cd57806370a08231146107e4578063715018a61461082157806375829def1461083857610376565b80635eee4bae146107525780635fecd9261461077b578063679ca6e9146107a457610376565b80634ada218b1161027a5780634ada218b146106965780634fbee193146106c15780635124f874146106fe5780635d098b381461072957610376565b80633bbac5791461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631bf6c21b1161030d5780632307b441116102e75780632307b4411461053557806323b872dd1461055e578063313ce5671461059b57806339509351146105c657610376565b80631bf6c21b146104b65780631d7b1fb4146104e15780631f53ac021461050c57610376565b806308dfe8a51161034957806308dfe8a5146103fa578063095ea7b3146104235780631694505e1461046057806318160ddd1461048b57610376565b806303fd2a451461037b57806305ca5f08146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d25565b60405161039d9190614197565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fc565b610d4b565b005b3480156103db57600080fd5b506103e4610dee565b6040516103f191906142c2565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614348565b610e80565b005b34801561042f57600080fd5b5061044a60048036038101906104459190614388565b610fc0565b60405161045791906143d7565b60405180910390f35b34801561046c57600080fd5b50610475610fde565b6040516104829190614451565b60405180910390f35b34801561049757600080fd5b506104a0611004565b6040516104ad919061447b565b60405180910390f35b3480156104c257600080fd5b506104cb61100e565b6040516104d89190614197565b60405180910390f35b3480156104ed57600080fd5b506104f6611034565b604051610503919061447b565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614496565b61103a565b005b34801561054157600080fd5b5061055c600480360381019061055791906146ce565b6111a4565b005b34801561056a57600080fd5b5061058560048036038101906105809190614746565b611346565b60405161059291906143d7565b60405180910390f35b3480156105a757600080fd5b506105b061141f565b6040516105bd91906147b5565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190614388565b611428565b6040516105fa91906143d7565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614496565b6114db565b60405161063791906143d7565b60405180910390f35b34801561064c57600080fd5b50610655611531565b6040516106629190614197565b60405180910390f35b34801561067757600080fd5b50610680611557565b60405161068d91906143d7565b60405180910390f35b3480156106a257600080fd5b506106ab61156a565b6040516106b891906143d7565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190614496565b61157d565b6040516106f591906143d7565b60405180910390f35b34801561070a57600080fd5b506107136115d3565b604051610720919061447b565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190614496565b6115d9565b005b34801561075e57600080fd5b50610779600480360381019061077491906141fc565b611743565b005b34801561078757600080fd5b506107a2600480360381019061079d9190614496565b6117f7565b005b3480156107b057600080fd5b506107cb60048036038101906107c691906147d0565b611920565b005b3480156107d957600080fd5b506107e26119d4565b005b3480156107f057600080fd5b5061080b60048036038101906108069190614496565b611aba565b604051610818919061447b565b60405180910390f35b34801561082d57600080fd5b50610836611b02565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614496565b611c5a565b005b34801561086d57600080fd5b50610876611dad565b604051610883919061481e565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190614348565b611dd3565b005b3480156108c157600080fd5b506108ca611ec5565b005b3480156108d857600080fd5b506108e1611fcd565b6040516108ee919061447b565b60405180910390f35b34801561090357600080fd5b5061090c611fd3565b6040516109199190614197565b60405180910390f35b34801561092e57600080fd5b50610937611ffd565b604051610944919061481e565b60405180910390f35b34801561095957600080fd5b50610962612023565b60405161096f919061447b565b60405180910390f35b34801561098457600080fd5b5061098d612029565b60405161099a91906142c2565b60405180910390f35b3480156109af57600080fd5b506109b86120bb565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190614839565b612383565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190614348565b612528565b005b348015610a1857600080fd5b50610a216125cd565b604051610a2e919061447b565b60405180910390f35b348015610a4357600080fd5b50610a4c6125d3565b604051610a59919061447b565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190614388565b6125d9565b604051610a9691906143d7565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906147d0565b6126a6565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190614388565b61275a565b604051610afc91906143d7565b60405180910390f35b348015610b1157600080fd5b50610b1a612778565b604051610b27919061447b565b60405180910390f35b348015610b3c57600080fd5b50610b4561277e565b604051610b52919061447b565b60405180910390f35b348015610b6757600080fd5b50610b826004803603810190610b7d9190614496565b612784565b604051610b8f91906143d7565b60405180910390f35b348015610ba457600080fd5b50610bbf6004803603810190610bba91906141fc565b6127a4565b005b348015610bcd57600080fd5b50610bd661288a565b604051610be391906143d7565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906148c6565b61289d565b604051610c20919061447b565b60405180910390f35b348015610c3557600080fd5b50610c3e612924565b604051610c4b919061447b565b60405180910390f35b348015610c6057600080fd5b50610c6961292a565b604051610c76919061447b565b60405180910390f35b348015610c8b57600080fd5b50610ca66004803603810190610ca19190614496565b612930565b005b348015610cb457600080fd5b50610cbd612af6565b604051610cca919061447b565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf591906141fc565b612afc565b005b348015610d0857600080fd5b50610d236004803603810190610d1e9190614496565b612c04565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d53612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614952565b60405180910390fd5b610deb81612d93565b50565b606060038054610dfd906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e29906149a1565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b610e88612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90614952565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fb491906143d7565b60405180910390a25050565b6000610fd4610fcd612d8b565b8484612ecd565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b611042612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa816040516111999190614197565b60405180910390a150565b6111ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614952565b60405180910390fd5b805182511461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614a1e565b60405180910390fd5b60c8825111156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614ab0565b60405180910390fd5b60005b82518110156113415760008382815181106112e5576112e4614ad0565b5b602002602001015190506000670de0b6b3a764000084848151811061130d5761130c614ad0565b5b602002602001015161131f9190614b2e565b905061132c338383613096565b5050808061133990614b88565b9150506112c7565b505050565b6000611353848484613329565b6114148461135f612d8b565b61140f8560405180606001604052806028815260200161599360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113c5612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b600190509392505050565b60006012905090565b60006114d1611435612d8b565b846114cc8560016000611446612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b612ecd565b6001905092915050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b600960149054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6115e1612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516117389190614197565b60405180910390a150565b61174b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190614952565b60405180910390fd5b670de0b6b3a7640000816117ee9190614b2e565b60108190555050565b6117ff612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590614952565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2bfbf4d4860dc855748bb2cddfed0644fc3dcd75aad3625ff609ea9effa5ac89816040516119159190614197565b60405180910390a150565b611928612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90614952565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6119dc612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290614952565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ab6573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b0a612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c62612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611daa81612930565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ddb612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190614952565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ecd612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614952565b60405180910390fd5b600960149054906101000a900460ff1615611f7657600080fd5b6001600960146101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054612038906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612064906149a1565b80156120b15780601f10612086576101008083540402835291602001916120b1565b820191906000526020600020905b81548152906001019060200180831161209457829003601f168201915b5050505050905090565b6120c3612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614952565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121af9190614197565b602060405180830381865afa1580156121cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f09190614be5565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612245600a85613d5290919063ffffffff16565b6040518363ffffffff1660e01b8152600401612262929190614c12565b6020604051808303816000875af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614c50565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161230593929190614c7d565b6020604051808303816000875af1158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190614c50565b507fc74e7a098395443390fac907684a14a51fd706a5c157ef4fbd6a08e2748e166681604051612378919061447b565b60405180910390a150565b61238b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614952565b60405180910390fd5b85601381905550836014819055508460118190555082601281905550816015819055508060168190555061245b601654601154612d2d90919063ffffffff16565b600a81905550612478601554601354612d2d90919063ffffffff16565b600b819055506063600a54111580156124945750600f600b5411155b6124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614d26565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161251896959493929190614d46565b60405180910390a1505050505050565b612530612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614952565b60405180910390fd5b6125c98282613dcc565b5050565b60155481565b60165481565b600061269c6125e6612d8b565b84612697856040518060600160405280602581526020016159e16025913960016000612610612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b6001905092915050565b6126ae612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490614952565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061276e612767612d8b565b8484613329565b6001905092915050565b60125481565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b6127ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614952565b60405180910390fd5b61012c811115612880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287790614e19565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612938612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614eab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b612b04612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90614952565b60405180910390fd5b670de0b6b3a764000081612ba79190614b2e565b90506064600254612bb89190614efa565b811015612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190614f9d565b60405180910390fd5b80600e8190555050565b612c0c612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290614952565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4838d165dc25d6634e3e7c65e13a5db7fa3b845af65cb4816abcb94ce9d569e381604051612d229190614197565b60405180910390a150565b6000808284612d3c9190614fbd565b905083811015612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d789061505f565b60405180910390fd5b8091505092915050565b600033905090565b6000601354601154612da59190614fbd565b90506000601554601654612db99190614fbd565b905060008183612dc99190614fbd565b90506000612dec82606486612dde9190614b2e565b613e6d90919063ffffffff16565b90506000612e0f83606486612e019190614b2e565b613e6d90919063ffffffff16565b90506000612e3260648489612e249190614b2e565b613e6d90919063ffffffff16565b90506000612e556064848a612e479190614b2e565b613e6d90919063ffffffff16565b90506000821115612e8d57612e8c82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115612ec357612ec281600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f33906150f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa290615183565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051613089919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc90615215565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316b906152a7565b60405180910390fd5b61317f8383836140a4565b6131ea816040518060600160405280602681526020016159bb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161331c919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90615339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fe906153cb565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ab5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6134b457600080fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661355a57600960149054906101000a900460ff16613559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355090615437565b60405180910390fd5b5b600084036135765761356e86866000613096565b505050613ce9565b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561361a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cda576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561377357601154935060125492506016549150601b60009054906101000a900460ff161561376e57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e79190614fbd565b421015613729576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613720906154a3565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613a3a565b601354935060145492506015549150601b60009054906101000a900460ff16156139c5576002601f546137a69190614fbd565b43116137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de9061550f565b60405180910390fd5b601c543a111561382c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138239061557b565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036138ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a4906155e7565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138fa9190614fbd565b42101561393c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613933906154a3565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1615613a395760006139e587611aba565b9050600e5486826139f69190614fbd565b1115613a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2e90615679565b60405180910390fd5b505b5b6000613a4f8386612d2d90919063ffffffff16565b90506000613a5c30611aba565b905060006010548210159050808015613abf5750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c025760008290506000601354601154613adb9190614fbd565b90506000601554601654613aef9190614fbd565b905060008183613aff9190614fbd565b90506000613b2282606486613b149190614b2e565b613e6d90919063ffffffff16565b90506000613b4583606486613b379190614b2e565b613e6d90919063ffffffff16565b90506000613b6860648489613b5a9190614b2e565b613e6d90919063ffffffff16565b90506000613b8b6064848a613b7d9190614b2e565b613e6d90919063ffffffff16565b90506000821115613bc357613bc282600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115613bf957613bf881600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b50505050505050505b6000613c2a6064613c1c868c613d5290919063ffffffff16565b613e6d90919063ffffffff16565b90506000613c546064613c468a8d613d5290919063ffffffff16565b613e6d90919063ffffffff16565b9050613c748183613c659190614fbd565b8b6140a990919063ffffffff16565b9950613c818c3084613096565b6000811115613cd357613cb78c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613096565b613ccc816002546140a990919063ffffffff16565b6002819055505b5050505050505b613ce5868686613096565b5050505b505050565b6000838311158290613d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2d91906142c2565b60405180910390fd5b5060008385613d459190615699565b9050809150509392505050565b6000808303613d645760009050613dc6565b60008284613d729190614b2e565b9050828482613d819190614efa565b14613dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db89061573f565b60405180910390fd5b809150505b92915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613eaf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140f3565b905092915050565b6000600267ffffffffffffffff811115613ed457613ed36144c8565b5b604051908082528060200260200182016040528015613f025781602001602082028036833780820191505090505b5090503081600081518110613f1a57613f19614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613f8b57613f8a614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ff230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612ecd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398460008486426040518663ffffffff1660e01b8152600401614056959493929190615858565b6000604051808303816000875af1158015614075573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061409e9190615949565b50505050565b505050565b60006140eb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cee565b905092915050565b6000808311829061413a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413191906142c2565b60405180910390fd5b50600083856141499190614efa565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061418182614156565b9050919050565b61419181614176565b82525050565b60006020820190506141ac6000830184614188565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6141d9816141c6565b81146141e457600080fd5b50565b6000813590506141f6816141d0565b92915050565b600060208284031215614212576142116141bc565b5b6000614220848285016141e7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614263578082015181840152602081019050614248565b83811115614272576000848401525b50505050565b6000601f19601f8301169050919050565b600061429482614229565b61429e8185614234565b93506142ae818560208601614245565b6142b781614278565b840191505092915050565b600060208201905081810360008301526142dc8184614289565b905092915050565b6142ed81614176565b81146142f857600080fd5b50565b60008135905061430a816142e4565b92915050565b60008115159050919050565b61432581614310565b811461433057600080fd5b50565b6000813590506143428161431c565b92915050565b6000806040838503121561435f5761435e6141bc565b5b600061436d858286016142fb565b925050602061437e85828601614333565b9150509250929050565b6000806040838503121561439f5761439e6141bc565b5b60006143ad858286016142fb565b92505060206143be858286016141e7565b9150509250929050565b6143d181614310565b82525050565b60006020820190506143ec60008301846143c8565b92915050565b6000819050919050565b600061441761441261440d84614156565b6143f2565b614156565b9050919050565b6000614429826143fc565b9050919050565b600061443b8261441e565b9050919050565b61444b81614430565b82525050565b60006020820190506144666000830184614442565b92915050565b614475816141c6565b82525050565b6000602082019050614490600083018461446c565b92915050565b6000602082840312156144ac576144ab6141bc565b5b60006144ba848285016142fb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61450082614278565b810181811067ffffffffffffffff8211171561451f5761451e6144c8565b5b80604052505050565b60006145326141b2565b905061453e82826144f7565b919050565b600067ffffffffffffffff82111561455e5761455d6144c8565b5b602082029050602081019050919050565b600080fd5b600061458761458284614543565b614528565b905080838252602082019050602084028301858111156145aa576145a961456f565b5b835b818110156145d357806145bf88826142fb565b8452602084019350506020810190506145ac565b5050509392505050565b600082601f8301126145f2576145f16144c3565b5b8135614602848260208601614574565b91505092915050565b600067ffffffffffffffff821115614626576146256144c8565b5b602082029050602081019050919050565b600061464a6146458461460b565b614528565b9050808382526020820190506020840283018581111561466d5761466c61456f565b5b835b81811015614696578061468288826141e7565b84526020840193505060208101905061466f565b5050509392505050565b600082601f8301126146b5576146b46144c3565b5b81356146c5848260208601614637565b91505092915050565b600080604083850312156146e5576146e46141bc565b5b600083013567ffffffffffffffff811115614703576147026141c1565b5b61470f858286016145dd565b925050602083013567ffffffffffffffff8111156147305761472f6141c1565b5b61473c858286016146a0565b9150509250929050565b60008060006060848603121561475f5761475e6141bc565b5b600061476d868287016142fb565b935050602061477e868287016142fb565b925050604061478f868287016141e7565b9150509250925092565b600060ff82169050919050565b6147af81614799565b82525050565b60006020820190506147ca60008301846147a6565b92915050565b6000602082840312156147e6576147e56141bc565b5b60006147f484828501614333565b91505092915050565b600061480882614156565b9050919050565b614818816147fd565b82525050565b6000602082019050614833600083018461480f565b92915050565b60008060008060008060c08789031215614856576148556141bc565b5b600061486489828a016141e7565b965050602061487589828a016141e7565b955050604061488689828a016141e7565b945050606061489789828a016141e7565b93505060806148a889828a016141e7565b92505060a06148b989828a016141e7565b9150509295509295509295565b600080604083850312156148dd576148dc6141bc565b5b60006148eb858286016142fb565b92505060206148fc858286016142fb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061493c602083614234565b915061494782614906565b602082019050919050565b6000602082019050818103600083015261496b8161492f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149b957607f821691505b6020821081036149cc576149cb614972565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614a08601e83614234565b9150614a13826149d2565b602082019050919050565b60006020820190508181036000830152614a37816149fb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602283614234565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b39826141c6565b9150614b44836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7d57614b7c614aff565b5b828202905092915050565b6000614b93826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc557614bc4614aff565b5b600182019050919050565b600081519050614bdf816141d0565b92915050565b600060208284031215614bfb57614bfa6141bc565b5b6000614c0984828501614bd0565b91505092915050565b6000604082019050614c276000830185614188565b614c34602083018461446c565b9392505050565b600081519050614c4a8161431c565b92915050565b600060208284031215614c6657614c656141bc565b5b6000614c7484828501614c3b565b91505092915050565b6000606082019050614c926000830186614188565b614c9f6020830185614188565b614cac604083018461446c565b949350505050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d10602483614234565b9150614d1b82614cb4565b604082019050919050565b60006020820190508181036000830152614d3f81614d03565b9050919050565b600060c082019050614d5b600083018961446c565b614d68602083018861446c565b614d75604083018761446c565b614d82606083018661446c565b614d8f608083018561446c565b614d9c60a083018461446c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614e03602683614234565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e95602683614234565b9150614ea082614e39565b604082019050919050565b60006020820190508181036000830152614ec481614e88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f05826141c6565b9150614f10836141c6565b925082614f2057614f1f614ecb565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614f87602883614234565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b6000614fc8826141c6565b9150614fd3836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561500857615007614aff565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615049601b83614234565b915061505482615013565b602082019050919050565b600060208201905081810360008301526150788161503c565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150db602483614234565b91506150e68261507f565b604082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d602283614234565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151ff602583614234565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615291602383614234565b915061529c82615235565b604082019050919050565b600060208201905081810360008301526152c081615284565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615323602683614234565b915061532e826152c7565b604082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153b5602483614234565b91506153c082615359565b604082019050919050565b600060208201905081810360008301526153e4816153a8565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615421602083614234565b915061542c826153eb565b602082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061548d601683614234565b915061549882615457565b602082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006154f9601283614234565b9150615504826154c3565b602082019050919050565b60006020820190508181036000830152615528816154ec565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615565601883614234565b91506155708261552f565b602082019050919050565b6000602082019050818103600083015261559481615558565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006155d1601483614234565b91506155dc8261559b565b602082019050919050565b60006020820190508181036000830152615600816155c4565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615663602483614234565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b60006156a4826141c6565b91506156af836141c6565b9250828210156156c2576156c1614aff565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615729602183614234565b9150615734826156cd565b604082019050919050565b600060208201905081810360008301526157588161571c565b9050919050565b6000819050919050565b600061578461577f61577a8461575f565b6143f2565b6141c6565b9050919050565b61579481615769565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157cf81614176565b82525050565b60006157e183836157c6565b60208301905092915050565b6000602082019050919050565b60006158058261579a565b61580f81856157a5565b935061581a836157b6565b8060005b8381101561584b57815161583288826157d5565b975061583d836157ed565b92505060018101905061581e565b5085935050505092915050565b600060a08201905061586d600083018861446c565b61587a602083018761578b565b818103604083015261588c81866157fa565b905061589b6060830185614188565b6158a8608083018461446c565b9695505050505050565b60006158c56158c08461460b565b614528565b905080838252602082019050602084028301858111156158e8576158e761456f565b5b835b8181101561591157806158fd8882614bd0565b8452602084019350506020810190506158ea565b5050509392505050565b600082601f8301126159305761592f6144c3565b5b81516159408482602086016158b2565b91505092915050565b60006020828403121561595f5761595e6141bc565b5b600082015167ffffffffffffffff81111561597d5761597c6141c1565b5b6159898482850161591b565b9150509291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c49f54117ee90035c103caf77bfa5ca8edc558e70dc2d38c50179043435e0ac364736f6c634300080d0033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c806375f0a874116101c6578063a614ff75116100f7578063dd62ed3e11610095578063f2fde38b1161006f578063f2fde38b14610c7f578063f8b45b0514610ca8578063fc6b151c14610cd3578063ffecf51614610cfc57610376565b8063dd62ed3e14610bec578063e2f4560514610c29578063e71dc3f514610c5457610376565b8063b4942988116100d1578063b494298814610b30578063b62496f514610b5b578063b74e3b1114610b98578063d045a32914610bc157610376565b8063a614ff7514610a9f578063a9059cbb14610ac8578063adb873bd14610b0557610376565b806395d89b41116101645780639a7a23d61161013e5780639a7a23d6146109e35780639c3b4fdc14610a0c578063a0d82dc514610a37578063a457c2d714610a6257610376565b806395d89b4114610978578063964365f1146109a3578063992c58e4146109ba57610376565b80638c3c82b2116101a05780638c3c82b2146108cc5780638da5cb5b146108f75780638ea5220f1461092257806395451c291461094d57610376565b806375f0a874146108615780637fdde05c1461088c5780638a8c523c146108b557610376565b80633bbac579116102a05780635eee4bae1161023e5780637088fb7f116102185780637088fb7f146107cd57806370a08231146107e4578063715018a61461082157806375829def1461083857610376565b80635eee4bae146107525780635fecd9261461077b578063679ca6e9146107a457610376565b80634ada218b1161027a5780634ada218b146106965780634fbee193146106c15780635124f874146106fe5780635d098b381461072957610376565b80633bbac5791461060357806349bd5a5e146106405780634a62bb651461066b57610376565b80631bf6c21b1161030d5780632307b441116102e75780632307b4411461053557806323b872dd1461055e578063313ce5671461059b57806339509351146105c657610376565b80631bf6c21b146104b65780631d7b1fb4146104e15780631f53ac021461050c57610376565b806308dfe8a51161034957806308dfe8a5146103fa578063095ea7b3146104235780631694505e1461046057806318160ddd1461048b57610376565b806303fd2a451461037b57806305ca5f08146103a657806306fdde03146103cf57610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d25565b60405161039d9190614197565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c891906141fc565b610d4b565b005b3480156103db57600080fd5b506103e4610dee565b6040516103f191906142c2565b60405180910390f35b34801561040657600080fd5b50610421600480360381019061041c9190614348565b610e80565b005b34801561042f57600080fd5b5061044a60048036038101906104459190614388565b610fc0565b60405161045791906143d7565b60405180910390f35b34801561046c57600080fd5b50610475610fde565b6040516104829190614451565b60405180910390f35b34801561049757600080fd5b506104a0611004565b6040516104ad919061447b565b60405180910390f35b3480156104c257600080fd5b506104cb61100e565b6040516104d89190614197565b60405180910390f35b3480156104ed57600080fd5b506104f6611034565b604051610503919061447b565b60405180910390f35b34801561051857600080fd5b50610533600480360381019061052e9190614496565b61103a565b005b34801561054157600080fd5b5061055c600480360381019061055791906146ce565b6111a4565b005b34801561056a57600080fd5b5061058560048036038101906105809190614746565b611346565b60405161059291906143d7565b60405180910390f35b3480156105a757600080fd5b506105b061141f565b6040516105bd91906147b5565b60405180910390f35b3480156105d257600080fd5b506105ed60048036038101906105e89190614388565b611428565b6040516105fa91906143d7565b60405180910390f35b34801561060f57600080fd5b5061062a60048036038101906106259190614496565b6114db565b60405161063791906143d7565b60405180910390f35b34801561064c57600080fd5b50610655611531565b6040516106629190614197565b60405180910390f35b34801561067757600080fd5b50610680611557565b60405161068d91906143d7565b60405180910390f35b3480156106a257600080fd5b506106ab61156a565b6040516106b891906143d7565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e39190614496565b61157d565b6040516106f591906143d7565b60405180910390f35b34801561070a57600080fd5b506107136115d3565b604051610720919061447b565b60405180910390f35b34801561073557600080fd5b50610750600480360381019061074b9190614496565b6115d9565b005b34801561075e57600080fd5b50610779600480360381019061077491906141fc565b611743565b005b34801561078757600080fd5b506107a2600480360381019061079d9190614496565b6117f7565b005b3480156107b057600080fd5b506107cb60048036038101906107c691906147d0565b611920565b005b3480156107d957600080fd5b506107e26119d4565b005b3480156107f057600080fd5b5061080b60048036038101906108069190614496565b611aba565b604051610818919061447b565b60405180910390f35b34801561082d57600080fd5b50610836611b02565b005b34801561084457600080fd5b5061085f600480360381019061085a9190614496565b611c5a565b005b34801561086d57600080fd5b50610876611dad565b604051610883919061481e565b60405180910390f35b34801561089857600080fd5b506108b360048036038101906108ae9190614348565b611dd3565b005b3480156108c157600080fd5b506108ca611ec5565b005b3480156108d857600080fd5b506108e1611fcd565b6040516108ee919061447b565b60405180910390f35b34801561090357600080fd5b5061090c611fd3565b6040516109199190614197565b60405180910390f35b34801561092e57600080fd5b50610937611ffd565b604051610944919061481e565b60405180910390f35b34801561095957600080fd5b50610962612023565b60405161096f919061447b565b60405180910390f35b34801561098457600080fd5b5061098d612029565b60405161099a91906142c2565b60405180910390f35b3480156109af57600080fd5b506109b86120bb565b005b3480156109c657600080fd5b506109e160048036038101906109dc9190614839565b612383565b005b3480156109ef57600080fd5b50610a0a6004803603810190610a059190614348565b612528565b005b348015610a1857600080fd5b50610a216125cd565b604051610a2e919061447b565b60405180910390f35b348015610a4357600080fd5b50610a4c6125d3565b604051610a59919061447b565b60405180910390f35b348015610a6e57600080fd5b50610a896004803603810190610a849190614388565b6125d9565b604051610a9691906143d7565b60405180910390f35b348015610aab57600080fd5b50610ac66004803603810190610ac191906147d0565b6126a6565b005b348015610ad457600080fd5b50610aef6004803603810190610aea9190614388565b61275a565b604051610afc91906143d7565b60405180910390f35b348015610b1157600080fd5b50610b1a612778565b604051610b27919061447b565b60405180910390f35b348015610b3c57600080fd5b50610b4561277e565b604051610b52919061447b565b60405180910390f35b348015610b6757600080fd5b50610b826004803603810190610b7d9190614496565b612784565b604051610b8f91906143d7565b60405180910390f35b348015610ba457600080fd5b50610bbf6004803603810190610bba91906141fc565b6127a4565b005b348015610bcd57600080fd5b50610bd661288a565b604051610be391906143d7565b60405180910390f35b348015610bf857600080fd5b50610c136004803603810190610c0e91906148c6565b61289d565b604051610c20919061447b565b60405180910390f35b348015610c3557600080fd5b50610c3e612924565b604051610c4b919061447b565b60405180910390f35b348015610c6057600080fd5b50610c6961292a565b604051610c76919061447b565b60405180910390f35b348015610c8b57600080fd5b50610ca66004803603810190610ca19190614496565b612930565b005b348015610cb457600080fd5b50610cbd612af6565b604051610cca919061447b565b60405180910390f35b348015610cdf57600080fd5b50610cfa6004803603810190610cf591906141fc565b612afc565b005b348015610d0857600080fd5b50610d236004803603810190610d1e9190614496565b612c04565b005b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610d53612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610de2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd990614952565b60405180910390fd5b610deb81612d93565b50565b606060038054610dfd906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054610e29906149a1565b8015610e765780601f10610e4b57610100808354040283529160200191610e76565b820191906000526020600020905b815481529060010190602001808311610e5957829003601f168201915b5050505050905090565b610e88612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0e90614952565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051610fb491906143d7565b60405180910390a25050565b6000610fd4610fcd612d8b565b8484612ecd565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60215481565b611042612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1816467f4e41d8dd27500ca11dc471852ca93f9b624c4d8d4430b8c4fa6424fa816040516111999190614197565b60405180910390a150565b6111ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290614952565b60405180910390fd5b805182511461127f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127690614a1e565b60405180910390fd5b60c8825111156112c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bb90614ab0565b60405180910390fd5b60005b82518110156113415760008382815181106112e5576112e4614ad0565b5b602002602001015190506000670de0b6b3a764000084848151811061130d5761130c614ad0565b5b602002602001015161131f9190614b2e565b905061132c338383613096565b5050808061133990614b88565b9150506112c7565b505050565b6000611353848484613329565b6114148461135f612d8b565b61140f8560405180606001604052806028815260200161599360289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113c5612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b600190509392505050565b60006012905090565b60006114d1611435612d8b565b846114cc8560016000611446612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b612ecd565b6001905092915050565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900460ff1681565b600960149054906101000a900460ff1681565b6000601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b6115e1612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611670576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166790614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faacebbe32c0dbd14817cfb53e3cc8be68c7e133928317145be50a0d86c224433816040516117389190614197565b60405180910390a150565b61174b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d190614952565b60405180910390fd5b670de0b6b3a7640000816117ee9190614b2e565b60108190555050565b6117ff612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461188e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188590614952565b60405180910390fd5b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f2bfbf4d4860dc855748bb2cddfed0644fc3dcd75aad3625ff609ea9effa5ac89816040516119159190614197565b60405180910390a150565b611928612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ae90614952565b60405180910390fd5b80601b60006101000a81548160ff02191690831515021790555050565b6119dc612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6290614952565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611ab6573d6000803e3d6000fd5b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611b0a612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9090614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611c62612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce890614952565b60405180910390fd5b6001601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611daa81612930565b50565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ddb612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6190614952565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611ecd612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5390614952565b60405180910390fd5b600960149054906101000a900460ff1615611f7657600080fd5b6001600960146101000a81548160ff02191690831515021790555043601f81905550426020819055507f799663458a5ef2936f7fa0c99b3336c69c25890f82974f04e811e5bb359186c760405160405180910390a1565b60205481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b606060048054612038906149a1565b80601f0160208091040260200160405190810160405280929190818152602001828054612064906149a1565b80156120b15780601f10612086576101008083540402835291602001916120b1565b820191906000526020600020905b81548152906001019060200180831161209457829003601f168201915b5050505050905090565b6120c3612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612152576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214990614952565b60405180910390fd5b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016121af9190614197565b602060405180830381865afa1580156121cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f09190614be5565b9050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b330612245600a85613d5290919063ffffffff16565b6040518363ffffffff1660e01b8152600401612262929190614c12565b6020604051808303816000875af1158015612281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a59190614c50565b50600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3033846040518463ffffffff1660e01b815260040161230593929190614c7d565b6020604051808303816000875af1158015612324573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123489190614c50565b507fc74e7a098395443390fac907684a14a51fd706a5c157ef4fbd6a08e2748e166681604051612378919061447b565b60405180910390a150565b61238b612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461241a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241190614952565b60405180910390fd5b85601381905550836014819055508460118190555082601281905550816015819055508060168190555061245b601654601154612d2d90919063ffffffff16565b600a81905550612478601554601354612d2d90919063ffffffff16565b600b819055506063600a54111580156124945750600f600b5411155b6124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614d26565b60405180910390fd5b7ffb0d6f48717e74b9ad8ae84d152197402ac50bd6431ea28437926861021948ff60115460125460165460135460145460155460405161251896959493929190614d46565b60405180910390a1505050505050565b612530612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b690614952565b60405180910390fd5b6125c98282613dcc565b5050565b60155481565b60165481565b600061269c6125e6612d8b565b84612697856040518060600160405280602581526020016159e16025913960016000612610612d8b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b612ecd565b6001905092915050565b6126ae612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461273d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273490614952565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b600061276e612767612d8b565b8484613329565b6001905092915050565b60125481565b601f5481565b60196020528060005260406000206000915054906101000a900460ff1681565b6127ac612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461283b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283290614952565b60405180910390fd5b61012c811115612880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287790614e19565b60405180910390fd5b8060218190555050565b600f60009054906101000a900460ff1681565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60105481565b60145481565b612938612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129be90614952565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2d90614eab565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b612b04612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8a90614952565b60405180910390fd5b670de0b6b3a764000081612ba79190614b2e565b90506064600254612bb89190614efa565b811015612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190614f9d565b60405180910390fd5b80600e8190555050565b612c0c612d8b565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612c9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c9290614952565b60405180910390fd5b6001601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f4838d165dc25d6634e3e7c65e13a5db7fa3b845af65cb4816abcb94ce9d569e381604051612d229190614197565b60405180910390a150565b6000808284612d3c9190614fbd565b905083811015612d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d789061505f565b60405180910390fd5b8091505092915050565b600033905090565b6000601354601154612da59190614fbd565b90506000601554601654612db99190614fbd565b905060008183612dc99190614fbd565b90506000612dec82606486612dde9190614b2e565b613e6d90919063ffffffff16565b90506000612e0f83606486612e019190614b2e565b613e6d90919063ffffffff16565b90506000612e3260648489612e249190614b2e565b613e6d90919063ffffffff16565b90506000612e556064848a612e479190614b2e565b613e6d90919063ffffffff16565b90506000821115612e8d57612e8c82600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115612ec357612ec281600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b5050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612f3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f33906150f1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa290615183565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051613089919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613105576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130fc90615215565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613174576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161316b906152a7565b60405180910390fd5b61317f8383836140a4565b6131ea816040518060600160405280602681526020016159bb602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cee9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061327d816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d2d90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161331c919061447b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613398576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161338f90615339565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613407576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133fe906153cb565b60405180910390fd5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ab5750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6134b457600080fd5b6000806000601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661355a57600960149054906101000a900460ff16613559576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161355090615437565b60405180910390fd5b5b600084036135765761356e86866000613096565b505050613ce9565b601760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561361a5750601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613cda576000601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050801561377357601154935060125492506016549150601b60009054906101000a900460ff161561376e57602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546136e79190614fbd565b421015613729576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613720906154a3565b60405180910390fd5b42601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b613a3a565b601354935060145492506015549150601b60009054906101000a900460ff16156139c5576002601f546137a69190614fbd565b43116137e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137de9061550f565b60405180910390fd5b601c543a111561382c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138239061557b565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054036138ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138a4906155e7565b60405180910390fd5b602154601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138fa9190614fbd565b42101561393c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613933906154a3565b60405180910390fd5b43601d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555042601e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600f60009054906101000a900460ff1615613a395760006139e587611aba565b9050600e5486826139f69190614fbd565b1115613a37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2e90615679565b60405180910390fd5b505b5b6000613a4f8386612d2d90919063ffffffff16565b90506000613a5c30611aba565b905060006010548210159050808015613abf5750601960008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613c025760008290506000601354601154613adb9190614fbd565b90506000601554601654613aef9190614fbd565b905060008183613aff9190614fbd565b90506000613b2282606486613b149190614b2e565b613e6d90919063ffffffff16565b90506000613b4583606486613b379190614b2e565b613e6d90919063ffffffff16565b90506000613b6860648489613b5a9190614b2e565b613e6d90919063ffffffff16565b90506000613b8b6064848a613b7d9190614b2e565b613e6d90919063ffffffff16565b90506000821115613bc357613bc282600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b6000811115613bf957613bf881600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16613eb7565b5b50505050505050505b6000613c2a6064613c1c868c613d5290919063ffffffff16565b613e6d90919063ffffffff16565b90506000613c546064613c468a8d613d5290919063ffffffff16565b613e6d90919063ffffffff16565b9050613c748183613c659190614fbd565b8b6140a990919063ffffffff16565b9950613c818c3084613096565b6000811115613cd357613cb78c600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613096565b613ccc816002546140a990919063ffffffff16565b6002819055505b5050505050505b613ce5868686613096565b5050505b505050565b6000838311158290613d36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d2d91906142c2565b60405180910390fd5b5060008385613d459190615699565b9050809150509392505050565b6000808303613d645760009050613dc6565b60008284613d729190614b2e565b9050828482613d819190614efa565b14613dc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613db89061573f565b60405180910390fd5b809150505b92915050565b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000613eaf83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506140f3565b905092915050565b6000600267ffffffffffffffff811115613ed457613ed36144c8565b5b604051908082528060200260200182016040528015613f025781602001602082028036833780820191505090505b5090503081600081518110613f1a57613f19614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613f8b57613f8a614ad0565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ff230600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685612ecd565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166338ed17398460008486426040518663ffffffff1660e01b8152600401614056959493929190615858565b6000604051808303816000875af1158015614075573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061409e9190615949565b50505050565b505050565b60006140eb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613cee565b905092915050565b6000808311829061413a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161413191906142c2565b60405180910390fd5b50600083856141499190614efa565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061418182614156565b9050919050565b61419181614176565b82525050565b60006020820190506141ac6000830184614188565b92915050565b6000604051905090565b600080fd5b600080fd5b6000819050919050565b6141d9816141c6565b81146141e457600080fd5b50565b6000813590506141f6816141d0565b92915050565b600060208284031215614212576142116141bc565b5b6000614220848285016141e7565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015614263578082015181840152602081019050614248565b83811115614272576000848401525b50505050565b6000601f19601f8301169050919050565b600061429482614229565b61429e8185614234565b93506142ae818560208601614245565b6142b781614278565b840191505092915050565b600060208201905081810360008301526142dc8184614289565b905092915050565b6142ed81614176565b81146142f857600080fd5b50565b60008135905061430a816142e4565b92915050565b60008115159050919050565b61432581614310565b811461433057600080fd5b50565b6000813590506143428161431c565b92915050565b6000806040838503121561435f5761435e6141bc565b5b600061436d858286016142fb565b925050602061437e85828601614333565b9150509250929050565b6000806040838503121561439f5761439e6141bc565b5b60006143ad858286016142fb565b92505060206143be858286016141e7565b9150509250929050565b6143d181614310565b82525050565b60006020820190506143ec60008301846143c8565b92915050565b6000819050919050565b600061441761441261440d84614156565b6143f2565b614156565b9050919050565b6000614429826143fc565b9050919050565b600061443b8261441e565b9050919050565b61444b81614430565b82525050565b60006020820190506144666000830184614442565b92915050565b614475816141c6565b82525050565b6000602082019050614490600083018461446c565b92915050565b6000602082840312156144ac576144ab6141bc565b5b60006144ba848285016142fb565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61450082614278565b810181811067ffffffffffffffff8211171561451f5761451e6144c8565b5b80604052505050565b60006145326141b2565b905061453e82826144f7565b919050565b600067ffffffffffffffff82111561455e5761455d6144c8565b5b602082029050602081019050919050565b600080fd5b600061458761458284614543565b614528565b905080838252602082019050602084028301858111156145aa576145a961456f565b5b835b818110156145d357806145bf88826142fb565b8452602084019350506020810190506145ac565b5050509392505050565b600082601f8301126145f2576145f16144c3565b5b8135614602848260208601614574565b91505092915050565b600067ffffffffffffffff821115614626576146256144c8565b5b602082029050602081019050919050565b600061464a6146458461460b565b614528565b9050808382526020820190506020840283018581111561466d5761466c61456f565b5b835b81811015614696578061468288826141e7565b84526020840193505060208101905061466f565b5050509392505050565b600082601f8301126146b5576146b46144c3565b5b81356146c5848260208601614637565b91505092915050565b600080604083850312156146e5576146e46141bc565b5b600083013567ffffffffffffffff811115614703576147026141c1565b5b61470f858286016145dd565b925050602083013567ffffffffffffffff8111156147305761472f6141c1565b5b61473c858286016146a0565b9150509250929050565b60008060006060848603121561475f5761475e6141bc565b5b600061476d868287016142fb565b935050602061477e868287016142fb565b925050604061478f868287016141e7565b9150509250925092565b600060ff82169050919050565b6147af81614799565b82525050565b60006020820190506147ca60008301846147a6565b92915050565b6000602082840312156147e6576147e56141bc565b5b60006147f484828501614333565b91505092915050565b600061480882614156565b9050919050565b614818816147fd565b82525050565b6000602082019050614833600083018461480f565b92915050565b60008060008060008060c08789031215614856576148556141bc565b5b600061486489828a016141e7565b965050602061487589828a016141e7565b955050604061488689828a016141e7565b945050606061489789828a016141e7565b93505060806148a889828a016141e7565b92505060a06148b989828a016141e7565b9150509295509295509295565b600080604083850312156148dd576148dc6141bc565b5b60006148eb858286016142fb565b92505060206148fc858286016142fb565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061493c602083614234565b915061494782614906565b602082019050919050565b6000602082019050818103600083015261496b8161492f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806149b957607f821691505b6020821081036149cc576149cb614972565b5b50919050565b7f417272617973206d757374206265207468652073616d65206c656e6774680000600082015250565b6000614a08601e83614234565b9150614a13826149d2565b602082019050919050565b60006020820190508181036000830152614a37816149fb565b9050919050565b7f57616c6c657473206c697374206c656e677468206d757374206265203c3d203260008201527f3030000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a9a602283614234565b9150614aa582614a3e565b604082019050919050565b60006020820190508181036000830152614ac981614a8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b39826141c6565b9150614b44836141c6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614b7d57614b7c614aff565b5b828202905092915050565b6000614b93826141c6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614bc557614bc4614aff565b5b600182019050919050565b600081519050614bdf816141d0565b92915050565b600060208284031215614bfb57614bfa6141bc565b5b6000614c0984828501614bd0565b91505092915050565b6000604082019050614c276000830185614188565b614c34602083018461446c565b9392505050565b600081519050614c4a8161431c565b92915050565b600060208284031215614c6657614c656141bc565b5b6000614c7484828501614c3b565b91505092915050565b6000606082019050614c926000830186614188565b614c9f6020830185614188565b614cac604083018461446c565b949350505050565b7f746f74616c20666565732063616e6e6f7420626520686967686572207468616e60008201527f2031352500000000000000000000000000000000000000000000000000000000602082015250565b6000614d10602483614234565b9150614d1b82614cb4565b604082019050919050565b60006020820190508181036000830152614d3f81614d03565b9050919050565b600060c082019050614d5b600083018961446c565b614d68602083018861446c565b614d75604083018761446c565b614d82606083018661446c565b614d8f608083018561446c565b614d9c60a083018461446c565b979650505050505050565b7f636f6f6c646f776e2074696d65722063616e6e6f74206578636565642035206d60008201527f696e757465730000000000000000000000000000000000000000000000000000602082015250565b6000614e03602683614234565b9150614e0e82614da7565b604082019050919050565b60006020820190508181036000830152614e3281614df6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614e95602683614234565b9150614ea082614e39565b604082019050919050565b60006020820190508181036000830152614ec481614e88565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f05826141c6565b9150614f10836141c6565b925082614f2057614f1f614ecb565b5b828204905092915050565b7f6d61782077616c6c65742063616e6e6f742062652073657420746f206c65737360008201527f207468616e203125000000000000000000000000000000000000000000000000602082015250565b6000614f87602883614234565b9150614f9282614f2b565b604082019050919050565b60006020820190508181036000830152614fb681614f7a565b9050919050565b6000614fc8826141c6565b9150614fd3836141c6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561500857615007614aff565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615049601b83614234565b915061505482615013565b602082019050919050565b600060208201905081810360008301526150788161503c565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006150db602483614234565b91506150e68261507f565b604082019050919050565b6000602082019050818103600083015261510a816150ce565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061516d602283614234565b915061517882615111565b604082019050919050565b6000602082019050818103600083015261519c81615160565b9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006151ff602583614234565b915061520a826151a3565b604082019050919050565b6000602082019050818103600083015261522e816151f2565b9050919050565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615291602383614234565b915061529c82615235565b604082019050919050565b600060208201905081810360008301526152c081615284565b9050919050565b7f4942455032303a207472616e736665722066726f6d20746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000615323602683614234565b915061532e826152c7565b604082019050919050565b6000602082019050818103600083015261535281615316565b9050919050565b7f4942455032303a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006153b5602483614234565b91506153c082615359565b604082019050919050565b600060208201905081810360008301526153e4816153a8565b9050919050565b7f54726164696e6720686173206e6f7420796574206265656e20656e61626c6564600082015250565b6000615421602083614234565b915061542c826153eb565b602082019050919050565b6000602082019050818103600083015261545081615414565b9050919050565b7f636f6f6c646f776e20706572696f642061637469766500000000000000000000600082015250565b600061548d601683614234565b915061549882615457565b602082019050919050565b600060208201905081810360008301526154bc81615480565b9050919050565b7f796f75207368616c6c206e6f7420706173730000000000000000000000000000600082015250565b60006154f9601283614234565b9150615504826154c3565b602082019050919050565b60006020820190508181036000830152615528816154ec565b9050919050565b7f4761732070726963652065786365656473206c696d69742e0000000000000000600082015250565b6000615565601883614234565b91506155708261552f565b602082019050919050565b6000602082019050818103600083015261559481615558565b9050919050565b7f546f6f206d616e7920545820696e20626c6f636b000000000000000000000000600082015250565b60006155d1601483614234565b91506155dc8261559b565b602082019050919050565b60006020820190508181036000830152615600816155c4565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e742e00000000000000000000000000000000000000000000000000000000602082015250565b6000615663602483614234565b915061566e82615607565b604082019050919050565b6000602082019050818103600083015261569281615656565b9050919050565b60006156a4826141c6565b91506156af836141c6565b9250828210156156c2576156c1614aff565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615729602183614234565b9150615734826156cd565b604082019050919050565b600060208201905081810360008301526157588161571c565b9050919050565b6000819050919050565b600061578461577f61577a8461575f565b6143f2565b6141c6565b9050919050565b61579481615769565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6157cf81614176565b82525050565b60006157e183836157c6565b60208301905092915050565b6000602082019050919050565b60006158058261579a565b61580f81856157a5565b935061581a836157b6565b8060005b8381101561584b57815161583288826157d5565b975061583d836157ed565b92505060018101905061581e565b5085935050505092915050565b600060a08201905061586d600083018861446c565b61587a602083018761578b565b818103604083015261588c81866157fa565b905061589b6060830185614188565b6158a8608083018461446c565b9695505050505050565b60006158c56158c08461460b565b614528565b905080838252602082019050602084028301858111156158e8576158e761456f565b5b835b8181101561591157806158fd8882614bd0565b8452602084019350506020810190506158ea565b5050509392505050565b600082601f8301126159305761592f6144c3565b5b81516159408482602086016158b2565b91505092915050565b60006020828403121561595f5761595e6141bc565b5b600082015167ffffffffffffffff81111561597d5761597c6141c1565b5b6159898482850161591b565b9150509291505056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a207472616e7366657220616d6f756e7420657863656564732062616c616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220c49f54117ee90035c103caf77bfa5ca8edc558e70dc2d38c50179043435e0ac364736f6c634300080d0033

Deployed Bytecode Sourcemap

15404:14378:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15575:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28197:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3287:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20123:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4201:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15490:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3608:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15646:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16964:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19924:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29218:561;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4378:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19329:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4731:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23591:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15540:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16572:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15719;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23457:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16193:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19711:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21899:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20445:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20739:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21451:146;;;;;;;;;;;;;:::i;:::-;;3724:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7179:148;;;;;;;;;;;;;:::i;:::-;;22434:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15916:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20584:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19467:232;;;;;;;;;;;;;:::i;:::-;;16902:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6965:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15964:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3395:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21605:286;;;;;;;;;;;;;:::i;:::-;;22654:795;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22027:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16263:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16294:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4957:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20846:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3859:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16160:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16851;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16433:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20957:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16039:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4042:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16081:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16231:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7335:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16008:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21143:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20312:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15575:64;;;;;;;;;;;;;:::o;28197:105::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28276:18:::1;28287:6;28276:10;:18::i;:::-;28197:105:::0;:::o;3287:100::-;3341:13;3374:5;3367:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3287:100;:::o;20123:181::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20238:8:::1;20207:19;:28;20227:7;20207:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;20278:7;20262:34;;;20287:8;20262:34;;;;;;:::i;:::-;;;;;;;;20123:181:::0;;:::o;4201:169::-;4284:4;4301:39;4310:12;:10;:12::i;:::-;4324:7;4333:6;4301:8;:39::i;:::-;4358:4;4351:11;;4201:169;;;;:::o;15490:41::-;;;;;;;;;;;;;:::o;3608:108::-;3669:7;3696:12;;3689:19;;3608:108;:::o;15646:63::-;;;;;;;;;;;;;:::o;16964:32::-;;;;:::o;19924:187::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20022:4:::1;19992:19;:27;20012:6;19992:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;20057:6;20037:9;;:27;;;;;;;;;;;;;;;;;;20080:23;20096:6;20080:23;;;;;;:::i;:::-;;;;;;;;19924:187:::0;:::o;29218:561::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;29390:6:::1;:13;29365:14;:21;:38;29357:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29482:3;29457:14;:21;:28;;29449:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;29540:9;29535:237;29559:14;:21;29555:1;:25;29535:237;;;29602:14;29619;29634:1;29619:17;;;;;;;;:::i;:::-;;;;;;;;29602:34;;29651:21;29688:6;29675;29682:1;29675:9;;;;;;;;:::i;:::-;;;;;;;;:20;;;;:::i;:::-;29651:44;;29710:50;29726:10;29738:6;29746:13;29710:15;:50::i;:::-;29587:185;;29582:3;;;;;:::i;:::-;;;;29535:237;;;;29218:561:::0;;:::o;4378:345::-;4491:4;4508:36;4518:6;4526:9;4537:6;4508:9;:36::i;:::-;4555:138;4564:6;4572:12;:10;:12::i;:::-;4586:106;4624:6;4586:106;;;;;;;;;;;;;;;;;:11;:19;4598:6;4586:19;;;;;;;;;;;;;;;:33;4606:12;:10;:12::i;:::-;4586:33;;;;;;;;;;;;;;;;:37;;:106;;;;;:::i;:::-;4555:8;:138::i;:::-;4711:4;4704:11;;4378:345;;;;;:::o;19329:93::-;19387:5;19412:2;19405:9;;19329:93;:::o;4731:218::-;4819:4;4836:83;4845:12;:10;:12::i;:::-;4859:7;4868:50;4907:10;4868:11;:25;4880:12;:10;:12::i;:::-;4868:25;;;;;;;;;;;;;;;:34;4894:7;4868:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;4836:8;:83::i;:::-;4937:4;4930:11;;4731:218;;;;:::o;23591:100::-;23644:4;23668:6;:15;23675:7;23668:15;;;;;;;;;;;;;;;;;;;;;;;;;23661:22;;23591:100;;;:::o;15540:28::-;;;;;;;;;;;;;:::o;16572:34::-;;;;;;;;;;;;;:::o;15719:::-;;;;;;;;;;;;;:::o;23457:126::-;23523:4;23547:19;:28;23567:7;23547:28;;;;;;;;;;;;;;;;;;;;;;;;;23540:35;;23457:126;;;:::o;16193:31::-;;;;:::o;19711:205::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19815:4:::1;19785:19;:27;19805:6;19785:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;19856:6;19830:15;;:33;;;;;;;;;;;;;;;;;;19879:29;19901:6;19879:29;;;;;;:::i;:::-;;;;;;;;19711:205:::0;:::o;21899:120::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22004:6:::1;21994;:17;;;;:::i;:::-;21973:18;:38;;;;21899:120:::0;:::o;20445:131::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20527:5:::1;20509:6;:15;20516:7;20509:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;20548:20;20560:7;20548:20;;;;;;:::i;:::-;;;;;;;;20445:131:::0;:::o;20739:99::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20825:5:::1;20808:14;;:22;;;;;;;;;;;;;;;;;;20739:99:::0;:::o;21451:146::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21498:17:::1;21518:21;21498:41;;21558:10;21550:28;;:39;21579:9;21550:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21487:110;21451:146::o:0;3724:127::-;3798:7;3825:9;:18;3835:7;3825:18;;;;;;;;;;;;;;;;3818:25;;3724:127;;;:::o;7179:148::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7286:1:::1;7249:40;;7270:6;;;;;;;;;;;7249:40;;;;;;;;;;;;7317:1;7300:6;;:19;;;;;;;;;;;;;;;;;;7179:148::o:0;22434:212::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22535:4:::1;22503:19;:29;22523:8;22503:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22596:4;22550:33;:43;22584:8;22550:43;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;22611:27;22629:8;22611:17;:27::i;:::-;22434:212:::0;:::o;15916:38::-;;;;;;;;;;;;;:::o;20584:147::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20717:6:::1;20673:33;:41;20707:6;20673:41;;;;;;;;;;;;;;;;:50;;;;;;;;;;;;;;;;;;20584:147:::0;;:::o;19467:232::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19531:14:::1;;;;;;;;;;;19530:15;19522:24;;;::::0;::::1;;19574:4;19557:14;;:21;;;;;;;;;;;;;;;;;;19603:12;19589:11;:26;;;;19644:15;19626;:33;;;;19675:16;;;;;;;;;;19467:232::o:0;16902:30::-;;;;:::o;6965:79::-;7003:7;7030:6;;;;;;;;;;;7023:13;;6965:79;:::o;15964:32::-;;;;;;;;;;;;;:::o;16121:::-;;;;:::o;3395:104::-;3451:13;3484:7;3477:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3395:104;:::o;21605:286::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21654:17:::1;21681:3;;;;;;;;;;;21674:21;;;21704:4;21674:36;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21654:56;;21728:3;;;;;;;;;;;21721:19;;;21749:4;21756:17;21770:2;21756:9;:13;;:17;;;;:::i;:::-;21721:53;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21792:3;;;;;;;;;;;21785:24;;;21818:4;21824:10;21835:9;21785:60;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21861:22;21873:9;21861:22;;;;;;:::i;:::-;;;;;;;;21643:248;21605:286::o:0;22654:795::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22861:12:::1;22842:16;:31;;;;22897:7;22884:10;:20;;;;22935:13;22915:17;:33;;;;22973:8;22959:11;:22;;;;23004:6;22992:9;:18;;;;23034:7;23021:10;:20;;;;23070:33;23092:10;;23070:17;;:21;;:33;;;;:::i;:::-;23054:13;:49;;;;23129:31;23150:9;;23129:16;;:20;;:31;;;;:::i;:::-;23114:12;:46;;;;23238:2;23221:13;;:19;;:41;;;;;23260:2;23244:12;;:18;;23221:41;23213:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;23321:120;23332:17;;23351:11;;23364:10;;23376:16;;23419:10;;23431:9;;23321:120;;;;;;;;;;;:::i;:::-;;;;;;;;22654:795:::0;;;;;;:::o;22027:140::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22118:41:::1;22147:4;22153:5;22118:28;:41::i;:::-;22027:140:::0;;:::o;16263:24::-;;;;:::o;16294:25::-;;;;:::o;4957:286::-;5050:4;5067:146;5076:12;:10;:12::i;:::-;5090:7;5099:113;5138:15;5099:113;;;;;;;;;;;;;;;;;:11;:25;5111:12;:10;:12::i;:::-;5099:25;;;;;;;;;;;;;;;:34;5125:7;5099:34;;;;;;;;;;;;;;;;:38;;:113;;;;;:::i;:::-;5067:8;:146::i;:::-;5231:4;5224:11;;4957:286;;;;:::o;20846:103::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20936:5:::1;20917:16;;:24;;;;;;;;;;;;;;;;;;20846:103:::0;:::o;3859:175::-;3945:4;3962:42;3972:12;:10;:12::i;:::-;3986:9;3997:6;3962:9;:42::i;:::-;4022:4;4015:11;;3859:175;;;;:::o;16160:26::-;;;;:::o;16851:::-;;;;:::o;16433:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;20957:174::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21045:3:::1;21036:5;:12;;21028:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;21118:5;21102:13;:21;;;;20957:174:::0;:::o;16039:35::-;;;;;;;;;;;;;:::o;4042:151::-;4131:7;4158:11;:18;4170:5;4158:18;;;;;;;;;;;;;;;:27;4177:7;4158:27;;;;;;;;;;;;;;;;4151:34;;4042:151;;;;:::o;16081:33::-;;;;:::o;16231:25::-;;;;:::o;7335:244::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;7444:1:::1;7424:22;;:8;:22;;::::0;7416:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7534:8;7505:38;;7526:6;;;;;;;;;;;7505:38;;;;;;;;;;;;7563:8;7554:6;;:17;;;;;;;;;;;;;;;;;;7335:244:::0;:::o;16008:24::-;;;;:::o;21143:218::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21227:6:::1;21218:5;:16;;;;:::i;:::-;21210:24;;21277:3;21262:12;;:18;;;;:::i;:::-;21253:5;:27;;21245:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;21348:5;21336:9;:17;;;;21143:218:::0;:::o;20312:125::-;7102:12;:10;:12::i;:::-;7092:22;;:6;;;;;;;;;;;:22;;;7084:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20391:4:::1;20373:6;:15;20380:7;20373:15;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;20411:18;20421:7;20411:18;;;;;;:::i;:::-;;;;;;;;20312:125:::0;:::o;521:179::-;579:7;599:9;615:1;611;:5;;;;:::i;:::-;599:17;;640:1;635;:6;;627:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;691:1;684:8;;;521:179;;;;:::o;145:98::-;198:7;225:10;218:17;;145:98;:::o;28408:802::-;28473:26;28520:16;;28502:17;;:34;;;;:::i;:::-;28473:63;;28547:20;28583:9;;28570:10;;:22;;;;:::i;:::-;28547:45;;28603:17;28642:12;28623:18;:31;;;;:::i;:::-;28603:51;;28665:21;28689:39;28718:9;28709:3;28690:18;:22;;;;:::i;:::-;28689:28;;:39;;;;:::i;:::-;28665:63;;28762:15;28780:33;28803:9;28794:3;28781:12;:16;;;;:::i;:::-;28780:22;;:33;;;;:::i;:::-;28762:51;;28849:23;28875:41;28912:3;28893:13;28876:14;:30;;;;:::i;:::-;28875:36;;:41;;;;:::i;:::-;28849:67;;28927:17;28947:35;28978:3;28965:7;28948:14;:24;;;;:::i;:::-;28947:30;;:35;;;;:::i;:::-;28927:55;;29017:1;28999:15;:19;28995:102;;;29035:50;29052:15;29069;;;;;;;;;;;29035:16;:50::i;:::-;28995:102;29133:1;29121:9;:13;29117:84;;;29151:38;29168:9;29179;;;;;;;;;;;29151:16;:38::i;:::-;29117:84;28460:750;;;;;;;28408:802;:::o;6183:346::-;6302:1;6285:19;;:5;:19;;;6277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6383:1;6364:21;;:7;:21;;;6356:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6467:6;6437:11;:18;6449:5;6437:18;;;;;;;;;;;;;;;:27;6456:7;6437:27;;;;;;;;;;;;;;;:36;;;;6505:7;6489:32;;6498:5;6489:32;;;6514:6;6489:32;;;;;;:::i;:::-;;;;;;;;6183:346;;;:::o;5251:538::-;5375:1;5357:20;;:6;:20;;;5349:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5459:1;5438:23;;:9;:23;;;5430:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5514:47;5535:6;5543:9;5554:6;5514:20;:47::i;:::-;5594:70;5616:6;5594:70;;;;;;;;;;;;;;;;;:9;:17;5604:6;5594:17;;;;;;;;;;;;;;;;:21;;:70;;;;;:::i;:::-;5574:9;:17;5584:6;5574:17;;;;;;;;;;;;;;;:90;;;;5698:32;5723:6;5698:9;:20;5708:9;5698:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;5675:9;:20;5685:9;5675:20;;;;;;;;;;;;;;;:55;;;;5763:9;5746:35;;5755:6;5746:35;;;5774:6;5746:35;;;;;;:::i;:::-;;;;;;;;5251:538;;;:::o;23699:4013::-;23815:1;23799:18;;:4;:18;;;23791:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23893:1;23879:16;;:2;:16;;;23871:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;23956:6;:12;23963:4;23956:12;;;;;;;;;;;;;;;;;;;;;;;;;23955:13;:28;;;;;23973:6;:10;23980:2;23973:10;;;;;;;;;;;;;;;;;;;;;;;;;23972:11;23955:28;23947:37;;;;;;23997:21;24029:15;24055:14;24087:33;:39;24121:4;24087:39;;;;;;;;;;;;;;;;;;;;;;;;;24082:142;;24151:14;;;;;;;;;;;24143:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;24082:142;24250:1;24240:6;:11;24236:3424;;24268:28;24284:4;24290:2;24294:1;24268:15;:28::i;:::-;24311:7;;;;;24236:3424;24374:19;:25;24394:4;24374:25;;;;;;;;;;;;;;;;;;;;;;;;;24373:26;:54;;;;;24404:19;:23;24424:2;24404:23;;;;;;;;;;;;;;;;;;;;;;;;;24403:24;24373:54;24355:3305;;;24454:14;24471:25;:29;24497:2;24471:29;;;;;;;;;;;;;;;;;;;;;;;;;24454:46;;24519:9;24515:1494;;;24565:17;;24549:33;;24611:11;;24601:21;;24650:10;;24641:19;;24685:14;;;;;;;;;;;24681:269;;;24789:13;;24747:28;:39;24776:9;24747:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;24728:15;:74;;24720:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;24915:15;24873:28;:39;24902:9;24873:39;;;;;;;;;;;;;;;:57;;;;24681:269;24515:1494;;;25034:16;;25018:32;;25079:10;;25069:20;;25117:9;;25108:18;;25151:14;;;;;;;;;;;25147:598;;;25223:1;25209:11;;:15;;;;:::i;:::-;25194:12;:30;25186:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25288:13;;25273:11;:28;;25265:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25395:12;25356:24;:35;25381:9;25356:35;;;;;;;;;;;;;;;;:51;25348:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25519:13;;25477:28;:39;25506:9;25477:39;;;;;;;;;;;;;;;;:55;;;;:::i;:::-;25458:15;:74;;25450:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;25641:12;25603:24;:35;25628:9;25603:35;;;;;;;;;;;;;;;:50;;;;25714:15;25672:28;:39;25701:9;25672:39;;;;;;;;;;;;;;;:57;;;;25147:598;25765:16;;;;;;;;;;;25761:233;;;25798:32;25833:13;25843:2;25833:9;:13::i;:::-;25798:48;;25906:9;;25896:6;25869:24;:33;;;;:::i;:::-;:46;;25861:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;25783:211;25761:233;24515:1494;26025:17;26045:25;26063:6;26045:13;:17;;:25;;;;:::i;:::-;26025:45;;26087:28;26118:24;26136:4;26118:9;:24::i;:::-;26087:55;;26159:12;26198:18;;26174:20;:42;;26159:57;;26237:7;:43;;;;;26249:25;:31;26275:4;26249:31;;;;;;;;;;;;;;;;;;;;;;;;;26248:32;26237:43;26233:991;;;26301:22;26324:20;26301:43;;26363:26;26410:16;;26392:17;;:34;;;;:::i;:::-;26363:63;;26445:20;26481:9;;26468:10;;:22;;;;:::i;:::-;26445:45;;26509:16;26547:12;26528:18;:31;;;;:::i;:::-;26509:50;;26578:21;26602:38;26631:8;26622:3;26603:18;:22;;;;:::i;:::-;26602:28;;:38;;;;:::i;:::-;26578:62;;26682:15;26700:32;26723:8;26714:3;26701:12;:16;;;;:::i;:::-;26700:22;;:32;;;;:::i;:::-;26682:50;;26776:23;26802:41;26839:3;26820:13;26803:14;:30;;;;:::i;:::-;26802:36;;:41;;;;:::i;:::-;26776:67;;26862:17;26882:35;26913:3;26900:7;26883:14;:24;;;;:::i;:::-;26882:30;;:35;;;;:::i;:::-;26862:55;;26960:1;26942:15;:19;26938:118;;;26986:50;27003:15;27020;;;;;;;;;;;26986:16;:50::i;:::-;26938:118;27108:1;27096:9;:13;27092:102;;;27134:38;27151:9;27162;;;;;;;;;;;27134:16;:38::i;:::-;27092:102;26282:942;;;;;;;;26233:991;27240:12;27255:30;27281:3;27255:21;27266:9;27255:6;:10;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;27240:45;;27300:18;27321:28;27345:3;27321:19;27332:7;27321:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;27300:49;;27375:29;27393:10;27386:4;:17;;;;:::i;:::-;27375:6;:10;;:29;;;;:::i;:::-;27366:38;;27421:42;27437:4;27451;27458;27421:15;:42::i;:::-;27497:1;27484:10;:14;27480:156;;;27519:39;27535:4;27541;;;;;;;;;;;27547:10;27519:15;:39::i;:::-;27592:28;27609:10;27592:12;;:16;;:28;;;;:::i;:::-;27577:12;:43;;;;27480:156;24439:3221;;;;;;24355:3305;27670:33;27686:4;27692:2;27696:6;27670:15;:33::i;:::-;23778:3934;;;23699:4013;;;;:::o;852:190::-;938:7;971:1;966;:6;;974:12;958:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;998:9;1014:1;1010;:5;;;;:::i;:::-;998:17;;1033:1;1026:8;;;852:190;;;;;:::o;1050:248::-;1108:7;1137:1;1132;:6;1128:47;;1162:1;1155:8;;;;1128:47;1187:9;1203:1;1199;:5;;;;:::i;:::-;1187:17;;1232:1;1227;1223;:5;;;;:::i;:::-;:10;1215:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1289:1;1282:8;;;1050:248;;;;;:::o;22175:188::-;22292:5;22258:25;:31;22284:4;22258:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;22349:5;22315:40;;22343:4;22315:40;;;;;;;;;;;;22175:188;;:::o;1306:132::-;1364:7;1391:39;1395:1;1398;1391:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1384:46;;1306:132;;;;:::o;27722:467::-;27806:21;27844:1;27830:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27806:40;;27875:4;27857;27862:1;27857:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27901:3;;;;;;;;;;;27891:4;27896:1;27891:7;;;;;;;;:::i;:::-;;;;;;;:13;;;;;;;;;;;27915:62;27932:4;27947:15;;;;;;;;;;;27965:11;27915:8;:62::i;:::-;27988:15;;;;;;;;;;;:40;;;28043:11;28069:1;28113:4;28132:8;28155:15;27988:193;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27795:394;27722:467;;:::o;6537:91::-;;;;:::o;708:136::-;766:7;793:43;797:1;800;793:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;786:50;;708:136;;;;:::o;1446:189::-;1532:7;1564:1;1560;:5;1567:12;1552:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1591:9;1607:1;1603;:5;;;;:::i;:::-;1591:17;;1626:1;1619:8;;;1446:189;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:75::-;626:6;659:2;653:9;643:19;;593:75;:::o;674:117::-;783:1;780;773:12;797:117;906:1;903;896:12;920:77;957:7;986:5;975:16;;920:77;;;:::o;1003:122::-;1076:24;1094:5;1076:24;:::i;:::-;1069:5;1066:35;1056:63;;1115:1;1112;1105:12;1056:63;1003:122;:::o;1131:139::-;1177:5;1215:6;1202:20;1193:29;;1231:33;1258:5;1231:33;:::i;:::-;1131:139;;;;:::o;1276:329::-;1335:6;1384:2;1372:9;1363:7;1359:23;1355:32;1352:119;;;1390:79;;:::i;:::-;1352:119;1510:1;1535:53;1580:7;1571:6;1560:9;1556:22;1535:53;:::i;:::-;1525:63;;1481:117;1276:329;;;;:::o;1611:99::-;1663:6;1697:5;1691:12;1681:22;;1611:99;;;:::o;1716:169::-;1800:11;1834:6;1829:3;1822:19;1874:4;1869:3;1865:14;1850:29;;1716:169;;;;:::o;1891:307::-;1959:1;1969:113;1983:6;1980:1;1977:13;1969:113;;;2068:1;2063:3;2059:11;2053:18;2049:1;2044:3;2040:11;2033:39;2005:2;2002:1;1998:10;1993:15;;1969:113;;;2100:6;2097:1;2094:13;2091:101;;;2180:1;2171:6;2166:3;2162:16;2155:27;2091:101;1940:258;1891:307;;;:::o;2204:102::-;2245:6;2296:2;2292:7;2287:2;2280:5;2276:14;2272:28;2262:38;;2204:102;;;:::o;2312:364::-;2400:3;2428:39;2461:5;2428:39;:::i;:::-;2483:71;2547:6;2542:3;2483:71;:::i;:::-;2476:78;;2563:52;2608:6;2603:3;2596:4;2589:5;2585:16;2563:52;:::i;:::-;2640:29;2662:6;2640:29;:::i;:::-;2635:3;2631:39;2624:46;;2404:272;2312:364;;;;:::o;2682:313::-;2795:4;2833:2;2822:9;2818:18;2810:26;;2882:9;2876:4;2872:20;2868:1;2857:9;2853:17;2846:47;2910:78;2983:4;2974:6;2910:78;:::i;:::-;2902:86;;2682:313;;;;:::o;3001:122::-;3074:24;3092:5;3074:24;:::i;:::-;3067:5;3064:35;3054:63;;3113:1;3110;3103:12;3054:63;3001:122;:::o;3129:139::-;3175:5;3213:6;3200:20;3191:29;;3229:33;3256:5;3229:33;:::i;:::-;3129:139;;;;:::o;3274:90::-;3308:7;3351:5;3344:13;3337:21;3326:32;;3274:90;;;:::o;3370:116::-;3440:21;3455:5;3440:21;:::i;:::-;3433:5;3430:32;3420:60;;3476:1;3473;3466:12;3420:60;3370:116;:::o;3492:133::-;3535:5;3573:6;3560:20;3551:29;;3589:30;3613:5;3589:30;:::i;:::-;3492:133;;;;:::o;3631:468::-;3696:6;3704;3753:2;3741:9;3732:7;3728:23;3724:32;3721:119;;;3759:79;;:::i;:::-;3721:119;3879:1;3904:53;3949:7;3940:6;3929:9;3925:22;3904:53;:::i;:::-;3894:63;;3850:117;4006:2;4032:50;4074:7;4065:6;4054:9;4050:22;4032:50;:::i;:::-;4022:60;;3977:115;3631:468;;;;;:::o;4105:474::-;4173:6;4181;4230:2;4218:9;4209:7;4205:23;4201:32;4198:119;;;4236:79;;:::i;:::-;4198:119;4356:1;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4327:117;4483:2;4509:53;4554:7;4545:6;4534:9;4530:22;4509:53;:::i;:::-;4499:63;;4454:118;4105:474;;;;;:::o;4585:109::-;4666:21;4681:5;4666:21;:::i;:::-;4661:3;4654:34;4585:109;;:::o;4700:210::-;4787:4;4825:2;4814:9;4810:18;4802:26;;4838:65;4900:1;4889:9;4885:17;4876:6;4838:65;:::i;:::-;4700:210;;;;:::o;4916:60::-;4944:3;4965:5;4958:12;;4916:60;;;:::o;4982:142::-;5032:9;5065:53;5083:34;5092:24;5110:5;5092:24;:::i;:::-;5083:34;:::i;:::-;5065:53;:::i;:::-;5052:66;;4982:142;;;:::o;5130:126::-;5180:9;5213:37;5244:5;5213:37;:::i;:::-;5200:50;;5130:126;;;:::o;5262:153::-;5339:9;5372:37;5403:5;5372:37;:::i;:::-;5359:50;;5262:153;;;:::o;5421:185::-;5535:64;5593:5;5535:64;:::i;:::-;5530:3;5523:77;5421:185;;:::o;5612:276::-;5732:4;5770:2;5759:9;5755:18;5747:26;;5783:98;5878:1;5867:9;5863:17;5854:6;5783:98;:::i;:::-;5612:276;;;;:::o;5894:118::-;5981:24;5999:5;5981:24;:::i;:::-;5976:3;5969:37;5894:118;;:::o;6018:222::-;6111:4;6149:2;6138:9;6134:18;6126:26;;6162:71;6230:1;6219:9;6215:17;6206:6;6162:71;:::i;:::-;6018:222;;;;:::o;6246:329::-;6305:6;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6480:1;6505:53;6550:7;6541:6;6530:9;6526:22;6505:53;:::i;:::-;6495:63;;6451:117;6246:329;;;;:::o;6581:117::-;6690:1;6687;6680:12;6704:180;6752:77;6749:1;6742:88;6849:4;6846:1;6839:15;6873:4;6870:1;6863:15;6890:281;6973:27;6995:4;6973:27;:::i;:::-;6965:6;6961:40;7103:6;7091:10;7088:22;7067:18;7055:10;7052:34;7049:62;7046:88;;;7114:18;;:::i;:::-;7046:88;7154:10;7150:2;7143:22;6933:238;6890:281;;:::o;7177:129::-;7211:6;7238:20;;:::i;:::-;7228:30;;7267:33;7295:4;7287:6;7267:33;:::i;:::-;7177:129;;;:::o;7312:311::-;7389:4;7479:18;7471:6;7468:30;7465:56;;;7501:18;;:::i;:::-;7465:56;7551:4;7543:6;7539:17;7531:25;;7611:4;7605;7601:15;7593:23;;7312:311;;;:::o;7629:117::-;7738:1;7735;7728:12;7769:710;7865:5;7890:81;7906:64;7963:6;7906:64;:::i;:::-;7890:81;:::i;:::-;7881:90;;7991:5;8020:6;8013:5;8006:21;8054:4;8047:5;8043:16;8036:23;;8107:4;8099:6;8095:17;8087:6;8083:30;8136:3;8128:6;8125:15;8122:122;;;8155:79;;:::i;:::-;8122:122;8270:6;8253:220;8287:6;8282:3;8279:15;8253:220;;;8362:3;8391:37;8424:3;8412:10;8391:37;:::i;:::-;8386:3;8379:50;8458:4;8453:3;8449:14;8442:21;;8329:144;8313:4;8308:3;8304:14;8297:21;;8253:220;;;8257:21;7871:608;;7769:710;;;;;:::o;8502:370::-;8573:5;8622:3;8615:4;8607:6;8603:17;8599:27;8589:122;;8630:79;;:::i;:::-;8589:122;8747:6;8734:20;8772:94;8862:3;8854:6;8847:4;8839:6;8835:17;8772:94;:::i;:::-;8763:103;;8579:293;8502:370;;;;:::o;8878:311::-;8955:4;9045:18;9037:6;9034:30;9031:56;;;9067:18;;:::i;:::-;9031:56;9117:4;9109:6;9105:17;9097:25;;9177:4;9171;9167:15;9159:23;;8878:311;;;:::o;9212:710::-;9308:5;9333:81;9349:64;9406:6;9349:64;:::i;:::-;9333:81;:::i;:::-;9324:90;;9434:5;9463:6;9456:5;9449:21;9497:4;9490:5;9486:16;9479:23;;9550:4;9542:6;9538:17;9530:6;9526:30;9579:3;9571:6;9568:15;9565:122;;;9598:79;;:::i;:::-;9565:122;9713:6;9696:220;9730:6;9725:3;9722:15;9696:220;;;9805:3;9834:37;9867:3;9855:10;9834:37;:::i;:::-;9829:3;9822:50;9901:4;9896:3;9892:14;9885:21;;9772:144;9756:4;9751:3;9747:14;9740:21;;9696:220;;;9700:21;9314:608;;9212:710;;;;;:::o;9945:370::-;10016:5;10065:3;10058:4;10050:6;10046:17;10042:27;10032:122;;10073:79;;:::i;:::-;10032:122;10190:6;10177:20;10215:94;10305:3;10297:6;10290:4;10282:6;10278:17;10215:94;:::i;:::-;10206:103;;10022:293;9945:370;;;;:::o;10321:894::-;10439:6;10447;10496:2;10484:9;10475:7;10471:23;10467:32;10464:119;;;10502:79;;:::i;:::-;10464:119;10650:1;10639:9;10635:17;10622:31;10680:18;10672:6;10669:30;10666:117;;;10702:79;;:::i;:::-;10666:117;10807:78;10877:7;10868:6;10857:9;10853:22;10807:78;:::i;:::-;10797:88;;10593:302;10962:2;10951:9;10947:18;10934:32;10993:18;10985:6;10982:30;10979:117;;;11015:79;;:::i;:::-;10979:117;11120:78;11190:7;11181:6;11170:9;11166:22;11120:78;:::i;:::-;11110:88;;10905:303;10321:894;;;;;:::o;11221:619::-;11298:6;11306;11314;11363:2;11351:9;11342:7;11338:23;11334:32;11331:119;;;11369:79;;:::i;:::-;11331:119;11489:1;11514:53;11559:7;11550:6;11539:9;11535:22;11514:53;:::i;:::-;11504:63;;11460:117;11616:2;11642:53;11687:7;11678:6;11667:9;11663:22;11642:53;:::i;:::-;11632:63;;11587:118;11744:2;11770:53;11815:7;11806:6;11795:9;11791:22;11770:53;:::i;:::-;11760:63;;11715:118;11221:619;;;;;:::o;11846:86::-;11881:7;11921:4;11914:5;11910:16;11899:27;;11846:86;;;:::o;11938:112::-;12021:22;12037:5;12021:22;:::i;:::-;12016:3;12009:35;11938:112;;:::o;12056:214::-;12145:4;12183:2;12172:9;12168:18;12160:26;;12196:67;12260:1;12249:9;12245:17;12236:6;12196:67;:::i;:::-;12056:214;;;;:::o;12276:323::-;12332:6;12381:2;12369:9;12360:7;12356:23;12352:32;12349:119;;;12387:79;;:::i;:::-;12349:119;12507:1;12532:50;12574:7;12565:6;12554:9;12550:22;12532:50;:::i;:::-;12522:60;;12478:114;12276:323;;;;:::o;12605:104::-;12650:7;12679:24;12697:5;12679:24;:::i;:::-;12668:35;;12605:104;;;:::o;12715:142::-;12818:32;12844:5;12818:32;:::i;:::-;12813:3;12806:45;12715:142;;:::o;12863:254::-;12972:4;13010:2;12999:9;12995:18;12987:26;;13023:87;13107:1;13096:9;13092:17;13083:6;13023:87;:::i;:::-;12863:254;;;;:::o;13123:1057::-;13227:6;13235;13243;13251;13259;13267;13316:3;13304:9;13295:7;13291:23;13287:33;13284:120;;;13323:79;;:::i;:::-;13284:120;13443:1;13468:53;13513:7;13504:6;13493:9;13489:22;13468:53;:::i;:::-;13458:63;;13414:117;13570:2;13596:53;13641:7;13632:6;13621:9;13617:22;13596:53;:::i;:::-;13586:63;;13541:118;13698:2;13724:53;13769:7;13760:6;13749:9;13745:22;13724:53;:::i;:::-;13714:63;;13669:118;13826:2;13852:53;13897:7;13888:6;13877:9;13873:22;13852:53;:::i;:::-;13842:63;;13797:118;13954:3;13981:53;14026:7;14017:6;14006:9;14002:22;13981:53;:::i;:::-;13971:63;;13925:119;14083:3;14110:53;14155:7;14146:6;14135:9;14131:22;14110:53;:::i;:::-;14100:63;;14054:119;13123:1057;;;;;;;;:::o;14186:474::-;14254:6;14262;14311:2;14299:9;14290:7;14286:23;14282:32;14279:119;;;14317:79;;:::i;:::-;14279:119;14437:1;14462:53;14507:7;14498:6;14487:9;14483:22;14462:53;:::i;:::-;14452:63;;14408:117;14564:2;14590:53;14635:7;14626:6;14615:9;14611:22;14590:53;:::i;:::-;14580:63;;14535:118;14186:474;;;;;:::o;14666:182::-;14806:34;14802:1;14794:6;14790:14;14783:58;14666:182;:::o;14854:366::-;14996:3;15017:67;15081:2;15076:3;15017:67;:::i;:::-;15010:74;;15093:93;15182:3;15093:93;:::i;:::-;15211:2;15206:3;15202:12;15195:19;;14854:366;;;:::o;15226:419::-;15392:4;15430:2;15419:9;15415:18;15407:26;;15479:9;15473:4;15469:20;15465:1;15454:9;15450:17;15443:47;15507:131;15633:4;15507:131;:::i;:::-;15499:139;;15226:419;;;:::o;15651:180::-;15699:77;15696:1;15689:88;15796:4;15793:1;15786:15;15820:4;15817:1;15810:15;15837:320;15881:6;15918:1;15912:4;15908:12;15898:22;;15965:1;15959:4;15955:12;15986:18;15976:81;;16042:4;16034:6;16030:17;16020:27;;15976:81;16104:2;16096:6;16093:14;16073:18;16070:38;16067:84;;16123:18;;:::i;:::-;16067:84;15888:269;15837:320;;;:::o;16163:180::-;16303:32;16299:1;16291:6;16287:14;16280:56;16163:180;:::o;16349:366::-;16491:3;16512:67;16576:2;16571:3;16512:67;:::i;:::-;16505:74;;16588:93;16677:3;16588:93;:::i;:::-;16706:2;16701:3;16697:12;16690:19;;16349:366;;;:::o;16721:419::-;16887:4;16925:2;16914:9;16910:18;16902:26;;16974:9;16968:4;16964:20;16960:1;16949:9;16945:17;16938:47;17002:131;17128:4;17002:131;:::i;:::-;16994:139;;16721:419;;;:::o;17146:221::-;17286:34;17282:1;17274:6;17270:14;17263:58;17355:4;17350:2;17342:6;17338:15;17331:29;17146:221;:::o;17373:366::-;17515:3;17536:67;17600:2;17595:3;17536:67;:::i;:::-;17529:74;;17612:93;17701:3;17612:93;:::i;:::-;17730:2;17725:3;17721:12;17714:19;;17373:366;;;:::o;17745:419::-;17911:4;17949:2;17938:9;17934:18;17926:26;;17998:9;17992:4;17988:20;17984:1;17973:9;17969:17;17962:47;18026:131;18152:4;18026:131;:::i;:::-;18018:139;;17745:419;;;:::o;18170:180::-;18218:77;18215:1;18208:88;18315:4;18312:1;18305:15;18339:4;18336:1;18329:15;18356:180;18404:77;18401:1;18394:88;18501:4;18498:1;18491:15;18525:4;18522:1;18515:15;18542:348;18582:7;18605:20;18623:1;18605:20;:::i;:::-;18600:25;;18639:20;18657:1;18639:20;:::i;:::-;18634:25;;18827:1;18759:66;18755:74;18752:1;18749:81;18744:1;18737:9;18730:17;18726:105;18723:131;;;18834:18;;:::i;:::-;18723:131;18882:1;18879;18875:9;18864:20;;18542:348;;;;:::o;18896:233::-;18935:3;18958:24;18976:5;18958:24;:::i;:::-;18949:33;;19004:66;18997:5;18994:77;18991:103;;19074:18;;:::i;:::-;18991:103;19121:1;19114:5;19110:13;19103:20;;18896:233;;;:::o;19135:143::-;19192:5;19223:6;19217:13;19208:22;;19239:33;19266:5;19239:33;:::i;:::-;19135:143;;;;:::o;19284:351::-;19354:6;19403:2;19391:9;19382:7;19378:23;19374:32;19371:119;;;19409:79;;:::i;:::-;19371:119;19529:1;19554:64;19610:7;19601:6;19590:9;19586:22;19554:64;:::i;:::-;19544:74;;19500:128;19284:351;;;;:::o;19641:332::-;19762:4;19800:2;19789:9;19785:18;19777:26;;19813:71;19881:1;19870:9;19866:17;19857:6;19813:71;:::i;:::-;19894:72;19962:2;19951:9;19947:18;19938:6;19894:72;:::i;:::-;19641:332;;;;;:::o;19979:137::-;20033:5;20064:6;20058:13;20049:22;;20080:30;20104:5;20080:30;:::i;:::-;19979:137;;;;:::o;20122:345::-;20189:6;20238:2;20226:9;20217:7;20213:23;20209:32;20206:119;;;20244:79;;:::i;:::-;20206:119;20364:1;20389:61;20442:7;20433:6;20422:9;20418:22;20389:61;:::i;:::-;20379:71;;20335:125;20122:345;;;;:::o;20473:442::-;20622:4;20660:2;20649:9;20645:18;20637:26;;20673:71;20741:1;20730:9;20726:17;20717:6;20673:71;:::i;:::-;20754:72;20822:2;20811:9;20807:18;20798:6;20754:72;:::i;:::-;20836;20904:2;20893:9;20889:18;20880:6;20836:72;:::i;:::-;20473:442;;;;;;:::o;20921:223::-;21061:34;21057:1;21049:6;21045:14;21038:58;21130:6;21125:2;21117:6;21113:15;21106:31;20921:223;:::o;21150:366::-;21292:3;21313:67;21377:2;21372:3;21313:67;:::i;:::-;21306:74;;21389:93;21478:3;21389:93;:::i;:::-;21507:2;21502:3;21498:12;21491:19;;21150:366;;;:::o;21522:419::-;21688:4;21726:2;21715:9;21711:18;21703:26;;21775:9;21769:4;21765:20;21761:1;21750:9;21746:17;21739:47;21803:131;21929:4;21803:131;:::i;:::-;21795:139;;21522:419;;;:::o;21947:775::-;22180:4;22218:3;22207:9;22203:19;22195:27;;22232:71;22300:1;22289:9;22285:17;22276:6;22232:71;:::i;:::-;22313:72;22381:2;22370:9;22366:18;22357:6;22313:72;:::i;:::-;22395;22463:2;22452:9;22448:18;22439:6;22395:72;:::i;:::-;22477;22545:2;22534:9;22530:18;22521:6;22477:72;:::i;:::-;22559:73;22627:3;22616:9;22612:19;22603:6;22559:73;:::i;:::-;22642;22710:3;22699:9;22695:19;22686:6;22642:73;:::i;:::-;21947:775;;;;;;;;;:::o;22728:225::-;22868:34;22864:1;22856:6;22852:14;22845:58;22937:8;22932:2;22924:6;22920:15;22913:33;22728:225;:::o;22959:366::-;23101:3;23122:67;23186:2;23181:3;23122:67;:::i;:::-;23115:74;;23198:93;23287:3;23198:93;:::i;:::-;23316:2;23311:3;23307:12;23300:19;;22959:366;;;:::o;23331:419::-;23497:4;23535:2;23524:9;23520:18;23512:26;;23584:9;23578:4;23574:20;23570:1;23559:9;23555:17;23548:47;23612:131;23738:4;23612:131;:::i;:::-;23604:139;;23331:419;;;:::o;23756:225::-;23896:34;23892:1;23884:6;23880:14;23873:58;23965:8;23960:2;23952:6;23948:15;23941:33;23756:225;:::o;23987:366::-;24129:3;24150:67;24214:2;24209:3;24150:67;:::i;:::-;24143:74;;24226:93;24315:3;24226:93;:::i;:::-;24344:2;24339:3;24335:12;24328:19;;23987:366;;;:::o;24359:419::-;24525:4;24563:2;24552:9;24548:18;24540:26;;24612:9;24606:4;24602:20;24598:1;24587:9;24583:17;24576:47;24640:131;24766:4;24640:131;:::i;:::-;24632:139;;24359:419;;;:::o;24784:180::-;24832:77;24829:1;24822:88;24929:4;24926:1;24919:15;24953:4;24950:1;24943:15;24970:185;25010:1;25027:20;25045:1;25027:20;:::i;:::-;25022:25;;25061:20;25079:1;25061:20;:::i;:::-;25056:25;;25100:1;25090:35;;25105:18;;:::i;:::-;25090:35;25147:1;25144;25140:9;25135:14;;24970:185;;;;:::o;25161:227::-;25301:34;25297:1;25289:6;25285:14;25278:58;25370:10;25365:2;25357:6;25353:15;25346:35;25161:227;:::o;25394:366::-;25536:3;25557:67;25621:2;25616:3;25557:67;:::i;:::-;25550:74;;25633:93;25722:3;25633:93;:::i;:::-;25751:2;25746:3;25742:12;25735:19;;25394:366;;;:::o;25766:419::-;25932:4;25970:2;25959:9;25955:18;25947:26;;26019:9;26013:4;26009:20;26005:1;25994:9;25990:17;25983:47;26047:131;26173:4;26047:131;:::i;:::-;26039:139;;25766:419;;;:::o;26191:305::-;26231:3;26250:20;26268:1;26250:20;:::i;:::-;26245:25;;26284:20;26302:1;26284:20;:::i;:::-;26279:25;;26438:1;26370:66;26366:74;26363:1;26360:81;26357:107;;;26444:18;;:::i;:::-;26357:107;26488:1;26485;26481:9;26474:16;;26191:305;;;;:::o;26502:177::-;26642:29;26638:1;26630:6;26626:14;26619:53;26502:177;:::o;26685:366::-;26827:3;26848:67;26912:2;26907:3;26848:67;:::i;:::-;26841:74;;26924:93;27013:3;26924:93;:::i;:::-;27042:2;27037:3;27033:12;27026:19;;26685:366;;;:::o;27057:419::-;27223:4;27261:2;27250:9;27246:18;27238:26;;27310:9;27304:4;27300:20;27296:1;27285:9;27281:17;27274:47;27338:131;27464:4;27338:131;:::i;:::-;27330:139;;27057:419;;;:::o;27482:223::-;27622:34;27618:1;27610:6;27606:14;27599:58;27691:6;27686:2;27678:6;27674:15;27667:31;27482:223;:::o;27711:366::-;27853:3;27874:67;27938:2;27933:3;27874:67;:::i;:::-;27867:74;;27950:93;28039:3;27950:93;:::i;:::-;28068:2;28063:3;28059:12;28052:19;;27711:366;;;:::o;28083:419::-;28249:4;28287:2;28276:9;28272:18;28264:26;;28336:9;28330:4;28326:20;28322:1;28311:9;28307:17;28300:47;28364:131;28490:4;28364:131;:::i;:::-;28356:139;;28083:419;;;:::o;28508:221::-;28648:34;28644:1;28636:6;28632:14;28625:58;28717:4;28712:2;28704:6;28700:15;28693:29;28508:221;:::o;28735:366::-;28877:3;28898:67;28962:2;28957:3;28898:67;:::i;:::-;28891:74;;28974:93;29063:3;28974:93;:::i;:::-;29092:2;29087:3;29083:12;29076:19;;28735:366;;;:::o;29107:419::-;29273:4;29311:2;29300:9;29296:18;29288:26;;29360:9;29354:4;29350:20;29346:1;29335:9;29331:17;29324:47;29388:131;29514:4;29388:131;:::i;:::-;29380:139;;29107:419;;;:::o;29532:224::-;29672:34;29668:1;29660:6;29656:14;29649:58;29741:7;29736:2;29728:6;29724:15;29717:32;29532:224;:::o;29762:366::-;29904:3;29925:67;29989:2;29984:3;29925:67;:::i;:::-;29918:74;;30001:93;30090:3;30001:93;:::i;:::-;30119:2;30114:3;30110:12;30103:19;;29762:366;;;:::o;30134:419::-;30300:4;30338:2;30327:9;30323:18;30315:26;;30387:9;30381:4;30377:20;30373:1;30362:9;30358:17;30351:47;30415:131;30541:4;30415:131;:::i;:::-;30407:139;;30134:419;;;:::o;30559:222::-;30699:34;30695:1;30687:6;30683:14;30676:58;30768:5;30763:2;30755:6;30751:15;30744:30;30559:222;:::o;30787:366::-;30929:3;30950:67;31014:2;31009:3;30950:67;:::i;:::-;30943:74;;31026:93;31115:3;31026:93;:::i;:::-;31144:2;31139:3;31135:12;31128:19;;30787:366;;;:::o;31159:419::-;31325:4;31363:2;31352:9;31348:18;31340:26;;31412:9;31406:4;31402:20;31398:1;31387:9;31383:17;31376:47;31440:131;31566:4;31440:131;:::i;:::-;31432:139;;31159:419;;;:::o;31584:225::-;31724:34;31720:1;31712:6;31708:14;31701:58;31793:8;31788:2;31780:6;31776:15;31769:33;31584:225;:::o;31815:366::-;31957:3;31978:67;32042:2;32037:3;31978:67;:::i;:::-;31971:74;;32054:93;32143:3;32054:93;:::i;:::-;32172:2;32167:3;32163:12;32156:19;;31815:366;;;:::o;32187:419::-;32353:4;32391:2;32380:9;32376:18;32368:26;;32440:9;32434:4;32430:20;32426:1;32415:9;32411:17;32404:47;32468:131;32594:4;32468:131;:::i;:::-;32460:139;;32187:419;;;:::o;32612:223::-;32752:34;32748:1;32740:6;32736:14;32729:58;32821:6;32816:2;32808:6;32804:15;32797:31;32612:223;:::o;32841:366::-;32983:3;33004:67;33068:2;33063:3;33004:67;:::i;:::-;32997:74;;33080:93;33169:3;33080:93;:::i;:::-;33198:2;33193:3;33189:12;33182:19;;32841:366;;;:::o;33213:419::-;33379:4;33417:2;33406:9;33402:18;33394:26;;33466:9;33460:4;33456:20;33452:1;33441:9;33437:17;33430:47;33494:131;33620:4;33494:131;:::i;:::-;33486:139;;33213:419;;;:::o;33638:182::-;33778:34;33774:1;33766:6;33762:14;33755:58;33638:182;:::o;33826:366::-;33968:3;33989:67;34053:2;34048:3;33989:67;:::i;:::-;33982:74;;34065:93;34154:3;34065:93;:::i;:::-;34183:2;34178:3;34174:12;34167:19;;33826:366;;;:::o;34198:419::-;34364:4;34402:2;34391:9;34387:18;34379:26;;34451:9;34445:4;34441:20;34437:1;34426:9;34422:17;34415:47;34479:131;34605:4;34479:131;:::i;:::-;34471:139;;34198:419;;;:::o;34623:172::-;34763:24;34759:1;34751:6;34747:14;34740:48;34623:172;:::o;34801:366::-;34943:3;34964:67;35028:2;35023:3;34964:67;:::i;:::-;34957:74;;35040:93;35129:3;35040:93;:::i;:::-;35158:2;35153:3;35149:12;35142:19;;34801:366;;;:::o;35173:419::-;35339:4;35377:2;35366:9;35362:18;35354:26;;35426:9;35420:4;35416:20;35412:1;35401:9;35397:17;35390:47;35454:131;35580:4;35454:131;:::i;:::-;35446:139;;35173:419;;;:::o;35598:168::-;35738:20;35734:1;35726:6;35722:14;35715:44;35598:168;:::o;35772:366::-;35914:3;35935:67;35999:2;35994:3;35935:67;:::i;:::-;35928:74;;36011:93;36100:3;36011:93;:::i;:::-;36129:2;36124:3;36120:12;36113:19;;35772:366;;;:::o;36144:419::-;36310:4;36348:2;36337:9;36333:18;36325:26;;36397:9;36391:4;36387:20;36383:1;36372:9;36368:17;36361:47;36425:131;36551:4;36425:131;:::i;:::-;36417:139;;36144:419;;;:::o;36569:174::-;36709:26;36705:1;36697:6;36693:14;36686:50;36569:174;:::o;36749:366::-;36891:3;36912:67;36976:2;36971:3;36912:67;:::i;:::-;36905:74;;36988:93;37077:3;36988:93;:::i;:::-;37106:2;37101:3;37097:12;37090:19;;36749:366;;;:::o;37121:419::-;37287:4;37325:2;37314:9;37310:18;37302:26;;37374:9;37368:4;37364:20;37360:1;37349:9;37345:17;37338:47;37402:131;37528:4;37402:131;:::i;:::-;37394:139;;37121:419;;;:::o;37546:170::-;37686:22;37682:1;37674:6;37670:14;37663:46;37546:170;:::o;37722:366::-;37864:3;37885:67;37949:2;37944:3;37885:67;:::i;:::-;37878:74;;37961:93;38050:3;37961:93;:::i;:::-;38079:2;38074:3;38070:12;38063:19;;37722:366;;;:::o;38094:419::-;38260:4;38298:2;38287:9;38283:18;38275:26;;38347:9;38341:4;38337:20;38333:1;38322:9;38318:17;38311:47;38375:131;38501:4;38375:131;:::i;:::-;38367:139;;38094:419;;;:::o;38519:223::-;38659:34;38655:1;38647:6;38643:14;38636:58;38728:6;38723:2;38715:6;38711:15;38704:31;38519:223;:::o;38748:366::-;38890:3;38911:67;38975:2;38970:3;38911:67;:::i;:::-;38904:74;;38987:93;39076:3;38987:93;:::i;:::-;39105:2;39100:3;39096:12;39089:19;;38748:366;;;:::o;39120:419::-;39286:4;39324:2;39313:9;39309:18;39301:26;;39373:9;39367:4;39363:20;39359:1;39348:9;39344:17;39337:47;39401:131;39527:4;39401:131;:::i;:::-;39393:139;;39120:419;;;:::o;39545:191::-;39585:4;39605:20;39623:1;39605:20;:::i;:::-;39600:25;;39639:20;39657:1;39639:20;:::i;:::-;39634:25;;39678:1;39675;39672:8;39669:34;;;39683:18;;:::i;:::-;39669:34;39728:1;39725;39721:9;39713:17;;39545:191;;;;:::o;39742:220::-;39882:34;39878:1;39870:6;39866:14;39859:58;39951:3;39946:2;39938:6;39934:15;39927:28;39742:220;:::o;39968:366::-;40110:3;40131:67;40195:2;40190:3;40131:67;:::i;:::-;40124:74;;40207:93;40296:3;40207:93;:::i;:::-;40325:2;40320:3;40316:12;40309:19;;39968:366;;;:::o;40340:419::-;40506:4;40544:2;40533:9;40529:18;40521:26;;40593:9;40587:4;40583:20;40579:1;40568:9;40564:17;40557:47;40621:131;40747:4;40621:131;:::i;:::-;40613:139;;40340:419;;;:::o;40765:85::-;40810:7;40839:5;40828:16;;40765:85;;;:::o;40856:158::-;40914:9;40947:61;40965:42;40974:32;41000:5;40974:32;:::i;:::-;40965:42;:::i;:::-;40947:61;:::i;:::-;40934:74;;40856:158;;;:::o;41020:147::-;41115:45;41154:5;41115:45;:::i;:::-;41110:3;41103:58;41020:147;;:::o;41173:114::-;41240:6;41274:5;41268:12;41258:22;;41173:114;;;:::o;41293:184::-;41392:11;41426:6;41421:3;41414:19;41466:4;41461:3;41457:14;41442:29;;41293:184;;;;:::o;41483:132::-;41550:4;41573:3;41565:11;;41603:4;41598:3;41594:14;41586:22;;41483:132;;;:::o;41621:108::-;41698:24;41716:5;41698:24;:::i;:::-;41693:3;41686:37;41621:108;;:::o;41735:179::-;41804:10;41825:46;41867:3;41859:6;41825:46;:::i;:::-;41903:4;41898:3;41894:14;41880:28;;41735:179;;;;:::o;41920:113::-;41990:4;42022;42017:3;42013:14;42005:22;;41920:113;;;:::o;42069:732::-;42188:3;42217:54;42265:5;42217:54;:::i;:::-;42287:86;42366:6;42361:3;42287:86;:::i;:::-;42280:93;;42397:56;42447:5;42397:56;:::i;:::-;42476:7;42507:1;42492:284;42517:6;42514:1;42511:13;42492:284;;;42593:6;42587:13;42620:63;42679:3;42664:13;42620:63;:::i;:::-;42613:70;;42706:60;42759:6;42706:60;:::i;:::-;42696:70;;42552:224;42539:1;42536;42532:9;42527:14;;42492:284;;;42496:14;42792:3;42785:10;;42193:608;;;42069:732;;;;:::o;42807:831::-;43070:4;43108:3;43097:9;43093:19;43085:27;;43122:71;43190:1;43179:9;43175:17;43166:6;43122:71;:::i;:::-;43203:80;43279:2;43268:9;43264:18;43255:6;43203:80;:::i;:::-;43330:9;43324:4;43320:20;43315:2;43304:9;43300:18;43293:48;43358:108;43461:4;43452:6;43358:108;:::i;:::-;43350:116;;43476:72;43544:2;43533:9;43529:18;43520:6;43476:72;:::i;:::-;43558:73;43626:3;43615:9;43611:19;43602:6;43558:73;:::i;:::-;42807:831;;;;;;;;:::o;43661:732::-;43768:5;43793:81;43809:64;43866:6;43809:64;:::i;:::-;43793:81;:::i;:::-;43784:90;;43894:5;43923:6;43916:5;43909:21;43957:4;43950:5;43946:16;43939:23;;44010:4;44002:6;43998:17;43990:6;43986:30;44039:3;44031:6;44028:15;44025:122;;;44058:79;;:::i;:::-;44025:122;44173:6;44156:231;44190:6;44185:3;44182:15;44156:231;;;44265:3;44294:48;44338:3;44326:10;44294:48;:::i;:::-;44289:3;44282:61;44372:4;44367:3;44363:14;44356:21;;44232:155;44216:4;44211:3;44207:14;44200:21;;44156:231;;;44160:21;43774:619;;43661:732;;;;;:::o;44416:385::-;44498:5;44547:3;44540:4;44532:6;44528:17;44524:27;44514:122;;44555:79;;:::i;:::-;44514:122;44665:6;44659:13;44690:105;44791:3;44783:6;44776:4;44768:6;44764:17;44690:105;:::i;:::-;44681:114;;44504:297;44416:385;;;;:::o;44807:554::-;44902:6;44951:2;44939:9;44930:7;44926:23;44922:32;44919:119;;;44957:79;;:::i;:::-;44919:119;45098:1;45087:9;45083:17;45077:24;45128:18;45120:6;45117:30;45114:117;;;45150:79;;:::i;:::-;45114:117;45255:89;45336:7;45327:6;45316:9;45312:22;45255:89;:::i;:::-;45245:99;;45048:306;44807:554;;;;:::o

Swarm Source

ipfs://c49f54117ee90035c103caf77bfa5ca8edc558e70dc2d38c50179043435e0ac3
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.