BNB Price: $695.44 (-2.04%)
Gas: 1 GWei
 

Overview

Max Total Supply

10,000,000,000,000AKRA

Holders

42

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
BSC: Validator Set
Balance
205,198,336,443 AKRA

Value
$0.00
0x0000000000000000000000000000000000001000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
AKRAWORD

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2022-02-03
*/

pragma solidity 0.8.5;

// SPDX-License-Identifier: MIT

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

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

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

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;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

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

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor (address initialOwner) {
        _owner = initialOwner;
        emit OwnershipTransferred(address(0), initialOwner);
    }

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

    function getUnlockTime() public view returns (uint256) {
        return _lockTime;
    }

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = block.timestamp + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    
    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(block.timestamp > _lockTime , "Contract is still locked");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract AKRAWORD is Context, IBEP20, Ownable {
    using SafeMath for uint256;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool)    private _isExcludedFromFee;
    mapping (address => bool)    private _isExcluded;
    mapping (address => mapping (address => uint256)) private _allowances;

    address[] private _excluded;
    address public _marketingWallet;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 10000000000000 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string public constant name     = "AKRAWORD";
    string public constant symbol   = "AKRA";
    uint8  public constant decimals = 18;
    
    // transfer fee
    uint256 public _taxFeeTransfer       = 0;
    uint256 public _liquidityFeeTransfer = 0; 
    uint256 public _marketingFeeTransfer = 0; 

    // buy fee
    uint256 public _taxFeeBuy       = 300;
    uint256 public _liquidityFeeBuy = 300; 
    uint256 public _marketingFeeBuy = 300; 

    // sell fee
    uint256 public _taxFeeSell       = 1000; 
    uint256 public _liquidityFeeSell = 1000; 
    uint256 public _marketingFeeSell = 1000; 

    uint256 public _sellPercentageOfLiquidityForCashback = 0;

    uint256 public _maxTxAmount     = _tTotal / 2;
    uint256 public _minTokenBalance = _tTotal / 2000;
    
    // liquidity
    bool public  _swapAndLiquifyEnabled = true;
    bool private _inSwapAndLiquify;
    IUniswapV2Router02 public _uniswapV2Router;
    address            public _uniswapV2Pair;
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 bnbReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        _inSwapAndLiquify = true;
        _;
        _inSwapAndLiquify = false;
    }
    
    constructor (address cOwner, address marketingWallet) Ownable(cOwner) {
        _marketingWallet = marketingWallet;

        _rOwned[cOwner] = _rTotal;
        
        // Create a uniswap pair for this new token
        IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        _uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _uniswapV2Router = uniswapV2Router;

        // exclude system addresses from fee
        _isExcludedFromFee[owner()]          = true;
        _isExcludedFromFee[address(this)]    = true;
        _isExcludedFromFee[_marketingWallet] = true;
        
        emit Transfer(address(0), cOwner, _tTotal);
    }

    receive() external payable {}

    // BEP20
    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }
    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }
    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
    function allowance(address owner, address spender) public view override returns (uint256) {
        return _allowances[owner][spender];
    }
    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
    function _approve(address owner, address spender, uint256 amount) private {
        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 transferFrom(address sender, address recipient, uint256 amount) public 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;
    }

    // REFLECTION
    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");

        if (!deductTransferFee) {
            (, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
            uint256 currentRate = _getRate();
            (uint256 rAmount,,) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, currentRate);

            return rAmount;

        } else {
            (, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
            uint256 currentRate = _getRate();
            (, uint256 rTransferAmount,) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, currentRate);

            return rTransferAmount;
        }
    }
    function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");

        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }
    function excludeFromReward(address account) public onlyOwner {
        require(!_isExcluded[account], "Account is already excluded");

        if (_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    function includeInReward(address account) external onlyOwner {
        require(_isExcluded[account], "Account is already excluded");

        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }
    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    // STATE
    function setMarketingWallet(address marketingWallet) external onlyOwner {
        _marketingWallet = marketingWallet;
    }
    function setExcludedFromFee(address account, bool e) external onlyOwner {
        _isExcludedFromFee[account] = e;
    }
    function setTransferFee(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee) external onlyOwner {
        _taxFeeTransfer       = taxFee;
        _liquidityFeeTransfer = liquidityFee;
        _marketingFeeTransfer = marketingFee;
    }
    function setBuyFee(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee) external onlyOwner {
        _taxFeeBuy       = taxFee;
        _liquidityFeeBuy = liquidityFee;
        _marketingFeeBuy = marketingFee;
    }
    function setSellFee(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee) external onlyOwner {
        _taxFeeSell       = taxFee;
        _liquidityFeeSell = liquidityFee;
        _marketingFeeSell = marketingFee;
    }
    function setCashbackPercent(uint256 cashbackPercent) external onlyOwner {
        _sellPercentageOfLiquidityForCashback = cashbackPercent;
    }
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner {
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(100);
    }
    function setMinTokenBalance(uint256 minTokenBalance) external onlyOwner {
        _minTokenBalance = minTokenBalance;
    }
    function setSwapAndLiquifyEnabled(bool enabled) public onlyOwner {
        _swapAndLiquifyEnabled = enabled;
        emit SwapAndLiquifyEnabledUpdated(enabled);
    }
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }
    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }
    function setUniswapRouter(address r) external onlyOwner {
        IUniswapV2Router02 uniswapV2Router = IUniswapV2Router02(r);
        _uniswapV2Router = uniswapV2Router;
    }
    function setUniswapPair(address p) external onlyOwner {
        _uniswapV2Pair = p;
    }
    function withdrawBnb(uint256 amount) external onlyOwner {
        payable(owner()).transfer(amount);
    }
    function withdrawToken(address tokenAddress, uint256 amount) external onlyOwner {
        IBEP20(tokenAddress).transfer(owner(), amount);
    }

    // TRANSFER
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "BEP20: transfer from the zero address");
        require(to != address(0), "BEP20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        /*
            - swapAndLiquify will be initiated when token balance of this contract
            has accumulated enough over the minimum number of tokens required.
            - don't get caught in a circular liquidity event.
            - don't swapAndLiquify if sender is uniswap pair.
        */

        uint256 contractTokenBalance = balanceOf(address(this));
        
        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }
        
        bool isOverMinTokenBalance = contractTokenBalance >= _minTokenBalance;
        if (
            isOverMinTokenBalance &&
            !_inSwapAndLiquify &&
            from != _uniswapV2Pair &&
            _swapAndLiquifyEnabled
        ) {
            contractTokenBalance = _minTokenBalance;
            swapAndLiquify(contractTokenBalance);
        }
        
        bool takeFee = true;
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        _tokenTransfer(from, to, amount, takeFee);
    }
    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // split contract balance into halves
        uint256 half      = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        /*
            capture the contract's current BNB balance.
            this is so that we can capture exactly the amount of BNB that
            the swap creates, and not make the liquidity event include any BNB
            that has been manually sent to the contract.
        */
        uint256 initialBalance = address(this).balance;

        // swap tokens for BNB
        swapTokensForBnb(half);

        // this is the amount of BNB that we just swapped into
        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 bnbForCashback = newBalance.mul(_sellPercentageOfLiquidityForCashback).div(100);
        uint256 bnbForLiquidity = newBalance.sub(bnbForCashback);

        // add liquidity to uniswap
        addLiquidity(otherHalf, bnbForLiquidity);
        
        emit SwapAndLiquify(half, bnbForLiquidity, otherHalf);
    }
    function swapTokensForBnb(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        _approve(address(this), address(_uniswapV2Router), tokenAmount);

        // make the swap
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of BNB
            path,
            address(this),
            block.timestamp
        );
    }
    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(_uniswapV2Router), tokenAmount);

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

    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
        uint256 previousTaxFee       = _taxFeeTransfer;
        uint256 previousLiquidityFee = _liquidityFeeTransfer;
        uint256 previousMarketingFee = _marketingFeeTransfer;

        bool isBuy  = sender == _uniswapV2Pair && recipient != address(_uniswapV2Router);
        bool isSell = recipient == _uniswapV2Pair;

        if (!takeFee) {
            _taxFeeTransfer       = 0;
            _liquidityFeeTransfer = 0;
            _marketingFeeTransfer = 0;

        } else if (isBuy) { 
            _taxFeeTransfer       = _taxFeeBuy;
            _liquidityFeeTransfer = _liquidityFeeBuy;
            _marketingFeeTransfer = _marketingFeeBuy;

        } else if (isSell) { 
            _taxFeeTransfer       = _taxFeeSell;
            _liquidityFeeTransfer = _liquidityFeeSell;
            _marketingFeeTransfer = _marketingFeeSell;
        }
        

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);

        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);

        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, amount);

        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);

        } else {
            _transferStandard(sender, recipient, amount);
        }

        
        if (!takeFee || isBuy || isSell) {
            _taxFeeTransfer       = previousTaxFee;
            _liquidityFeeTransfer = previousLiquidityFee;
            _marketingFeeTransfer = previousMarketingFee;
        }
    }
    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, currentRate);

        _rOwned[sender]    = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(sender, address(this), tLiquidity, currentRate);
        takeTransactionFee(sender, address(_marketingWallet), tMarketing, currentRate);
        reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, currentRate);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(sender, address(this), tLiquidity, currentRate);
        takeTransactionFee(sender, address(_marketingWallet), tMarketing, currentRate);
        reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, currentRate);

        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(sender, address(this), tLiquidity, currentRate);
        takeTransactionFee(sender, address(_marketingWallet), tMarketing, currentRate);
        reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, tMarketing, currentRate);

        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);

        takeTransactionFee(sender, address(this), tLiquidity, currentRate);
        takeTransactionFee(sender, address(_marketingWallet), tMarketing, currentRate);
        reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    function reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal    = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }
    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256) {
        uint256 tFee       = tAmount.mul(_taxFeeTransfer).div(10000);
        uint256 tLiquidity = tAmount.mul(_liquidityFeeTransfer).div(10000);
        uint256 tMarketing = tAmount.mul(_marketingFeeTransfer).div(10000);
        uint256 tTransferAmount = tAmount.sub(tFee);
        tTransferAmount = tTransferAmount.sub(tLiquidity);
        tTransferAmount = tTransferAmount.sub(tMarketing);
        return (tTransferAmount, tFee, tLiquidity, tMarketing);
    }
    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount     = tAmount.mul(currentRate);
        uint256 rFee        = tFee.mul(currentRate);
        uint256 rLiquidity  = tLiquidity.mul(currentRate);
        uint256 rMarketing  = tMarketing.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee);
        rTransferAmount = rTransferAmount.sub(rLiquidity);
        rTransferAmount = rTransferAmount.sub(rMarketing);
        return (rAmount, rTransferAmount, rFee);
    }
    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }
    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    function takeTransactionFee(address from, address to, uint256 tAmount, uint256 currentRate) private {
        if (tAmount <= 0) { return; }

        uint256 rAmount = tAmount.mul(currentRate);
        _rOwned[to] = _rOwned[to].add(rAmount);
        if (_isExcluded[to]) {
            _tOwned[to] = _tOwned[to].add(tAmount);
        }
        if (to != address(this)) {
            emit Transfer(from, to, tAmount);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"cOwner","type":"address"},{"internalType":"address","name":"marketingWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minTokenBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellPercentageOfLiquidityForCashback","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeTransfer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cashbackPercent","type":"uint256"}],"name":"setCashbackPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"e","type":"bool"}],"name":"setExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minTokenBalance","type":"uint256"}],"name":"setMinTokenBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setTransferFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"p","type":"address"}],"name":"setUniswapPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"r","type":"address"}],"name":"setUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawBnb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526c7e37be2022c0914b2680000000600a55600a54600019620000279190620007bd565b60001962000036919062000744565b600b556000600d556000600e556000600f5561012c60105561012c60115561012c6012556103e86013556103e86014556103e860155560006016556002600a546200008291906200070c565b6017556107d0600a546200009791906200070c565b6018556001601960006101000a81548160ff021916908315150217905550348015620000c257600080fd5b5060405162006847380380620068478339818101604052810190620000e8919062000659565b81806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600b54600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060007310ed43c718714eb63d5aa57b78b54704e256024e90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026c57600080fd5b505afa15801562000281573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a7919062000627565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030a57600080fd5b505afa1580156200031f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000345919062000627565b6040518363ffffffff1660e01b815260040162000364929190620006c2565b602060405180830381600087803b1580156200037f57600080fd5b505af115801562000394573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ba919062000627565b601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016005600062000451620005e760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160056000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620005d69190620006ef565b60405180910390a350505062000872565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620006218162000858565b92915050565b60006020828403121562000640576200063f62000853565b5b6000620006508482850162000610565b91505092915050565b6000806040838503121562000673576200067262000853565b5b6000620006838582860162000610565b9250506020620006968582860162000610565b9150509250929050565b620006ab816200077f565b82525050565b620006bc81620007b3565b82525050565b6000604082019050620006d96000830185620006a0565b620006e86020830184620006a0565b9392505050565b6000602082019050620007066000830184620006b1565b92915050565b60006200071982620007b3565b91506200072683620007b3565b92508262000739576200073862000824565b5b828204905092915050565b60006200075182620007b3565b91506200075e83620007b3565b925082821015620007745762000773620007f5565b5b828203905092915050565b60006200078c8262000793565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000620007ca82620007b3565b9150620007d783620007b3565b925082620007ea57620007e962000824565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600080fd5b62000863816200077f565b81146200086f57600080fd5b50565b615fc580620008826000396000f3fe60806040526004361061031e5760003560e01c806388f82020116101ab578063bea9849e116100f7578063d8d89bc611610095578063e7c892321161006f578063e7c8923214610be7578063eeeb66b614610c10578063f2fde38b14610c39578063f773268914610c6257610325565b8063d8d89bc614610b56578063dd46706414610b81578063dd62ed3e14610baa57610325565b8063d4c70c8d116100d1578063d4c70c8d14610aae578063d543dbeb14610ad9578063d5aed6bf14610b02578063d7d31f5f14610b2b57610325565b8063bea9849e14610a31578063c49b9a8014610a5a578063cbecede014610a8357610325565b80639c74daf011610164578063a457c2d71161013e578063a457c2d714610977578063a69df4b5146109b4578063a9059cbb146109cb578063b0ac157114610a0857610325565b80639c74daf0146108f85780639e281a98146109235780639e3a94091461094c57610325565b806388f82020146107e457806389c6d350146108215780638d8bf5761461084c5780638da5cb5b1461087757806395d89b41146108a2578063962dfc75146108cd57610325565b8063459c979b1161026a578063602bc62b1161022357806370a08231116101fd57806370a082311461073a578063715018a6146107775780637921199f1461078e5780637d1db4a5146107b957610325565b8063602bc62b146106bb5780636612e66f146106e6578063706acf1e1461070f57610325565b8063459c979b146105ad57806352390c02146105d65780635342acb4146105ff578063565836e71461063c578063583e0568146106675780635d098b381461069257610325565b806325519cf2116102d75780633685d419116102b15780633685d419146104df5780633950935114610508578063429f1add146105455780634549b0391461057057610325565b806325519cf21461044e5780632d83811914610477578063313ce567146104b457610325565b806306fdde031461032a578063095ea7b31461035557806313114a9d1461039257806318160ddd146103bd5780631d865c30146103e857806323b872dd1461041157610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c8d565b60405161034c91906154df565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614f32565b610cc6565b60405161038991906154a9565b60405180910390f35b34801561039e57600080fd5b506103a7610ce4565b6040516103b491906156e1565b60405180910390f35b3480156103c957600080fd5b506103d2610cee565b6040516103df91906156e1565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190615039565b610cf8565b005b34801561041d57600080fd5b5061043860048036038101906104339190614e9f565b610da7565b60405161044591906154a9565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190615039565b610e80565b005b34801561048357600080fd5b5061049e60048036038101906104999190614fcc565b610f2f565b6040516104ab91906156e1565b60405180910390f35b3480156104c057600080fd5b506104c9610f9d565b6040516104d6919061578d565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190614e05565b610fa2565b005b34801561051457600080fd5b5061052f600480360381019061052a9190614f32565b6112f1565b60405161053c91906154a9565b60405180910390f35b34801561055157600080fd5b5061055a6113a4565b60405161056791906156e1565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190614ff9565b6113aa565b6040516105a491906156e1565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190614fcc565b61147a565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190614e05565b611560565b005b34801561060b57600080fd5b5061062660048036038101906106219190614e05565b611814565b60405161063391906154a9565b60405180910390f35b34801561064857600080fd5b5061065161186a565b60405161065e91906156e1565b60405180910390f35b34801561067357600080fd5b5061067c611870565b60405161068991906154c4565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190614e05565b611896565b005b3480156106c757600080fd5b506106d061196f565b6040516106dd91906156e1565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190614ef2565b611979565b005b34801561071b57600080fd5b50610724611a69565b60405161073191906156e1565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190614e05565b611a6f565b60405161076e91906156e1565b60405180910390f35b34801561078357600080fd5b5061078c611b5a565b005b34801561079a57600080fd5b506107a3611cad565b6040516107b091906156e1565b60405180910390f35b3480156107c557600080fd5b506107ce611cb3565b6040516107db91906156e1565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190614e05565b611cb9565b60405161081891906154a9565b60405180910390f35b34801561082d57600080fd5b50610836611d0f565b60405161084391906156e1565b60405180910390f35b34801561085857600080fd5b50610861611d15565b60405161086e91906156e1565b60405180910390f35b34801561088357600080fd5b5061088c611d1b565b6040516108999190615404565b60405180910390f35b3480156108ae57600080fd5b506108b7611d44565b6040516108c491906154df565b60405180910390f35b3480156108d957600080fd5b506108e2611d7d565b6040516108ef9190615404565b60405180910390f35b34801561090457600080fd5b5061090d611da3565b60405161091a9190615404565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614f32565b611dc9565b005b34801561095857600080fd5b50610961611ef7565b60405161096e91906156e1565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190614f32565b611efd565b6040516109ab91906154a9565b60405180910390f35b3480156109c057600080fd5b506109c9611fca565b005b3480156109d757600080fd5b506109f260048036038101906109ed9190614f32565b61219e565b6040516109ff91906154a9565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a9190614fcc565b6121bc565b005b348015610a3d57600080fd5b50610a586004803603810190610a539190614e05565b61225b565b005b348015610a6657600080fd5b50610a816004803603810190610a7c9190614f72565b61233a565b005b348015610a8f57600080fd5b50610a98612423565b604051610aa591906154a9565b60405180910390f35b348015610aba57600080fd5b50610ac3612436565b604051610ad091906156e1565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb9190614fcc565b61243c565b005b348015610b0e57600080fd5b50610b296004803603810190610b249190614e05565b612502565b005b348015610b3757600080fd5b50610b406125db565b604051610b4d91906156e1565b60405180910390f35b348015610b6257600080fd5b50610b6b6125e1565b604051610b7891906156e1565b60405180910390f35b348015610b8d57600080fd5b50610ba86004803603810190610ba39190614fcc565b6125e7565b005b348015610bb657600080fd5b50610bd16004803603810190610bcc9190614e5f565b6127ae565b604051610bde91906156e1565b60405180910390f35b348015610bf357600080fd5b50610c0e6004803603810190610c099190615039565b612835565b005b348015610c1c57600080fd5b50610c376004803603810190610c329190614fcc565b6128e4565b005b348015610c4557600080fd5b50610c606004803603810190610c5b9190614e05565b612983565b005b348015610c6e57600080fd5b50610c77612b45565b604051610c8491906156e1565b60405180910390f35b6040518060400160405280600881526020017f414b5241574f524400000000000000000000000000000000000000000000000081525081565b6000610cda610cd3612b4b565b8484612b53565b6001905092915050565b6000600c54905090565b6000600a54905090565b610d00612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490615641565b60405180910390fd5b826013819055508160148190555080601581905550505050565b6000610db4848484612d1e565b610e7584610dc0612b4b565b610e7085604051806060016040528060288152602001615f4360289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e26612b4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308d9092919063ffffffff16565b612b53565b600190509392505050565b610e88612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90615641565b60405180910390fd5b826010819055508160118190555080601281905550505050565b6000600b54821115610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90615561565b60405180910390fd5b6000610f806130f1565b9050610f95818461311c90919063ffffffff16565b915050919050565b601281565b610faa612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90615641565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba906155c1565b60405180910390fd5b60005b6008805490508110156112ed578173ffffffffffffffffffffffffffffffffffffffff16600882815481106110fe576110fd615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112da576008600160088054905061115991906158de565b8154811061116a57611169615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106111a9576111a8615aa6565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806112a05761129f615a77565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556112ed565b80806112e5906159d0565b9150506110c6565b5050565b600061139a6112fe612b4b565b84611395856007600061130f612b4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b612b53565b6001905092915050565b60125481565b6000600a548311156113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e8906155e1565b60405180910390fd5b81611437576000806000611404866131c4565b9350935093505060006114156130f1565b9050600061142688868686866132a9565b505090508095505050505050611474565b6000806000611445866131c4565b9350935093505060006114566130f1565b9050600061146788868686866132a9565b5091505080955050505050505b92915050565b611482612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690615641565b60405180910390fd5b611517611d1b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561155c573d6000803e3d6000fd5b5050565b611568612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90615641565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611682576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611679906155c1565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561175657611712600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61189e612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192290615641565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b611981612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590615641565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b0a57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b55565b611b52600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2f565b90505b919050565b611b62612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690615641565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60135481565b60175481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f414b52410000000000000000000000000000000000000000000000000000000081525081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611dd1612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590615641565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611e82611d1b565b836040518363ffffffff1660e01b8152600401611ea092919061541f565b602060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef29190614f9f565b505050565b60115481565b6000611fc0611f0a612b4b565b84611fbb85604051806060016040528060258152602001615f6b6025913960076000611f34612b4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308d9092919063ffffffff16565b612b53565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612051906156c1565b60405180910390fd5b600254421161209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590615521565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121b26121ab612b4b565b8484612d1e565b6001905092915050565b6121c4612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890615641565b60405180910390fd5b8060188190555050565b612263612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790615641565b60405180910390fd5b600081905080601960026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612342612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690615641565b60405180910390fd5b80601960006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161241891906154a9565b60405180910390a150565b601960009054906101000a900460ff1681565b60105481565b612444612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890615641565b60405180910390fd5b6124f960646124eb83600a5461336390919063ffffffff16565b61311c90919063ffffffff16565b60178190555050565b61250a612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90615641565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60185481565b6125ef612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267390615641565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261272a91906157fd565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61283d612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c190615641565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b6128ec612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297090615641565b60405180910390fd5b8060168190555050565b61298b612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90615641565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f90615581565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bba90615541565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a906156a1565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d1191906156e1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590615501565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df590615681565b60405180910390fd5b60008111612e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3890615661565b60405180910390fd5b612e49611d1b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612eb75750612e87611d1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f0257601754811115612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890615601565b60405180910390fd5b5b6000612f0d30611a6f565b90506017548110612f1e5760175490505b60006018548210159050808015612f425750601960019054906101000a900460ff16155b8015612f9c5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb45750601960009054906101000a900460ff165b15612fc8576018549150612fc7826133de565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061306f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561307957600090505b613085868686846134f9565b505050505050565b60008383111582906130d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cc91906154df565b60405180910390fd5b50600083856130e491906158de565b9050809150509392505050565b60008060006130fe6139a5565b91509150613115818361311c90919063ffffffff16565b9250505090565b600061315e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c58565b905092915050565b600080828461317591906157fd565b9050838110156131ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b1906155a1565b60405180910390fd5b8091505092915050565b60008060008060006131f56127106131e7600d548961336390919063ffffffff16565b61311c90919063ffffffff16565b90506000613222612710613214600e548a61336390919063ffffffff16565b61311c90919063ffffffff16565b9050600061324f612710613241600f548b61336390919063ffffffff16565b61311c90919063ffffffff16565b90506000613266848a613cbb90919063ffffffff16565b905061327b8382613cbb90919063ffffffff16565b90506132908282613cbb90919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000806132c2858a61336390919063ffffffff16565b905060006132d9868a61336390919063ffffffff16565b905060006132f0878a61336390919063ffffffff16565b90506000613307888a61336390919063ffffffff16565b9050600061331e8486613cbb90919063ffffffff16565b90506133338382613cbb90919063ffffffff16565b90506133488282613cbb90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b60008083141561337657600090506133d8565b600082846133849190615884565b90508284826133939190615853565b146133d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ca90615621565b60405180910390fd5b809150505b92915050565b6001601960016101000a81548160ff021916908315150217905550600061340f60028361311c90919063ffffffff16565b905060006134268284613cbb90919063ffffffff16565b9050600047905061343683613d05565b600061344b8247613cbb90919063ffffffff16565b9050600061347760646134696016548561336390919063ffffffff16565b61311c90919063ffffffff16565b9050600061348e8284613cbb90919063ffffffff16565b905061349a8582613f57565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682876040516134cd93929190615756565b60405180910390a15050505050506000601960016101000a81548160ff02191690831515021790555050565b6000600d5490506000600e5490506000600f5490506000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156135bb5750601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b90506000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614905085613634576000600d819055506000600e819055506000600f8190555061367e565b811561365a57601054600d81905550601154600e81905550601254600f8190555061367d565b801561367c57601354600d81905550601454600e81905550601554600f819055505b5b5b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137215750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137365761373189898961404b565b61396d565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137d95750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137ee576137e98989896142fb565b61396c565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138925750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138a7576138a28989896145ab565b61396b565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139495750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561395e576139598989896147c6565b61396a565b6139698989896145ab565b5b5b5b5b8515806139775750815b8061397f5750805b1561399a5784600d8190555083600e8190555082600f819055505b505050505050505050565b6000806000600b5490506000600a54905060005b600880549050811015613c1b578260036000600884815481106139df576139de615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613acd5750816004600060088481548110613a6557613a64615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613ae457600b54600a5494509450505050613c54565b613b746003600060088481548110613aff57613afe615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613cbb90919063ffffffff16565b9250613c066004600060088481548110613b9157613b90615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613cbb90919063ffffffff16565b91508080613c13906159d0565b9150506139b9565b50613c33600a54600b5461311c90919063ffffffff16565b821015613c4b57600b54600a54935093505050613c54565b81819350935050505b9091565b60008083118290613c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9691906154df565b60405180910390fd5b5060008385613cae9190615853565b9050809150509392505050565b6000613cfd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061308d565b905092915050565b6000600267ffffffffffffffff811115613d2257613d21615ad5565b5b604051908082528060200260200182016040528015613d505781602001602082028036833780820191505090505b5090503081600081518110613d6857613d67615aa6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e0a57600080fd5b505afa158015613e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e429190614e32565b81600181518110613e5657613e55615aa6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ebd30601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b53565b601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f219594939291906156fc565b600060405180830381600087803b158015613f3b57600080fd5b505af1158015613f4f573d6000803e3d6000fd5b505050505050565b613f8430601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b53565b601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613fd0611d1b565b426040518863ffffffff1660e01b8152600401613ff296959493929190615448565b6060604051808303818588803b15801561400b57600080fd5b505af115801561401f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614044919061508c565b5050505050565b60008060008061405a856131c4565b9350935093509350600061406c6130f1565b9050600080600061408089888888886132a9565b9250925092506140d889600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416d83600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420282600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142518b308887614b0b565b61427f8b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787614b0b565b6142898188614d4d565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040516142e691906156e1565b60405180910390a35050505050505050505050565b60008060008061430a856131c4565b9350935093509350600061431c6130f1565b9050600080600061433089888888886132a9565b92509250925061438883600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061441d88600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144b282600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145018b308887614b0b565b61452f8b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787614b0b565b6145398188614d4d565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405161459691906156e1565b60405180910390a35050505050505050505050565b6000806000806145ba856131c4565b935093509350935060006145cc6130f1565b905060008060006145e089888888886132a9565b92509250925061463883600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146cd82600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061471c8b308887614b0b565b61474a8b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787614b0b565b6147548188614d4d565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040516147b191906156e1565b60405180910390a35050505050505050505050565b6000806000806147d5856131c4565b935093509350935060006147e76130f1565b905060008060006147fb89888888886132a9565b92509250925061485389600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148e883600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061497d88600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1282600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a618b308887614b0b565b614a8f8b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787614b0b565b614a998188614d4d565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051614af691906156e1565b60405180910390a35050505050505050505050565b60008211614b1857614d47565b6000614b2d828461336390919063ffffffff16565b9050614b8181600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614cac57614c6883600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614614d45578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614d3c91906156e1565b60405180910390a35b505b50505050565b614d6282600b54613cbb90919063ffffffff16565b600b81905550614d7d81600c5461316690919063ffffffff16565b600c819055505050565b600081359050614d9681615efd565b92915050565b600081519050614dab81615efd565b92915050565b600081359050614dc081615f14565b92915050565b600081519050614dd581615f14565b92915050565b600081359050614dea81615f2b565b92915050565b600081519050614dff81615f2b565b92915050565b600060208284031215614e1b57614e1a615b04565b5b6000614e2984828501614d87565b91505092915050565b600060208284031215614e4857614e47615b04565b5b6000614e5684828501614d9c565b91505092915050565b60008060408385031215614e7657614e75615b04565b5b6000614e8485828601614d87565b9250506020614e9585828601614d87565b9150509250929050565b600080600060608486031215614eb857614eb7615b04565b5b6000614ec686828701614d87565b9350506020614ed786828701614d87565b9250506040614ee886828701614ddb565b9150509250925092565b60008060408385031215614f0957614f08615b04565b5b6000614f1785828601614d87565b9250506020614f2885828601614db1565b9150509250929050565b60008060408385031215614f4957614f48615b04565b5b6000614f5785828601614d87565b9250506020614f6885828601614ddb565b9150509250929050565b600060208284031215614f8857614f87615b04565b5b6000614f9684828501614db1565b91505092915050565b600060208284031215614fb557614fb4615b04565b5b6000614fc384828501614dc6565b91505092915050565b600060208284031215614fe257614fe1615b04565b5b6000614ff084828501614ddb565b91505092915050565b600080604083850312156150105761500f615b04565b5b600061501e85828601614ddb565b925050602061502f85828601614db1565b9150509250929050565b60008060006060848603121561505257615051615b04565b5b600061506086828701614ddb565b935050602061507186828701614ddb565b925050604061508286828701614ddb565b9150509250925092565b6000806000606084860312156150a5576150a4615b04565b5b60006150b386828701614df0565b93505060206150c486828701614df0565b92505060406150d586828701614df0565b9150509250925092565b60006150eb83836150f7565b60208301905092915050565b61510081615912565b82525050565b61510f81615912565b82525050565b6000615120826157b8565b61512a81856157db565b9350615135836157a8565b8060005b8381101561516657815161514d88826150df565b9750615158836157ce565b925050600181019050615139565b5085935050505092915050565b61517c81615924565b82525050565b61518b81615967565b82525050565b61519a8161598b565b82525050565b60006151ab826157c3565b6151b581856157ec565b93506151c581856020860161599d565b6151ce81615b09565b840191505092915050565b60006151e66025836157ec565b91506151f182615b1a565b604082019050919050565b60006152096018836157ec565b915061521482615b69565b602082019050919050565b600061522c6024836157ec565b915061523782615b92565b604082019050919050565b600061524f602a836157ec565b915061525a82615be1565b604082019050919050565b60006152726026836157ec565b915061527d82615c30565b604082019050919050565b6000615295601b836157ec565b91506152a082615c7f565b602082019050919050565b60006152b8601b836157ec565b91506152c382615ca8565b602082019050919050565b60006152db601f836157ec565b91506152e682615cd1565b602082019050919050565b60006152fe6028836157ec565b915061530982615cfa565b604082019050919050565b60006153216021836157ec565b915061532c82615d49565b604082019050919050565b60006153446020836157ec565b915061534f82615d98565b602082019050919050565b60006153676029836157ec565b915061537282615dc1565b604082019050919050565b600061538a6023836157ec565b915061539582615e10565b604082019050919050565b60006153ad6022836157ec565b91506153b882615e5f565b604082019050919050565b60006153d06023836157ec565b91506153db82615eae565b604082019050919050565b6153ef81615950565b82525050565b6153fe8161595a565b82525050565b60006020820190506154196000830184615106565b92915050565b60006040820190506154346000830185615106565b61544160208301846153e6565b9392505050565b600060c08201905061545d6000830189615106565b61546a60208301886153e6565b6154776040830187615191565b6154846060830186615191565b6154916080830185615106565b61549e60a08301846153e6565b979650505050505050565b60006020820190506154be6000830184615173565b92915050565b60006020820190506154d96000830184615182565b92915050565b600060208201905081810360008301526154f981846151a0565b905092915050565b6000602082019050818103600083015261551a816151d9565b9050919050565b6000602082019050818103600083015261553a816151fc565b9050919050565b6000602082019050818103600083015261555a8161521f565b9050919050565b6000602082019050818103600083015261557a81615242565b9050919050565b6000602082019050818103600083015261559a81615265565b9050919050565b600060208201905081810360008301526155ba81615288565b9050919050565b600060208201905081810360008301526155da816152ab565b9050919050565b600060208201905081810360008301526155fa816152ce565b9050919050565b6000602082019050818103600083015261561a816152f1565b9050919050565b6000602082019050818103600083015261563a81615314565b9050919050565b6000602082019050818103600083015261565a81615337565b9050919050565b6000602082019050818103600083015261567a8161535a565b9050919050565b6000602082019050818103600083015261569a8161537d565b9050919050565b600060208201905081810360008301526156ba816153a0565b9050919050565b600060208201905081810360008301526156da816153c3565b9050919050565b60006020820190506156f660008301846153e6565b92915050565b600060a08201905061571160008301886153e6565b61571e6020830187615191565b81810360408301526157308186615115565b905061573f6060830185615106565b61574c60808301846153e6565b9695505050505050565b600060608201905061576b60008301866153e6565b61577860208301856153e6565b61578560408301846153e6565b949350505050565b60006020820190506157a260008301846153f5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061580882615950565b915061581383615950565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561584857615847615a19565b5b828201905092915050565b600061585e82615950565b915061586983615950565b92508261587957615878615a48565b5b828204905092915050565b600061588f82615950565b915061589a83615950565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158d3576158d2615a19565b5b828202905092915050565b60006158e982615950565b91506158f483615950565b92508282101561590757615906615a19565b5b828203905092915050565b600061591d82615930565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061597282615979565b9050919050565b600061598482615930565b9050919050565b600061599682615950565b9050919050565b60005b838110156159bb5780820151818401526020810190506159a0565b838111156159ca576000848401525b50505050565b60006159db82615950565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a0e57615a0d615a19565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973207374696c6c206c6f636b65640000000000000000600082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615f0681615912565b8114615f1157600080fd5b50565b615f1d81615924565b8114615f2857600080fd5b50565b615f3481615950565b8114615f3f57600080fd5b5056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122058d426665e5645d9530a1fca055a9778df6cf94dc852b00f9148098fb512bfc464736f6c634300080500330000000000000000000000004bd1e06ebb42c2e3391c3ad035bdd165a7a6d0a80000000000000000000000005feea56a1843528e83ebfbdf0c69ba76a39ad217

Deployed Bytecode

0x60806040526004361061031e5760003560e01c806388f82020116101ab578063bea9849e116100f7578063d8d89bc611610095578063e7c892321161006f578063e7c8923214610be7578063eeeb66b614610c10578063f2fde38b14610c39578063f773268914610c6257610325565b8063d8d89bc614610b56578063dd46706414610b81578063dd62ed3e14610baa57610325565b8063d4c70c8d116100d1578063d4c70c8d14610aae578063d543dbeb14610ad9578063d5aed6bf14610b02578063d7d31f5f14610b2b57610325565b8063bea9849e14610a31578063c49b9a8014610a5a578063cbecede014610a8357610325565b80639c74daf011610164578063a457c2d71161013e578063a457c2d714610977578063a69df4b5146109b4578063a9059cbb146109cb578063b0ac157114610a0857610325565b80639c74daf0146108f85780639e281a98146109235780639e3a94091461094c57610325565b806388f82020146107e457806389c6d350146108215780638d8bf5761461084c5780638da5cb5b1461087757806395d89b41146108a2578063962dfc75146108cd57610325565b8063459c979b1161026a578063602bc62b1161022357806370a08231116101fd57806370a082311461073a578063715018a6146107775780637921199f1461078e5780637d1db4a5146107b957610325565b8063602bc62b146106bb5780636612e66f146106e6578063706acf1e1461070f57610325565b8063459c979b146105ad57806352390c02146105d65780635342acb4146105ff578063565836e71461063c578063583e0568146106675780635d098b381461069257610325565b806325519cf2116102d75780633685d419116102b15780633685d419146104df5780633950935114610508578063429f1add146105455780634549b0391461057057610325565b806325519cf21461044e5780632d83811914610477578063313ce567146104b457610325565b806306fdde031461032a578063095ea7b31461035557806313114a9d1461039257806318160ddd146103bd5780631d865c30146103e857806323b872dd1461041157610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c8d565b60405161034c91906154df565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614f32565b610cc6565b60405161038991906154a9565b60405180910390f35b34801561039e57600080fd5b506103a7610ce4565b6040516103b491906156e1565b60405180910390f35b3480156103c957600080fd5b506103d2610cee565b6040516103df91906156e1565b60405180910390f35b3480156103f457600080fd5b5061040f600480360381019061040a9190615039565b610cf8565b005b34801561041d57600080fd5b5061043860048036038101906104339190614e9f565b610da7565b60405161044591906154a9565b60405180910390f35b34801561045a57600080fd5b5061047560048036038101906104709190615039565b610e80565b005b34801561048357600080fd5b5061049e60048036038101906104999190614fcc565b610f2f565b6040516104ab91906156e1565b60405180910390f35b3480156104c057600080fd5b506104c9610f9d565b6040516104d6919061578d565b60405180910390f35b3480156104eb57600080fd5b5061050660048036038101906105019190614e05565b610fa2565b005b34801561051457600080fd5b5061052f600480360381019061052a9190614f32565b6112f1565b60405161053c91906154a9565b60405180910390f35b34801561055157600080fd5b5061055a6113a4565b60405161056791906156e1565b60405180910390f35b34801561057c57600080fd5b5061059760048036038101906105929190614ff9565b6113aa565b6040516105a491906156e1565b60405180910390f35b3480156105b957600080fd5b506105d460048036038101906105cf9190614fcc565b61147a565b005b3480156105e257600080fd5b506105fd60048036038101906105f89190614e05565b611560565b005b34801561060b57600080fd5b5061062660048036038101906106219190614e05565b611814565b60405161063391906154a9565b60405180910390f35b34801561064857600080fd5b5061065161186a565b60405161065e91906156e1565b60405180910390f35b34801561067357600080fd5b5061067c611870565b60405161068991906154c4565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b49190614e05565b611896565b005b3480156106c757600080fd5b506106d061196f565b6040516106dd91906156e1565b60405180910390f35b3480156106f257600080fd5b5061070d60048036038101906107089190614ef2565b611979565b005b34801561071b57600080fd5b50610724611a69565b60405161073191906156e1565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190614e05565b611a6f565b60405161076e91906156e1565b60405180910390f35b34801561078357600080fd5b5061078c611b5a565b005b34801561079a57600080fd5b506107a3611cad565b6040516107b091906156e1565b60405180910390f35b3480156107c557600080fd5b506107ce611cb3565b6040516107db91906156e1565b60405180910390f35b3480156107f057600080fd5b5061080b60048036038101906108069190614e05565b611cb9565b60405161081891906154a9565b60405180910390f35b34801561082d57600080fd5b50610836611d0f565b60405161084391906156e1565b60405180910390f35b34801561085857600080fd5b50610861611d15565b60405161086e91906156e1565b60405180910390f35b34801561088357600080fd5b5061088c611d1b565b6040516108999190615404565b60405180910390f35b3480156108ae57600080fd5b506108b7611d44565b6040516108c491906154df565b60405180910390f35b3480156108d957600080fd5b506108e2611d7d565b6040516108ef9190615404565b60405180910390f35b34801561090457600080fd5b5061090d611da3565b60405161091a9190615404565b60405180910390f35b34801561092f57600080fd5b5061094a60048036038101906109459190614f32565b611dc9565b005b34801561095857600080fd5b50610961611ef7565b60405161096e91906156e1565b60405180910390f35b34801561098357600080fd5b5061099e60048036038101906109999190614f32565b611efd565b6040516109ab91906154a9565b60405180910390f35b3480156109c057600080fd5b506109c9611fca565b005b3480156109d757600080fd5b506109f260048036038101906109ed9190614f32565b61219e565b6040516109ff91906154a9565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a9190614fcc565b6121bc565b005b348015610a3d57600080fd5b50610a586004803603810190610a539190614e05565b61225b565b005b348015610a6657600080fd5b50610a816004803603810190610a7c9190614f72565b61233a565b005b348015610a8f57600080fd5b50610a98612423565b604051610aa591906154a9565b60405180910390f35b348015610aba57600080fd5b50610ac3612436565b604051610ad091906156e1565b60405180910390f35b348015610ae557600080fd5b50610b006004803603810190610afb9190614fcc565b61243c565b005b348015610b0e57600080fd5b50610b296004803603810190610b249190614e05565b612502565b005b348015610b3757600080fd5b50610b406125db565b604051610b4d91906156e1565b60405180910390f35b348015610b6257600080fd5b50610b6b6125e1565b604051610b7891906156e1565b60405180910390f35b348015610b8d57600080fd5b50610ba86004803603810190610ba39190614fcc565b6125e7565b005b348015610bb657600080fd5b50610bd16004803603810190610bcc9190614e5f565b6127ae565b604051610bde91906156e1565b60405180910390f35b348015610bf357600080fd5b50610c0e6004803603810190610c099190615039565b612835565b005b348015610c1c57600080fd5b50610c376004803603810190610c329190614fcc565b6128e4565b005b348015610c4557600080fd5b50610c606004803603810190610c5b9190614e05565b612983565b005b348015610c6e57600080fd5b50610c77612b45565b604051610c8491906156e1565b60405180910390f35b6040518060400160405280600881526020017f414b5241574f524400000000000000000000000000000000000000000000000081525081565b6000610cda610cd3612b4b565b8484612b53565b6001905092915050565b6000600c54905090565b6000600a54905090565b610d00612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8490615641565b60405180910390fd5b826013819055508160148190555080601581905550505050565b6000610db4848484612d1e565b610e7584610dc0612b4b565b610e7085604051806060016040528060288152602001615f4360289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610e26612b4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308d9092919063ffffffff16565b612b53565b600190509392505050565b610e88612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0c90615641565b60405180910390fd5b826010819055508160118190555080601281905550505050565b6000600b54821115610f76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6d90615561565b60405180910390fd5b6000610f806130f1565b9050610f95818461311c90919063ffffffff16565b915050919050565b601281565b610faa612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102e90615641565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166110c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ba906155c1565b60405180910390fd5b60005b6008805490508110156112ed578173ffffffffffffffffffffffffffffffffffffffff16600882815481106110fe576110fd615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156112da576008600160088054905061115991906158de565b8154811061116a57611169615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106111a9576111a8615aa6565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806112a05761129f615a77565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556112ed565b80806112e5906159d0565b9150506110c6565b5050565b600061139a6112fe612b4b565b84611395856007600061130f612b4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b612b53565b6001905092915050565b60125481565b6000600a548311156113f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e8906155e1565b60405180910390fd5b81611437576000806000611404866131c4565b9350935093505060006114156130f1565b9050600061142688868686866132a9565b505090508095505050505050611474565b6000806000611445866131c4565b9350935093505060006114566130f1565b9050600061146788868686866132a9565b5091505080955050505050505b92915050565b611482612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690615641565b60405180910390fd5b611517611d1b565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561155c573d6000803e3d6000fd5b5050565b611568612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ec90615641565b60405180910390fd5b600660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611682576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611679906155c1565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561175657611712600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2f565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60145481565b601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61189e612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192290615641565b60405180910390fd5b80600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b611981612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0590615641565b60405180910390fd5b80600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611b0a57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611b55565b611b52600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610f2f565b90505b919050565b611b62612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be690615641565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60135481565b60175481565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6040518060400160405280600481526020017f414b52410000000000000000000000000000000000000000000000000000000081525081565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611dd1612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5590615641565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb611e82611d1b565b836040518363ffffffff1660e01b8152600401611ea092919061541f565b602060405180830381600087803b158015611eba57600080fd5b505af1158015611ece573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef29190614f9f565b505050565b60115481565b6000611fc0611f0a612b4b565b84611fbb85604051806060016040528060258152602001615f6b6025913960076000611f34612b4b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461308d9092919063ffffffff16565b612b53565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461205a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612051906156c1565b60405180910390fd5b600254421161209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590615521565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006121b26121ab612b4b565b8484612d1e565b6001905092915050565b6121c4612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612251576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224890615641565b60405180910390fd5b8060188190555050565b612263612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e790615641565b60405180910390fd5b600081905080601960026101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b612342612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c690615641565b60405180910390fd5b80601960006101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161241891906154a9565b60405180910390a150565b601960009054906101000a900460ff1681565b60105481565b612444612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c890615641565b60405180910390fd5b6124f960646124eb83600a5461336390919063ffffffff16565b61311c90919063ffffffff16565b60178190555050565b61250a612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90615641565b60405180910390fd5b80601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60185481565b6125ef612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461267c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161267390615641565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261272a91906157fd565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61283d612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c190615641565b60405180910390fd5b82600d8190555081600e8190555080600f81905550505050565b6128ec612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612979576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161297090615641565b60405180910390fd5b8060168190555050565b61298b612b4b565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f90615641565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f90615581565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600e5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612bc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bba90615541565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c2a906156a1565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612d1191906156e1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8590615501565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612df590615681565b60405180910390fd5b60008111612e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3890615661565b60405180910390fd5b612e49611d1b565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612eb75750612e87611d1b565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612f0257601754811115612f01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef890615601565b60405180910390fd5b5b6000612f0d30611a6f565b90506017548110612f1e5760175490505b60006018548210159050808015612f425750601960019054906101000a900460ff16155b8015612f9c5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612fb45750601960009054906101000a900460ff165b15612fc8576018549150612fc7826133de565b5b600060019050600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061306f5750600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561307957600090505b613085868686846134f9565b505050505050565b60008383111582906130d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cc91906154df565b60405180910390fd5b50600083856130e491906158de565b9050809150509392505050565b60008060006130fe6139a5565b91509150613115818361311c90919063ffffffff16565b9250505090565b600061315e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613c58565b905092915050565b600080828461317591906157fd565b9050838110156131ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b1906155a1565b60405180910390fd5b8091505092915050565b60008060008060006131f56127106131e7600d548961336390919063ffffffff16565b61311c90919063ffffffff16565b90506000613222612710613214600e548a61336390919063ffffffff16565b61311c90919063ffffffff16565b9050600061324f612710613241600f548b61336390919063ffffffff16565b61311c90919063ffffffff16565b90506000613266848a613cbb90919063ffffffff16565b905061327b8382613cbb90919063ffffffff16565b90506132908282613cbb90919063ffffffff16565b9050808484849750975097509750505050509193509193565b6000806000806132c2858a61336390919063ffffffff16565b905060006132d9868a61336390919063ffffffff16565b905060006132f0878a61336390919063ffffffff16565b90506000613307888a61336390919063ffffffff16565b9050600061331e8486613cbb90919063ffffffff16565b90506133338382613cbb90919063ffffffff16565b90506133488282613cbb90919063ffffffff16565b90508481859750975097505050505050955095509592505050565b60008083141561337657600090506133d8565b600082846133849190615884565b90508284826133939190615853565b146133d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ca90615621565b60405180910390fd5b809150505b92915050565b6001601960016101000a81548160ff021916908315150217905550600061340f60028361311c90919063ffffffff16565b905060006134268284613cbb90919063ffffffff16565b9050600047905061343683613d05565b600061344b8247613cbb90919063ffffffff16565b9050600061347760646134696016548561336390919063ffffffff16565b61311c90919063ffffffff16565b9050600061348e8284613cbb90919063ffffffff16565b905061349a8582613f57565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682876040516134cd93929190615756565b60405180910390a15050505050506000601960016101000a81548160ff02191690831515021790555050565b6000600d5490506000600e5490506000600f5490506000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161480156135bb5750601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614155b90506000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614905085613634576000600d819055506000600e819055506000600f8190555061367e565b811561365a57601054600d81905550601154600e81905550601254600f8190555061367d565b801561367c57601354600d81905550601454600e81905550601554600f819055505b5b5b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137215750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156137365761373189898961404b565b61396d565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156137d95750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156137ee576137e98989896142fb565b61396c565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156138925750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156138a7576138a28989896145ab565b61396b565b600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156139495750600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561395e576139598989896147c6565b61396a565b6139698989896145ab565b5b5b5b5b8515806139775750815b8061397f5750805b1561399a5784600d8190555083600e8190555082600f819055505b505050505050505050565b6000806000600b5490506000600a54905060005b600880549050811015613c1b578260036000600884815481106139df576139de615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180613acd5750816004600060088481548110613a6557613a64615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15613ae457600b54600a5494509450505050613c54565b613b746003600060088481548110613aff57613afe615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613cbb90919063ffffffff16565b9250613c066004600060088481548110613b9157613b90615aa6565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613cbb90919063ffffffff16565b91508080613c13906159d0565b9150506139b9565b50613c33600a54600b5461311c90919063ffffffff16565b821015613c4b57600b54600a54935093505050613c54565b81819350935050505b9091565b60008083118290613c9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c9691906154df565b60405180910390fd5b5060008385613cae9190615853565b9050809150509392505050565b6000613cfd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061308d565b905092915050565b6000600267ffffffffffffffff811115613d2257613d21615ad5565b5b604051908082528060200260200182016040528015613d505781602001602082028036833780820191505090505b5090503081600081518110613d6857613d67615aa6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613e0a57600080fd5b505afa158015613e1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e429190614e32565b81600181518110613e5657613e55615aa6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ebd30601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b53565b601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613f219594939291906156fc565b600060405180830381600087803b158015613f3b57600080fd5b505af1158015613f4f573d6000803e3d6000fd5b505050505050565b613f8430601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612b53565b601960029054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613fd0611d1b565b426040518863ffffffff1660e01b8152600401613ff296959493929190615448565b6060604051808303818588803b15801561400b57600080fd5b505af115801561401f573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190614044919061508c565b5050505050565b60008060008061405a856131c4565b9350935093509350600061406c6130f1565b9050600080600061408089888888886132a9565b9250925092506140d889600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061416d83600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061420282600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142518b308887614b0b565b61427f8b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787614b0b565b6142898188614d4d565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040516142e691906156e1565b60405180910390a35050505050505050505050565b60008060008061430a856131c4565b9350935093509350600061431c6130f1565b9050600080600061433089888888886132a9565b92509250925061438883600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061441d88600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144b282600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145018b308887614b0b565b61452f8b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787614b0b565b6145398188614d4d565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a60405161459691906156e1565b60405180910390a35050505050505050505050565b6000806000806145ba856131c4565b935093509350935060006145cc6130f1565b905060008060006145e089888888886132a9565b92509250925061463883600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506146cd82600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061471c8b308887614b0b565b61474a8b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787614b0b565b6147548188614d4d565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a6040516147b191906156e1565b60405180910390a35050505050505050505050565b6000806000806147d5856131c4565b935093509350935060006147e76130f1565b905060008060006147fb89888888886132a9565b92509250925061485389600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506148e883600360008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613cbb90919063ffffffff16565b600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061497d88600460008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a1282600360008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614a618b308887614b0b565b614a8f8b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168787614b0b565b614a998188614d4d565b8973ffffffffffffffffffffffffffffffffffffffff168b73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051614af691906156e1565b60405180910390a35050505050505050505050565b60008211614b1857614d47565b6000614b2d828461336390919063ffffffff16565b9050614b8181600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614cac57614c6883600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461316690919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b3073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614614d45578373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051614d3c91906156e1565b60405180910390a35b505b50505050565b614d6282600b54613cbb90919063ffffffff16565b600b81905550614d7d81600c5461316690919063ffffffff16565b600c819055505050565b600081359050614d9681615efd565b92915050565b600081519050614dab81615efd565b92915050565b600081359050614dc081615f14565b92915050565b600081519050614dd581615f14565b92915050565b600081359050614dea81615f2b565b92915050565b600081519050614dff81615f2b565b92915050565b600060208284031215614e1b57614e1a615b04565b5b6000614e2984828501614d87565b91505092915050565b600060208284031215614e4857614e47615b04565b5b6000614e5684828501614d9c565b91505092915050565b60008060408385031215614e7657614e75615b04565b5b6000614e8485828601614d87565b9250506020614e9585828601614d87565b9150509250929050565b600080600060608486031215614eb857614eb7615b04565b5b6000614ec686828701614d87565b9350506020614ed786828701614d87565b9250506040614ee886828701614ddb565b9150509250925092565b60008060408385031215614f0957614f08615b04565b5b6000614f1785828601614d87565b9250506020614f2885828601614db1565b9150509250929050565b60008060408385031215614f4957614f48615b04565b5b6000614f5785828601614d87565b9250506020614f6885828601614ddb565b9150509250929050565b600060208284031215614f8857614f87615b04565b5b6000614f9684828501614db1565b91505092915050565b600060208284031215614fb557614fb4615b04565b5b6000614fc384828501614dc6565b91505092915050565b600060208284031215614fe257614fe1615b04565b5b6000614ff084828501614ddb565b91505092915050565b600080604083850312156150105761500f615b04565b5b600061501e85828601614ddb565b925050602061502f85828601614db1565b9150509250929050565b60008060006060848603121561505257615051615b04565b5b600061506086828701614ddb565b935050602061507186828701614ddb565b925050604061508286828701614ddb565b9150509250925092565b6000806000606084860312156150a5576150a4615b04565b5b60006150b386828701614df0565b93505060206150c486828701614df0565b92505060406150d586828701614df0565b9150509250925092565b60006150eb83836150f7565b60208301905092915050565b61510081615912565b82525050565b61510f81615912565b82525050565b6000615120826157b8565b61512a81856157db565b9350615135836157a8565b8060005b8381101561516657815161514d88826150df565b9750615158836157ce565b925050600181019050615139565b5085935050505092915050565b61517c81615924565b82525050565b61518b81615967565b82525050565b61519a8161598b565b82525050565b60006151ab826157c3565b6151b581856157ec565b93506151c581856020860161599d565b6151ce81615b09565b840191505092915050565b60006151e66025836157ec565b91506151f182615b1a565b604082019050919050565b60006152096018836157ec565b915061521482615b69565b602082019050919050565b600061522c6024836157ec565b915061523782615b92565b604082019050919050565b600061524f602a836157ec565b915061525a82615be1565b604082019050919050565b60006152726026836157ec565b915061527d82615c30565b604082019050919050565b6000615295601b836157ec565b91506152a082615c7f565b602082019050919050565b60006152b8601b836157ec565b91506152c382615ca8565b602082019050919050565b60006152db601f836157ec565b91506152e682615cd1565b602082019050919050565b60006152fe6028836157ec565b915061530982615cfa565b604082019050919050565b60006153216021836157ec565b915061532c82615d49565b604082019050919050565b60006153446020836157ec565b915061534f82615d98565b602082019050919050565b60006153676029836157ec565b915061537282615dc1565b604082019050919050565b600061538a6023836157ec565b915061539582615e10565b604082019050919050565b60006153ad6022836157ec565b91506153b882615e5f565b604082019050919050565b60006153d06023836157ec565b91506153db82615eae565b604082019050919050565b6153ef81615950565b82525050565b6153fe8161595a565b82525050565b60006020820190506154196000830184615106565b92915050565b60006040820190506154346000830185615106565b61544160208301846153e6565b9392505050565b600060c08201905061545d6000830189615106565b61546a60208301886153e6565b6154776040830187615191565b6154846060830186615191565b6154916080830185615106565b61549e60a08301846153e6565b979650505050505050565b60006020820190506154be6000830184615173565b92915050565b60006020820190506154d96000830184615182565b92915050565b600060208201905081810360008301526154f981846151a0565b905092915050565b6000602082019050818103600083015261551a816151d9565b9050919050565b6000602082019050818103600083015261553a816151fc565b9050919050565b6000602082019050818103600083015261555a8161521f565b9050919050565b6000602082019050818103600083015261557a81615242565b9050919050565b6000602082019050818103600083015261559a81615265565b9050919050565b600060208201905081810360008301526155ba81615288565b9050919050565b600060208201905081810360008301526155da816152ab565b9050919050565b600060208201905081810360008301526155fa816152ce565b9050919050565b6000602082019050818103600083015261561a816152f1565b9050919050565b6000602082019050818103600083015261563a81615314565b9050919050565b6000602082019050818103600083015261565a81615337565b9050919050565b6000602082019050818103600083015261567a8161535a565b9050919050565b6000602082019050818103600083015261569a8161537d565b9050919050565b600060208201905081810360008301526156ba816153a0565b9050919050565b600060208201905081810360008301526156da816153c3565b9050919050565b60006020820190506156f660008301846153e6565b92915050565b600060a08201905061571160008301886153e6565b61571e6020830187615191565b81810360408301526157308186615115565b905061573f6060830185615106565b61574c60808301846153e6565b9695505050505050565b600060608201905061576b60008301866153e6565b61577860208301856153e6565b61578560408301846153e6565b949350505050565b60006020820190506157a260008301846153f5565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061580882615950565b915061581383615950565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561584857615847615a19565b5b828201905092915050565b600061585e82615950565b915061586983615950565b92508261587957615878615a48565b5b828204905092915050565b600061588f82615950565b915061589a83615950565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156158d3576158d2615a19565b5b828202905092915050565b60006158e982615950565b91506158f483615950565b92508282101561590757615906615a19565b5b828203905092915050565b600061591d82615930565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061597282615979565b9050919050565b600061598482615930565b9050919050565b600061599682615950565b9050919050565b60005b838110156159bb5780820151818401526020810190506159a0565b838111156159ca576000848401525b50505050565b60006159db82615950565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615a0e57615a0d615a19565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973207374696c6c206c6f636b65640000000000000000600082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615f0681615912565b8114615f1157600080fd5b50565b615f1d81615924565b8114615f2857600080fd5b50565b615f3481615950565b8114615f3f57600080fd5b5056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122058d426665e5645d9530a1fca055a9778df6cf94dc852b00f9148098fb512bfc464736f6c63430008050033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000004bd1e06ebb42c2e3391c3ad035bdd165a7a6d0a80000000000000000000000005feea56a1843528e83ebfbdf0c69ba76a39ad217

-----Decoded View---------------
Arg [0] : cOwner (address): 0x4BD1e06ebB42C2E3391c3Ad035bdd165A7a6D0A8
Arg [1] : marketingWallet (address): 0x5feEa56a1843528E83ebfBDF0C69Ba76a39aD217

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000004bd1e06ebb42c2e3391c3ad035bdd165a7a6d0a8
Arg [1] : 0000000000000000000000005feea56a1843528e83ebfbdf0c69ba76a39ad217


Deployed Bytecode Sourcemap

12346:20893:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13004:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15853:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19102:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15226:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19954:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16363:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19722:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18017:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13102:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18617:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16682:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13422:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17202:809;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21324:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18277:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20788:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13533:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13911:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19211:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3742:90;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19342:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13267:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15327:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3334:148;;;;;;;;;;;;;:::i;:::-;;13486:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13694:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20917:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13629:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13172:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3120:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13055:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12765:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13960:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21438:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13377:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16906:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4078:298;;;;;;;;;;;;;:::i;:::-;;15531:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20482:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21043:178;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20613:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13825:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13333:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20342:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21227:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13580:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13746:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3840:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15704:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19470:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20190:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3490:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13219:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13004:44;;;;;;;;;;;;;;;;;;;:::o;15853:161::-;15928:4;15945:39;15954:12;:10;:12::i;:::-;15968:7;15977:6;15945:8;:39::i;:::-;16002:4;15995:11;;15853:161;;;;:::o;19102:87::-;19144:7;19171:10;;19164:17;;19102:87;:::o;15226:95::-;15279:7;15306;;15299:14;;15226:95;:::o;19954:230::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20084:6:::1;20064:11;:26;;;;20121:12;20101:17;:32;;;;20164:12;20144:17;:32;;;;19954:230:::0;;;:::o;16363:313::-;16461:4;16478:36;16488:6;16496:9;16507:6;16478:9;:36::i;:::-;16525:121;16534:6;16542:12;:10;:12::i;:::-;16556:89;16594:6;16556:89;;;;;;;;;;;;;;;;;:11;:19;16568:6;16556:19;;;;;;;;;;;;;;;:33;16576:12;:10;:12::i;:::-;16556:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;16525:8;:121::i;:::-;16664:4;16657:11;;16363:313;;;;;:::o;19722:226::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19850:6:::1;19831:10;:25;;;;19886:12;19867:16;:31;;;;19928:12;19909:16;:31;;;;19722:226:::0;;;:::o;18017:254::-;18083:7;18122;;18111;:18;;18103:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;18189:19;18211:10;:8;:10::i;:::-;18189:32;;18239:24;18251:11;18239:7;:11;;:24;;;;:::i;:::-;18232:31;;;18017:254;;;:::o;13102:36::-;13136:2;13102:36;:::o;18617:479::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18697:11:::1;:20;18709:7;18697:20;;;;;;;;;;;;;;;;;;;;;;;;;18689:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18767:9;18762:327;18786:9;:16;;;;18782:1;:20;18762:327;;;18844:7;18828:23;;:9;18838:1;18828:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;18824:254;;;18887:9;18916:1;18897:9;:16;;;;:20;;;;:::i;:::-;18887:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18872:9;18882:1;18872:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;18956:1;18937:7;:16;18945:7;18937:16;;;;;;;;;;;;;;;:20;;;;18999:5;18976:11;:20;18988:7;18976:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19023:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;19057:5;;18824:254;18804:3;;;;;:::i;:::-;;;;18762:327;;;;18617:479:::0;:::o;16682:218::-;16770:4;16787:83;16796:12;:10;:12::i;:::-;16810:7;16819:50;16858:10;16819:11;:25;16831:12;:10;:12::i;:::-;16819:25;;;;;;;;;;;;;;;:34;16845:7;16819:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16787:8;:83::i;:::-;16888:4;16881:11;;16682:218;;;;:::o;13422:37::-;;;;:::o;17202:809::-;17292:7;17331;;17320;:18;;17312:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;17392:17;17387:617;;17429:12;17443:18;17463;17485:20;17497:7;17485:11;:20::i;:::-;17426:79;;;;;;;17520:19;17542:10;:8;:10::i;:::-;17520:32;;17568:15;17589:63;17601:7;17610:4;17616:10;17628;17640:11;17589;:63::i;:::-;17567:85;;;;17676:7;17669:14;;;;;;;;;17387:617;17721:12;17735:18;17755;17777:20;17789:7;17777:11;:20::i;:::-;17718:79;;;;;;;17812:19;17834:10;:8;:10::i;:::-;17812:32;;17862:23;17890:63;17902:7;17911:4;17917:10;17929;17941:11;17890;:63::i;:::-;17859:94;;;;17977:15;17970:22;;;;;;;17202:809;;;;;:::o;21324:108::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21399:7:::1;:5;:7::i;:::-;21391:25;;:33;21417:6;21391:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;21324:108:::0;:::o;18277:334::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18358:11:::1;:20;18370:7;18358:20;;;;;;;;;;;;;;;;;;;;;;;;;18357:21;18349:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;18446:1;18427:7;:16;18435:7;18427:16;;;;;;;;;;;;;;;;:20;18423:109;;;18483:37;18503:7;:16;18511:7;18503:16;;;;;;;;;;;;;;;;18483:19;:37::i;:::-;18464:7;:16;18472:7;18464:16;;;;;;;;;;;;;;;:56;;;;18423:109;18565:4;18542:11;:20;18554:7;18542:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;18580:9;18595:7;18580:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18277:334:::0;:::o;20788:123::-;20852:4;20876:18;:27;20895:7;20876:27;;;;;;;;;;;;;;;;;;;;;;;;;20869:34;;20788:123;;;:::o;13533:39::-;;;;:::o;13911:42::-;;;;;;;;;;;;;:::o;19211:125::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19313:15:::1;19294:16;;:34;;;;;;;;;;;;;;;;;;19211:125:::0;:::o;3742:90::-;3788:7;3815:9;;3808:16;;3742:90;:::o;19342:122::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19455:1:::1;19425:18;:27;19444:7;19425:27;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;19342:122:::0;;:::o;13267:40::-;;;;:::o;15327:198::-;15393:7;15417:11;:20;15429:7;15417:20;;;;;;;;;;;;;;;;;;;;;;;;;15413:49;;;15446:7;:16;15454:7;15446:16;;;;;;;;;;;;;;;;15439:23;;;;15413:49;15480:37;15500:7;:16;15508:7;15500:16;;;;;;;;;;;;;;;;15480:19;:37::i;:::-;15473:44;;15327:198;;;;:::o;3334:148::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3441:1:::1;3404:40;;3425:6;::::0;::::1;;;;;;;;3404:40;;;;;;;;;;;;3472:1;3455:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3334:148::o:0;13486:39::-;;;;:::o;13694:45::-;;;;:::o;20917:120::-;20985:4;21009:11;:20;21021:7;21009:20;;;;;;;;;;;;;;;;;;;;;;;;;21002:27;;20917:120;;;:::o;13629:56::-;;;;:::o;13172:40::-;;;;:::o;3120:79::-;3158:7;3185:6;;;;;;;;;;;3178:13;;3120:79;:::o;13055:40::-;;;;;;;;;;;;;;;;;;;:::o;12765:31::-;;;;;;;;;;;;;:::o;13960:40::-;;;;;;;;;;;;;:::o;21438:145::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21536:12:::1;21529:29;;;21559:7;:5;:7::i;:::-;21568:6;21529:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21438:145:::0;;:::o;13377:37::-;;;;:::o;16906:269::-;16999:4;17016:129;17025:12;:10;:12::i;:::-;17039:7;17048:96;17087:15;17048:96;;;;;;;;;;;;;;;;;:11;:25;17060:12;:10;:12::i;:::-;17048:25;;;;;;;;;;;;;;;:34;17074:7;17048:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;17016:8;:129::i;:::-;17163:4;17156:11;;16906:269;;;;:::o;4078:298::-;4148:10;4130:28;;:14;;;;;;;;;;;:28;;;4122:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;4235:9;;4217:15;:27;4209:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;4319:14;;;;;;;;;;;4290:44;;4311:6;;;;;;;;;;4290:44;;;;;;;;;;;;4354:14;;;;;;;;;;;4345:6;;:23;;;;;;;;;;;;;;;;;;4078:298::o;15531:167::-;15609:4;15626:42;15636:12;:10;:12::i;:::-;15650:9;15661:6;15626:9;:42::i;:::-;15686:4;15679:11;;15531:167;;;;:::o;20482:125::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20584:15:::1;20565:16;:34;;;;20482:125:::0;:::o;21043:178::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21110:34:::1;21166:1;21110:58;;21198:15;21179:16;;:34;;;;;;;;;;;;;;;;;;21099:122;21043:178:::0;:::o;20613:169::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20714:7:::1;20689:22;;:32;;;;;;;;;;;;;;;;;;20737:37;20766:7;20737:37;;;;;;:::i;:::-;;;;;;;;20613:169:::0;:::o;13825:42::-;;;;;;;;;;;;;:::o;13333:37::-;;;;:::o;20342:134::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20434:34:::1;20464:3;20434:25;20446:12;20434:7;;:11;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;20419:12;:49;;;;20342:134:::0;:::o;21227:91::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21309:1:::1;21292:14;;:18;;;;;;;;;;;;;;;;;;21227:91:::0;:::o;13580:39::-;;;;:::o;13746:48::-;;;;:::o;3840:226::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3921:6:::1;::::0;::::1;;;;;;;;3904:14;;:23;;;;;;;;;;;;;;;;;;3955:1;3938:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3998:4;3980:15;:22;;;;:::i;:::-;3968:9;:34;;;;4055:1;4018:40;;4039:6;::::0;::::1;;;;;;;;4018:40;;;;;;;;;;;;3840:226:::0;:::o;15704:143::-;15785:7;15812:11;:18;15824:5;15812:18;;;;;;;;;;;;;;;:27;15831:7;15812:27;;;;;;;;;;;;;;;;15805:34;;15704:143;;;;:::o;19470:246::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19608:6:::1;19584:15;:30;;;;19649:12;19625:21;:36;;;;19696:12;19672:21;:36;;;;19470:246:::0;;;:::o;20190:146::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20313:15:::1;20273:37;:55;;;;20190:146:::0;:::o;3490:244::-;3257:12;:10;:12::i;:::-;3247:22;;:6;;;;;;;;;;:22;;;3239:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3599:1:::1;3579:22;;:8;:22;;;;3571:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3689:8;3660:38;;3681:6;::::0;::::1;;;;;;;;3660:38;;;;;;;;;;;;3718:8;3709:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3490:244:::0;:::o;13219:40::-;;;;:::o;94:98::-;147:7;174:10;167:17;;94:98;:::o;16020:337::-;16130:1;16113:19;;:5;:19;;;;16105:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16211:1;16192:21;;:7;:21;;;;16184:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16295:6;16265:11;:18;16277:5;16265:18;;;;;;;;;;;;;;;:27;16284:7;16265:27;;;;;;;;;;;;;;;:36;;;;16333:7;16317:32;;16326:5;16317:32;;;16342:6;16317:32;;;;;;:::i;:::-;;;;;;;;16020:337;;;:::o;21608:1581::-;21746:1;21730:18;;:4;:18;;;;21722:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21823:1;21809:16;;:2;:16;;;;21801:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21893:1;21884:6;:10;21876:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;21965:7;:5;:7::i;:::-;21957:15;;:4;:15;;;;:32;;;;;21982:7;:5;:7::i;:::-;21976:13;;:2;:13;;;;21957:32;21953:140;;;22024:12;;22014:6;:22;;22006:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;21953:140;22421:28;22452:24;22470:4;22452:9;:24::i;:::-;22421:55;;22525:12;;22501:20;:36;22497:104;;22577:12;;22554:35;;22497:104;22621:26;22674:16;;22650:20;:40;;22621:69;;22719:21;:56;;;;;22758:17;;;;;;;;;;;22757:18;22719:56;:95;;;;;22800:14;;;;;;;;;;;22792:22;;:4;:22;;;;22719:95;:134;;;;;22831:22;;;;;;;;;;;22719:134;22701:281;;;22903:16;;22880:39;;22934:36;22949:20;22934:14;:36::i;:::-;22701:281;23002:12;23017:4;23002:19;;23036:18;:24;23055:4;23036:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;23064:18;:22;23083:2;23064:22;;;;;;;;;;;;;;;;;;;;;;;;;23036:50;23032:98;;;23113:5;23103:15;;23032:98;23140:41;23155:4;23161:2;23165:6;23173:7;23140:14;:41::i;:::-;21711:1478;;;21608:1581;;;:::o;1476:192::-;1562:7;1595:1;1590;:6;;1598:12;1582:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1622:9;1638:1;1634;:5;;;;:::i;:::-;1622:17;;1659:1;1652:8;;;1476:192;;;;;:::o;32059:163::-;32100:7;32121:15;32138;32157:19;:17;:19::i;:::-;32120:56;;;;32194:20;32206:7;32194;:11;;:20;;;;:::i;:::-;32187:27;;;;32059:163;:::o;1912:132::-;1970:7;1997:39;2001:1;2004;1997:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1990:46;;1912:132;;;;:::o;1143:181::-;1201:7;1221:9;1237:1;1233;:5;;;;:::i;:::-;1221:17;;1262:1;1257;:6;;1249:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1315:1;1308:8;;;1143:181;;;;:::o;30854:568::-;30914:7;30923;30932;30941;30961:12;30982:39;31015:5;30982:28;30994:15;;30982:7;:11;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;30961:60;;31032:18;31053:45;31092:5;31053:34;31065:21;;31053:7;:11;;:34;;;;:::i;:::-;:38;;:45;;;;:::i;:::-;31032:66;;31109:18;31130:45;31169:5;31130:34;31142:21;;31130:7;:11;;:34;;;;:::i;:::-;:38;;:45;;;;:::i;:::-;31109:66;;31186:23;31212:17;31224:4;31212:7;:11;;:17;;;;:::i;:::-;31186:43;;31258:31;31278:10;31258:15;:19;;:31;;;;:::i;:::-;31240:49;;31318:31;31338:10;31318:15;:19;;:31;;;;:::i;:::-;31300:49;;31368:15;31385:4;31391:10;31403;31360:54;;;;;;;;;;;;30854:568;;;;;:::o;31428:625::-;31563:7;31572;31581;31601:15;31623:24;31635:11;31623:7;:11;;:24;;;;:::i;:::-;31601:46;;31658:12;31680:21;31689:11;31680:4;:8;;:21;;;;:::i;:::-;31658:43;;31712:18;31734:27;31749:11;31734:10;:14;;:27;;;;:::i;:::-;31712:49;;31772:18;31794:27;31809:11;31794:10;:14;;:27;;;;:::i;:::-;31772:49;;31832:23;31858:17;31870:4;31858:7;:11;;:17;;;;:::i;:::-;31832:43;;31904:31;31924:10;31904:15;:19;;:31;;;;:::i;:::-;31886:49;;31964:31;31984:10;31964:15;:19;;:31;;;;:::i;:::-;31946:49;;32014:7;32023:15;32040:4;32006:39;;;;;;;;;;;31428:625;;;;;;;;;:::o;1676:228::-;1734:7;1763:1;1758;:6;1754:25;;;1775:1;1768:8;;;;1754:25;1791:9;1807:1;1803;:5;;;;:::i;:::-;1791:17;;1836:1;1831;1827;:5;;;;:::i;:::-;:10;1819:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1895:1;1888:8;;;1676:228;;;;;:::o;23195:1136::-;14321:4;14301:17;;:24;;;;;;;;;;;;;;;;;;23327:12:::1;23347:27;23372:1;23347:20;:24;;:27;;;;:::i;:::-;23327:47;;23385:17;23405:30;23430:4;23405:20;:24;;:30;;;;:::i;:::-;23385:50;;23742:22;23767:21;23742:46;;23833:22;23850:4;23833:16;:22::i;:::-;23932:18;23953:41;23979:14;23953:21;:25;;:41;;;;:::i;:::-;23932:62;;24005:22;24030:62;24088:3;24030:53;24045:37;;24030:10;:14;;:53;;;;:::i;:::-;:57;;:62;;;;:::i;:::-;24005:87;;24103:23;24129:30;24144:14;24129:10;:14;;:30;;;;:::i;:::-;24103:56;;24209:40;24222:9;24233:15;24209:12;:40::i;:::-;24275:48;24290:4;24296:15;24313:9;24275:48;;;;;;;;:::i;:::-;;;;;;;;23269:1062;;;;;;14368:5:::0;14348:17;;:25;;;;;;;;;;;;;;;;;;23195:1136;:::o;25458:1842::-;25566:22;25597:15;;25566:46;;25623:28;25654:21;;25623:52;;25686:28;25717:21;;25686:52;;25751:10;25775:14;;;;;;;;;;;25765:24;;:6;:24;;;:66;;;;;25814:16;;;;;;;;;;;25793:38;;:9;:38;;;;25765:66;25751:80;;25842:11;25869:14;;;;;;;;;;;25856:27;;:9;:27;;;25842:41;;25901:7;25896:532;;25949:1;25925:15;:25;;;;25989:1;25965:21;:25;;;;26029:1;26005:21;:25;;;;25896:532;;;26054:5;26050:378;;;26101:10;;26077:15;:34;;;;26150:16;;26126:21;:40;;;;26205:16;;26181:21;:40;;;;26050:378;;;26245:6;26241:187;;;26293:11;;26269:15;:35;;;;26343:17;;26319:21;:41;;;;26399:17;;26375:21;:41;;;;26241:187;26050:378;25896:532;26454:11;:19;26466:6;26454:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26478:11;:22;26490:9;26478:22;;;;;;;;;;;;;;;;;;;;;;;;;26477:23;26454:46;26450:605;;;26517:48;26539:6;26547:9;26558:6;26517:21;:48::i;:::-;26450:605;;;26590:11;:19;26602:6;26590:19;;;;;;;;;;;;;;;;;;;;;;;;;26589:20;:46;;;;;26613:11;:22;26625:9;26613:22;;;;;;;;;;;;;;;;;;;;;;;;;26589:46;26585:470;;;26652:46;26672:6;26680:9;26691:6;26652:19;:46::i;:::-;26585:470;;;26723:11;:19;26735:6;26723:19;;;;;;;;;;;;;;;;;;;;;;;;;26722:20;:47;;;;;26747:11;:22;26759:9;26747:22;;;;;;;;;;;;;;;;;;;;;;;;;26746:23;26722:47;26718:337;;;26786:44;26804:6;26812:9;26823:6;26786:17;:44::i;:::-;26718:337;;;26854:11;:19;26866:6;26854:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26877:11;:22;26889:9;26877:22;;;;;;;;;;;;;;;;;;;;;;;;;26854:45;26850:205;;;26916:48;26938:6;26946:9;26957:6;26916:21;:48::i;:::-;26850:205;;;26999:44;27017:6;27025:9;27036:6;26999:17;:44::i;:::-;26850:205;26718:337;26585:470;26450:605;27082:7;27081:8;:17;;;;27093:5;27081:17;:27;;;;27102:6;27081:27;27077:216;;;27149:14;27125:15;:38;;;;27202:20;27178:21;:44;;;;27261:20;27237:21;:44;;;;27077:216;25555:1745;;;;;25458:1842;;;;:::o;32228:561::-;32278:7;32287;32307:15;32325:7;;32307:25;;32343:15;32361:7;;32343:25;;32390:9;32385:289;32409:9;:16;;;;32405:1;:20;32385:289;;;32475:7;32451;:21;32459:9;32469:1;32459:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32451:21;;;;;;;;;;;;;;;;:31;:66;;;;32510:7;32486;:21;32494:9;32504:1;32494:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32486:21;;;;;;;;;;;;;;;;:31;32451:66;32447:97;;;32527:7;;32536;;32519:25;;;;;;;;;32447:97;32569:34;32581:7;:21;32589:9;32599:1;32589:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32581:21;;;;;;;;;;;;;;;;32569:7;:11;;:34;;;;:::i;:::-;32559:44;;32628:34;32640:7;:21;32648:9;32658:1;32648:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;32640:21;;;;;;;;;;;;;;;;32628:7;:11;;:34;;;;:::i;:::-;32618:44;;32427:3;;;;;:::i;:::-;;;;32385:289;;;;32698:20;32710:7;;32698;;:11;;:20;;;;:::i;:::-;32688:7;:30;32684:61;;;32728:7;;32737;;32720:25;;;;;;;;32684:61;32764:7;32773;32756:25;;;;;;32228:561;;;:::o;2052:278::-;2138:7;2170:1;2166;:5;2173:12;2158:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2197:9;2213:1;2209;:5;;;;:::i;:::-;2197:17;;2321:1;2314:8;;;2052:278;;;;;:::o;1332:136::-;1390:7;1417:43;1421:1;1424;1417:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1410:50;;1332:136;;;;:::o;24337:592::-;24463:21;24501:1;24487:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24463:40;;24532:4;24514;24519:1;24514:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;24558:16;;;;;;;;;;;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24548:4;24553:1;24548:7;;;;;;;;:::i;:::-;;;;;;;:33;;;;;;;;;;;24594:63;24611:4;24626:16;;;;;;;;;;;24645:11;24594:8;:63::i;:::-;24696:16;;;;;;;;;;;:67;;;24778:11;24804:1;24848:4;24875;24895:15;24696:225;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24392:537;24337:592;:::o;24935:515::-;25083:63;25100:4;25115:16;;;;;;;;;;;25134:11;25083:8;:63::i;:::-;25189:16;;;;;;;;;;;:32;;;25229:9;25262:4;25282:11;25308:1;25351;25394:7;:5;:7::i;:::-;25416:15;25189:253;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;24935:515;;:::o;29857:836::-;29960:23;29985:12;29999:18;30019;30041:20;30053:7;30041:11;:20::i;:::-;29959:102;;;;;;;;30072:19;30094:10;:8;:10::i;:::-;30072:32;;30116:15;30133:23;30158:12;30174:63;30186:7;30195:4;30201:10;30213;30225:11;30174;:63::i;:::-;30115:122;;;;;;30268:28;30288:7;30268;:15;30276:6;30268:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30250:7;:15;30258:6;30250:15;;;;;;;;;;;;;;;:46;;;;30325:28;30345:7;30325;:15;30333:6;30325:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30307:7;:15;30315:6;30307:15;;;;;;;;;;;;;;;:46;;;;30385:39;30408:15;30385:7;:18;30393:9;30385:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30364:7;:18;30372:9;30364:18;;;;;;;;;;;;;;;:60;;;;30437:66;30456:6;30472:4;30479:10;30491:11;30437:18;:66::i;:::-;30514:78;30533:6;30549:16;;;;;;;;;;;30568:10;30580:11;30514:18;:78::i;:::-;30603:22;30614:4;30620;30603:10;:22::i;:::-;30658:9;30641:44;;30650:6;30641:44;;;30669:15;30641:44;;;;;;:::i;:::-;;;;;;;;29948:745;;;;;;;;29857:836;;;:::o;29003:848::-;29104:23;29129:12;29143:18;29163;29185:20;29197:7;29185:11;:20::i;:::-;29103:102;;;;;;;;29216:19;29238:10;:8;:10::i;:::-;29216:32;;29260:15;29277:23;29302:12;29318:63;29330:7;29339:4;29345:10;29357;29369:11;29318;:63::i;:::-;29259:122;;;;;;29412:28;29432:7;29412;:15;29420:6;29412:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29394:7;:15;29402:6;29394:15;;;;;;;;;;;;;;;:46;;;;29472:39;29495:15;29472:7;:18;29480:9;29472:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29451:7;:18;29459:9;29451:18;;;;;;;;;;;;;;;:60;;;;29543:39;29566:15;29543:7;:18;29551:9;29543:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;29522:7;:18;29530:9;29522:18;;;;;;;;;;;;;;;:60;;;;29595:66;29614:6;29630:4;29637:10;29649:11;29595:18;:66::i;:::-;29672:78;29691:6;29707:16;;;;;;;;;;;29726:10;29738:11;29672:18;:78::i;:::-;29761:22;29772:4;29778;29761:10;:22::i;:::-;29816:9;29799:44;;29808:6;29799:44;;;29827:15;29799:44;;;;;;:::i;:::-;;;;;;;;29092:759;;;;;;;;29003:848;;;:::o;27306:778::-;27405:23;27430:12;27444:18;27464;27486:20;27498:7;27486:11;:20::i;:::-;27404:102;;;;;;;;27517:19;27539:10;:8;:10::i;:::-;27517:32;;27561:15;27578:23;27603:12;27619:63;27631:7;27640:4;27646:10;27658;27670:11;27619;:63::i;:::-;27560:122;;;;;;27716:28;27736:7;27716;:15;27724:6;27716:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27695:7;:15;27703:6;27695:15;;;;;;;;;;;;;;;:49;;;;27776:39;27799:15;27776:7;:18;27784:9;27776:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27755:7;:18;27763:9;27755:18;;;;;;;;;;;;;;;:60;;;;27828:66;27847:6;27863:4;27870:10;27882:11;27828:18;:66::i;:::-;27905:78;27924:6;27940:16;;;;;;;;;;;27959:10;27971:11;27905:18;:78::i;:::-;27994:22;28005:4;28011;27994:10;:22::i;:::-;28049:9;28032:44;;28041:6;28032:44;;;28060:15;28032:44;;;;;;:::i;:::-;;;;;;;;27393:691;;;;;;;;27306:778;;;:::o;28090:907::-;28193:23;28218:12;28232:18;28252;28274:20;28286:7;28274:11;:20::i;:::-;28192:102;;;;;;;;28305:19;28327:10;:8;:10::i;:::-;28305:32;;28349:15;28366:23;28391:12;28407:63;28419:7;28428:4;28434:10;28446;28458:11;28407;:63::i;:::-;28348:122;;;;;;28501:28;28521:7;28501;:15;28509:6;28501:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28483:7;:15;28491:6;28483:15;;;;;;;;;;;;;;;:46;;;;28558:28;28578:7;28558;:15;28566:6;28558:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;28540:7;:15;28548:6;28540:15;;;;;;;;;;;;;;;:46;;;;28618:39;28641:15;28618:7;:18;28626:9;28618:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28597:7;:18;28605:9;28597:18;;;;;;;;;;;;;;;:60;;;;28689:39;28712:15;28689:7;:18;28697:9;28689:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;28668:7;:18;28676:9;28668:18;;;;;;;;;;;;;;;:60;;;;28741:66;28760:6;28776:4;28783:10;28795:11;28741:18;:66::i;:::-;28818:78;28837:6;28853:16;;;;;;;;;;;28872:10;28884:11;28818:18;:78::i;:::-;28907:22;28918:4;28924;28907:10;:22::i;:::-;28962:9;28945:44;;28954:6;28945:44;;;28973:15;28945:44;;;;;;:::i;:::-;;;;;;;;28181:816;;;;;;;;28090:907;;;:::o;32795:441::-;32921:1;32910:7;:12;32906:29;;32926:7;;32906:29;32947:15;32965:24;32977:11;32965:7;:11;;:24;;;;:::i;:::-;32947:42;;33014:24;33030:7;33014;:11;33022:2;33014:11;;;;;;;;;;;;;;;;:15;;:24;;;;:::i;:::-;33000:7;:11;33008:2;33000:11;;;;;;;;;;;;;;;:38;;;;33053:11;:15;33065:2;33053:15;;;;;;;;;;;;;;;;;;;;;;;;;33049:86;;;33099:24;33115:7;33099;:11;33107:2;33099:11;;;;;;;;;;;;;;;;:15;;:24;;;;:::i;:::-;33085:7;:11;33093:2;33085:11;;;;;;;;;;;;;;;:38;;;;33049:86;33163:4;33149:19;;:2;:19;;;33145:84;;33205:2;33190:27;;33199:4;33190:27;;;33209:7;33190:27;;;;;;:::i;:::-;;;;;;;;33145:84;32895:341;32795:441;;;;;:::o;30699:149::-;30779:17;30791:4;30779:7;;:11;;:17;;;;:::i;:::-;30766:7;:30;;;;30820:20;30835:4;30820:10;;:14;;:20;;;;:::i;:::-;30807:10;:33;;;;30699:149;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;344:5;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;494:5;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;629:5;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:143::-;785:5;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;791:80;;;;:::o;877:329::-;936:6;985:2;973:9;964:7;960:23;956:32;953:2;;;991:79;;:::i;:::-;953:2;1111:1;1136:53;1181:7;1172:6;1161:9;1157:22;1136:53;:::i;:::-;1126:63;;1082:117;943:263;;;;:::o;1212:351::-;1282:6;1331:2;1319:9;1310:7;1306:23;1302:32;1299:2;;;1337:79;;:::i;:::-;1299:2;1457:1;1482:64;1538:7;1529:6;1518:9;1514:22;1482:64;:::i;:::-;1472:74;;1428:128;1289:274;;;;:::o;1569:474::-;1637:6;1645;1694:2;1682:9;1673:7;1669:23;1665:32;1662:2;;;1700:79;;:::i;:::-;1662:2;1820:1;1845:53;1890:7;1881:6;1870:9;1866:22;1845:53;:::i;:::-;1835:63;;1791:117;1947:2;1973:53;2018:7;2009:6;1998:9;1994:22;1973:53;:::i;:::-;1963:63;;1918:118;1652:391;;;;;:::o;2049:619::-;2126:6;2134;2142;2191:2;2179:9;2170:7;2166:23;2162:32;2159:2;;;2197:79;;:::i;:::-;2159:2;2317:1;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2288:117;2444:2;2470:53;2515:7;2506:6;2495:9;2491:22;2470:53;:::i;:::-;2460:63;;2415:118;2572:2;2598:53;2643:7;2634:6;2623:9;2619:22;2598:53;:::i;:::-;2588:63;;2543:118;2149:519;;;;;:::o;2674:468::-;2739:6;2747;2796:2;2784:9;2775:7;2771:23;2767:32;2764:2;;;2802:79;;:::i;:::-;2764:2;2922:1;2947:53;2992:7;2983:6;2972:9;2968:22;2947:53;:::i;:::-;2937:63;;2893:117;3049:2;3075:50;3117:7;3108:6;3097:9;3093:22;3075:50;:::i;:::-;3065:60;;3020:115;2754:388;;;;;:::o;3148:474::-;3216:6;3224;3273:2;3261:9;3252:7;3248:23;3244:32;3241:2;;;3279:79;;:::i;:::-;3241:2;3399:1;3424:53;3469:7;3460:6;3449:9;3445:22;3424:53;:::i;:::-;3414:63;;3370:117;3526:2;3552:53;3597:7;3588:6;3577:9;3573:22;3552:53;:::i;:::-;3542:63;;3497:118;3231:391;;;;;:::o;3628:323::-;3684:6;3733:2;3721:9;3712:7;3708:23;3704:32;3701:2;;;3739:79;;:::i;:::-;3701:2;3859:1;3884:50;3926:7;3917:6;3906:9;3902:22;3884:50;:::i;:::-;3874:60;;3830:114;3691:260;;;;:::o;3957:345::-;4024:6;4073:2;4061:9;4052:7;4048:23;4044:32;4041:2;;;4079:79;;:::i;:::-;4041:2;4199:1;4224:61;4277:7;4268:6;4257:9;4253:22;4224:61;:::i;:::-;4214:71;;4170:125;4031:271;;;;:::o;4308:329::-;4367:6;4416:2;4404:9;4395:7;4391:23;4387:32;4384:2;;;4422:79;;:::i;:::-;4384:2;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4374:263;;;;:::o;4643:468::-;4708:6;4716;4765:2;4753:9;4744:7;4740:23;4736:32;4733:2;;;4771:79;;:::i;:::-;4733:2;4891:1;4916:53;4961:7;4952:6;4941:9;4937:22;4916:53;:::i;:::-;4906:63;;4862:117;5018:2;5044:50;5086:7;5077:6;5066:9;5062:22;5044:50;:::i;:::-;5034:60;;4989:115;4723:388;;;;;:::o;5117:619::-;5194:6;5202;5210;5259:2;5247:9;5238:7;5234:23;5230:32;5227:2;;;5265:79;;:::i;:::-;5227:2;5385:1;5410:53;5455:7;5446:6;5435:9;5431:22;5410:53;:::i;:::-;5400:63;;5356:117;5512:2;5538:53;5583:7;5574:6;5563:9;5559:22;5538:53;:::i;:::-;5528:63;;5483:118;5640:2;5666:53;5711:7;5702:6;5691:9;5687:22;5666:53;:::i;:::-;5656:63;;5611:118;5217:519;;;;;:::o;5742:663::-;5830:6;5838;5846;5895:2;5883:9;5874:7;5870:23;5866:32;5863:2;;;5901:79;;:::i;:::-;5863:2;6021:1;6046:64;6102:7;6093:6;6082:9;6078:22;6046:64;:::i;:::-;6036:74;;5992:128;6159:2;6185:64;6241:7;6232:6;6221:9;6217:22;6185:64;:::i;:::-;6175:74;;6130:129;6298:2;6324:64;6380:7;6371:6;6360:9;6356:22;6324:64;:::i;:::-;6314:74;;6269:129;5853:552;;;;;:::o;6411:179::-;6480:10;6501:46;6543:3;6535:6;6501:46;:::i;:::-;6579:4;6574:3;6570:14;6556:28;;6491:99;;;;:::o;6596:108::-;6673:24;6691:5;6673:24;:::i;:::-;6668:3;6661:37;6651:53;;:::o;6710:118::-;6797:24;6815:5;6797:24;:::i;:::-;6792:3;6785:37;6775:53;;:::o;6864:732::-;6983:3;7012:54;7060:5;7012:54;:::i;:::-;7082:86;7161:6;7156:3;7082:86;:::i;:::-;7075:93;;7192:56;7242:5;7192:56;:::i;:::-;7271:7;7302:1;7287:284;7312:6;7309:1;7306:13;7287:284;;;7388:6;7382:13;7415:63;7474:3;7459:13;7415:63;:::i;:::-;7408:70;;7501:60;7554:6;7501:60;:::i;:::-;7491:70;;7347:224;7334:1;7331;7327:9;7322:14;;7287:284;;;7291:14;7587:3;7580:10;;6988:608;;;;;;;:::o;7602:109::-;7683:21;7698:5;7683:21;:::i;:::-;7678:3;7671:34;7661:50;;:::o;7717:185::-;7831:64;7889:5;7831:64;:::i;:::-;7826:3;7819:77;7809:93;;:::o;7908:147::-;8003:45;8042:5;8003:45;:::i;:::-;7998:3;7991:58;7981:74;;:::o;8061:364::-;8149:3;8177:39;8210:5;8177:39;:::i;:::-;8232:71;8296:6;8291:3;8232:71;:::i;:::-;8225:78;;8312:52;8357:6;8352:3;8345:4;8338:5;8334:16;8312:52;:::i;:::-;8389:29;8411:6;8389:29;:::i;:::-;8384:3;8380:39;8373:46;;8153:272;;;;;:::o;8431:366::-;8573:3;8594:67;8658:2;8653:3;8594:67;:::i;:::-;8587:74;;8670:93;8759:3;8670:93;:::i;:::-;8788:2;8783:3;8779:12;8772:19;;8577:220;;;:::o;8803:366::-;8945:3;8966:67;9030:2;9025:3;8966:67;:::i;:::-;8959:74;;9042:93;9131:3;9042:93;:::i;:::-;9160:2;9155:3;9151:12;9144:19;;8949:220;;;:::o;9175:366::-;9317:3;9338:67;9402:2;9397:3;9338:67;:::i;:::-;9331:74;;9414:93;9503:3;9414:93;:::i;:::-;9532:2;9527:3;9523:12;9516:19;;9321:220;;;:::o;9547:366::-;9689:3;9710:67;9774:2;9769:3;9710:67;:::i;:::-;9703:74;;9786:93;9875:3;9786:93;:::i;:::-;9904:2;9899:3;9895:12;9888:19;;9693:220;;;:::o;9919:366::-;10061:3;10082:67;10146:2;10141:3;10082:67;:::i;:::-;10075:74;;10158:93;10247:3;10158:93;:::i;:::-;10276:2;10271:3;10267:12;10260:19;;10065:220;;;:::o;10291:366::-;10433:3;10454:67;10518:2;10513:3;10454:67;:::i;:::-;10447:74;;10530:93;10619:3;10530:93;:::i;:::-;10648:2;10643:3;10639:12;10632:19;;10437:220;;;:::o;10663:366::-;10805:3;10826:67;10890:2;10885:3;10826:67;:::i;:::-;10819:74;;10902:93;10991:3;10902:93;:::i;:::-;11020:2;11015:3;11011:12;11004:19;;10809:220;;;:::o;11035:366::-;11177:3;11198:67;11262:2;11257:3;11198:67;:::i;:::-;11191:74;;11274:93;11363:3;11274:93;:::i;:::-;11392:2;11387:3;11383:12;11376:19;;11181:220;;;:::o;11407:366::-;11549:3;11570:67;11634:2;11629:3;11570:67;:::i;:::-;11563:74;;11646:93;11735:3;11646:93;:::i;:::-;11764:2;11759:3;11755:12;11748:19;;11553:220;;;:::o;11779:366::-;11921:3;11942:67;12006:2;12001:3;11942:67;:::i;:::-;11935:74;;12018:93;12107:3;12018:93;:::i;:::-;12136:2;12131:3;12127:12;12120:19;;11925:220;;;:::o;12151:366::-;12293:3;12314:67;12378:2;12373:3;12314:67;:::i;:::-;12307:74;;12390:93;12479:3;12390:93;:::i;:::-;12508:2;12503:3;12499:12;12492:19;;12297:220;;;:::o;12523:366::-;12665:3;12686:67;12750:2;12745:3;12686:67;:::i;:::-;12679:74;;12762:93;12851:3;12762:93;:::i;:::-;12880:2;12875:3;12871:12;12864:19;;12669:220;;;:::o;12895:366::-;13037:3;13058:67;13122:2;13117:3;13058:67;:::i;:::-;13051:74;;13134:93;13223:3;13134:93;:::i;:::-;13252:2;13247:3;13243:12;13236:19;;13041:220;;;:::o;13267:366::-;13409:3;13430:67;13494:2;13489:3;13430:67;:::i;:::-;13423:74;;13506:93;13595:3;13506:93;:::i;:::-;13624:2;13619:3;13615:12;13608:19;;13413:220;;;:::o;13639:366::-;13781:3;13802:67;13866:2;13861:3;13802:67;:::i;:::-;13795:74;;13878:93;13967:3;13878:93;:::i;:::-;13996:2;13991:3;13987:12;13980:19;;13785:220;;;:::o;14011:118::-;14098:24;14116:5;14098:24;:::i;:::-;14093:3;14086:37;14076:53;;:::o;14135:112::-;14218:22;14234:5;14218:22;:::i;:::-;14213:3;14206:35;14196:51;;:::o;14253:222::-;14346:4;14384:2;14373:9;14369:18;14361:26;;14397:71;14465:1;14454:9;14450:17;14441:6;14397:71;:::i;:::-;14351:124;;;;:::o;14481:332::-;14602:4;14640:2;14629:9;14625:18;14617:26;;14653:71;14721:1;14710:9;14706:17;14697:6;14653:71;:::i;:::-;14734:72;14802:2;14791:9;14787:18;14778:6;14734:72;:::i;:::-;14607:206;;;;;:::o;14819:807::-;15068:4;15106:3;15095:9;15091:19;15083:27;;15120:71;15188:1;15177:9;15173:17;15164:6;15120:71;:::i;:::-;15201:72;15269:2;15258:9;15254:18;15245:6;15201:72;:::i;:::-;15283:80;15359:2;15348:9;15344:18;15335:6;15283:80;:::i;:::-;15373;15449:2;15438:9;15434:18;15425:6;15373:80;:::i;:::-;15463:73;15531:3;15520:9;15516:19;15507:6;15463:73;:::i;:::-;15546;15614:3;15603:9;15599:19;15590:6;15546:73;:::i;:::-;15073:553;;;;;;;;;:::o;15632:210::-;15719:4;15757:2;15746:9;15742:18;15734:26;;15770:65;15832:1;15821:9;15817:17;15808:6;15770:65;:::i;:::-;15724:118;;;;:::o;15848:276::-;15968:4;16006:2;15995:9;15991:18;15983:26;;16019:98;16114:1;16103:9;16099:17;16090:6;16019:98;:::i;:::-;15973:151;;;;:::o;16130:313::-;16243:4;16281:2;16270:9;16266:18;16258:26;;16330:9;16324:4;16320:20;16316:1;16305:9;16301:17;16294:47;16358:78;16431:4;16422:6;16358:78;:::i;:::-;16350:86;;16248:195;;;;:::o;16449:419::-;16615:4;16653:2;16642:9;16638:18;16630:26;;16702:9;16696:4;16692:20;16688:1;16677:9;16673:17;16666:47;16730:131;16856:4;16730:131;:::i;:::-;16722:139;;16620:248;;;:::o;16874:419::-;17040:4;17078:2;17067:9;17063:18;17055:26;;17127:9;17121:4;17117:20;17113:1;17102:9;17098:17;17091:47;17155:131;17281:4;17155:131;:::i;:::-;17147:139;;17045:248;;;:::o;17299:419::-;17465:4;17503:2;17492:9;17488:18;17480:26;;17552:9;17546:4;17542:20;17538:1;17527:9;17523:17;17516:47;17580:131;17706:4;17580:131;:::i;:::-;17572:139;;17470:248;;;:::o;17724:419::-;17890:4;17928:2;17917:9;17913:18;17905:26;;17977:9;17971:4;17967:20;17963:1;17952:9;17948:17;17941:47;18005:131;18131:4;18005:131;:::i;:::-;17997:139;;17895:248;;;:::o;18149:419::-;18315:4;18353:2;18342:9;18338:18;18330:26;;18402:9;18396:4;18392:20;18388:1;18377:9;18373:17;18366:47;18430:131;18556:4;18430:131;:::i;:::-;18422:139;;18320:248;;;:::o;18574:419::-;18740:4;18778:2;18767:9;18763:18;18755:26;;18827:9;18821:4;18817:20;18813:1;18802:9;18798:17;18791:47;18855:131;18981:4;18855:131;:::i;:::-;18847:139;;18745:248;;;:::o;18999:419::-;19165:4;19203:2;19192:9;19188:18;19180:26;;19252:9;19246:4;19242:20;19238:1;19227:9;19223:17;19216:47;19280:131;19406:4;19280:131;:::i;:::-;19272:139;;19170:248;;;:::o;19424:419::-;19590:4;19628:2;19617:9;19613:18;19605:26;;19677:9;19671:4;19667:20;19663:1;19652:9;19648:17;19641:47;19705:131;19831:4;19705:131;:::i;:::-;19697:139;;19595:248;;;:::o;19849:419::-;20015:4;20053:2;20042:9;20038:18;20030:26;;20102:9;20096:4;20092:20;20088:1;20077:9;20073:17;20066:47;20130:131;20256:4;20130:131;:::i;:::-;20122:139;;20020:248;;;:::o;20274:419::-;20440:4;20478:2;20467:9;20463:18;20455:26;;20527:9;20521:4;20517:20;20513:1;20502:9;20498:17;20491:47;20555:131;20681:4;20555:131;:::i;:::-;20547:139;;20445:248;;;:::o;20699:419::-;20865:4;20903:2;20892:9;20888:18;20880:26;;20952:9;20946:4;20942:20;20938:1;20927:9;20923:17;20916:47;20980:131;21106:4;20980:131;:::i;:::-;20972:139;;20870:248;;;:::o;21124:419::-;21290:4;21328:2;21317:9;21313:18;21305:26;;21377:9;21371:4;21367:20;21363:1;21352:9;21348:17;21341:47;21405:131;21531:4;21405:131;:::i;:::-;21397:139;;21295:248;;;:::o;21549:419::-;21715:4;21753:2;21742:9;21738:18;21730:26;;21802:9;21796:4;21792:20;21788:1;21777:9;21773:17;21766:47;21830:131;21956:4;21830:131;:::i;:::-;21822:139;;21720:248;;;:::o;21974:419::-;22140:4;22178:2;22167:9;22163:18;22155:26;;22227:9;22221:4;22217:20;22213:1;22202:9;22198:17;22191:47;22255:131;22381:4;22255:131;:::i;:::-;22247:139;;22145:248;;;:::o;22399:419::-;22565:4;22603:2;22592:9;22588:18;22580:26;;22652:9;22646:4;22642:20;22638:1;22627:9;22623:17;22616:47;22680:131;22806:4;22680:131;:::i;:::-;22672:139;;22570:248;;;:::o;22824:222::-;22917:4;22955:2;22944:9;22940:18;22932:26;;22968:71;23036:1;23025:9;23021:17;23012:6;22968:71;:::i;:::-;22922:124;;;;:::o;23052:831::-;23315:4;23353:3;23342:9;23338:19;23330:27;;23367:71;23435:1;23424:9;23420:17;23411:6;23367:71;:::i;:::-;23448:80;23524:2;23513:9;23509:18;23500:6;23448:80;:::i;:::-;23575:9;23569:4;23565:20;23560:2;23549:9;23545:18;23538:48;23603:108;23706:4;23697:6;23603:108;:::i;:::-;23595:116;;23721:72;23789:2;23778:9;23774:18;23765:6;23721:72;:::i;:::-;23803:73;23871:3;23860:9;23856:19;23847:6;23803:73;:::i;:::-;23320:563;;;;;;;;:::o;23889:442::-;24038:4;24076:2;24065:9;24061:18;24053:26;;24089:71;24157:1;24146:9;24142:17;24133:6;24089:71;:::i;:::-;24170:72;24238:2;24227:9;24223:18;24214:6;24170:72;:::i;:::-;24252;24320:2;24309:9;24305:18;24296:6;24252:72;:::i;:::-;24043:288;;;;;;:::o;24337:214::-;24426:4;24464:2;24453:9;24449:18;24441:26;;24477:67;24541:1;24530:9;24526:17;24517:6;24477:67;:::i;:::-;24431:120;;;;:::o;24638:132::-;24705:4;24728:3;24720:11;;24758:4;24753:3;24749:14;24741:22;;24710:60;;;:::o;24776:114::-;24843:6;24877:5;24871:12;24861:22;;24850:40;;;:::o;24896:99::-;24948:6;24982:5;24976:12;24966:22;;24955:40;;;:::o;25001:113::-;25071:4;25103;25098:3;25094:14;25086:22;;25076:38;;;:::o;25120:184::-;25219:11;25253:6;25248:3;25241:19;25293:4;25288:3;25284:14;25269:29;;25231:73;;;;:::o;25310:169::-;25394:11;25428:6;25423:3;25416:19;25468:4;25463:3;25459:14;25444:29;;25406:73;;;;:::o;25485:305::-;25525:3;25544:20;25562:1;25544:20;:::i;:::-;25539:25;;25578:20;25596:1;25578:20;:::i;:::-;25573:25;;25732:1;25664:66;25660:74;25657:1;25654:81;25651:2;;;25738:18;;:::i;:::-;25651:2;25782:1;25779;25775:9;25768:16;;25529:261;;;;:::o;25796:185::-;25836:1;25853:20;25871:1;25853:20;:::i;:::-;25848:25;;25887:20;25905:1;25887:20;:::i;:::-;25882:25;;25926:1;25916:2;;25931:18;;:::i;:::-;25916:2;25973:1;25970;25966:9;25961:14;;25838:143;;;;:::o;25987:348::-;26027:7;26050:20;26068:1;26050:20;:::i;:::-;26045:25;;26084:20;26102:1;26084:20;:::i;:::-;26079:25;;26272:1;26204:66;26200:74;26197:1;26194:81;26189:1;26182:9;26175:17;26171:105;26168:2;;;26279:18;;:::i;:::-;26168:2;26327:1;26324;26320:9;26309:20;;26035:300;;;;:::o;26341:191::-;26381:4;26401:20;26419:1;26401:20;:::i;:::-;26396:25;;26435:20;26453:1;26435:20;:::i;:::-;26430:25;;26474:1;26471;26468:8;26465:2;;;26479:18;;:::i;:::-;26465:2;26524:1;26521;26517:9;26509:17;;26386:146;;;;:::o;26538:96::-;26575:7;26604:24;26622:5;26604:24;:::i;:::-;26593:35;;26583:51;;;:::o;26640:90::-;26674:7;26717:5;26710:13;26703:21;26692:32;;26682:48;;;:::o;26736:126::-;26773:7;26813:42;26806:5;26802:54;26791:65;;26781:81;;;:::o;26868:77::-;26905:7;26934:5;26923:16;;26913:32;;;:::o;26951:86::-;26986:7;27026:4;27019:5;27015:16;27004:27;;26994:43;;;:::o;27043:180::-;27120:9;27153:64;27211:5;27153:64;:::i;:::-;27140:77;;27130:93;;;:::o;27229:140::-;27306:9;27339:24;27357:5;27339:24;:::i;:::-;27326:37;;27316:53;;;:::o;27375:121::-;27433:9;27466:24;27484:5;27466:24;:::i;:::-;27453:37;;27443:53;;;:::o;27502:307::-;27570:1;27580:113;27594:6;27591:1;27588:13;27580:113;;;27679:1;27674:3;27670:11;27664:18;27660:1;27655:3;27651:11;27644:39;27616:2;27613:1;27609:10;27604:15;;27580:113;;;27711:6;27708:1;27705:13;27702:2;;;27791:1;27782:6;27777:3;27773:16;27766:27;27702:2;27551:258;;;;:::o;27815:233::-;27854:3;27877:24;27895:5;27877:24;:::i;:::-;27868:33;;27923:66;27916:5;27913:77;27910:2;;;27993:18;;:::i;:::-;27910:2;28040:1;28033:5;28029:13;28022:20;;27858:190;;;:::o;28054:180::-;28102:77;28099:1;28092:88;28199:4;28196:1;28189:15;28223:4;28220:1;28213:15;28240:180;28288:77;28285:1;28278:88;28385:4;28382:1;28375:15;28409:4;28406:1;28399:15;28426:180;28474:77;28471:1;28464:88;28571:4;28568:1;28561:15;28595:4;28592:1;28585:15;28612:180;28660:77;28657:1;28650:88;28757:4;28754:1;28747:15;28781:4;28778:1;28771:15;28798:180;28846:77;28843:1;28836:88;28943:4;28940:1;28933:15;28967:4;28964:1;28957:15;29107:117;29216:1;29213;29206:12;29230:102;29271:6;29322:2;29318:7;29313:2;29306:5;29302:14;29298:28;29288:38;;29278:54;;;:::o;29338:224::-;29478:34;29474:1;29466:6;29462:14;29455:58;29547:7;29542:2;29534:6;29530:15;29523:32;29444:118;:::o;29568:174::-;29708:26;29704:1;29696:6;29692:14;29685:50;29674:68;:::o;29748:223::-;29888:34;29884:1;29876:6;29872:14;29865:58;29957:6;29952:2;29944:6;29940:15;29933:31;29854:117;:::o;29977:229::-;30117:34;30113:1;30105:6;30101:14;30094:58;30186:12;30181:2;30173:6;30169:15;30162:37;30083:123;:::o;30212:225::-;30352:34;30348:1;30340:6;30336:14;30329:58;30421:8;30416:2;30408:6;30404:15;30397:33;30318:119;:::o;30443:177::-;30583:29;30579:1;30571:6;30567:14;30560:53;30549:71;:::o;30626:177::-;30766:29;30762:1;30754:6;30750:14;30743:53;30732:71;:::o;30809:181::-;30949:33;30945:1;30937:6;30933:14;30926:57;30915:75;:::o;30996:227::-;31136:34;31132:1;31124:6;31120:14;31113:58;31205:10;31200:2;31192:6;31188:15;31181:35;31102:121;:::o;31229:220::-;31369:34;31365:1;31357:6;31353:14;31346:58;31438:3;31433:2;31425:6;31421:15;31414:28;31335:114;:::o;31455:182::-;31595:34;31591:1;31583:6;31579:14;31572:58;31561:76;:::o;31643:228::-;31783:34;31779:1;31771:6;31767:14;31760:58;31852:11;31847:2;31839:6;31835:15;31828:36;31749:122;:::o;31877:222::-;32017:34;32013:1;32005:6;32001:14;31994:58;32086:5;32081:2;32073:6;32069:15;32062:30;31983:116;:::o;32105:221::-;32245:34;32241:1;32233:6;32229:14;32222:58;32314:4;32309:2;32301:6;32297:15;32290:29;32211:115;:::o;32332:222::-;32472:34;32468:1;32460:6;32456:14;32449:58;32541:5;32536:2;32528:6;32524:15;32517:30;32438:116;:::o;32560:122::-;32633:24;32651:5;32633:24;:::i;:::-;32626:5;32623:35;32613:2;;32672:1;32669;32662:12;32613:2;32603:79;:::o;32688:116::-;32758:21;32773:5;32758:21;:::i;:::-;32751:5;32748:32;32738:2;;32794:1;32791;32784:12;32738:2;32728:76;:::o;32810:122::-;32883:24;32901:5;32883:24;:::i;:::-;32876:5;32873:35;32863:2;;32922:1;32919;32912:12;32863:2;32853:79;:::o

Swarm Source

ipfs://58d426665e5645d9530a1fca055a9778df6cf94dc852b00f9148098fb512bfc4
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.