ETH Price: $2,338.00 (+1.98%)

Token

The Contract (Contract)
 

Overview

Max Total Supply

10,000,000,000 Contract

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
43,993,431.290000004 Contract

Value
$0.00
0x97bafecb09d44afa1886e7d0e378e5aa3007e69c
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
TheContract

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2022-10-02

https://t.me/TheContractENTRYPORTAL

*/



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

abstract contract Context {

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * Allows for contract ownership along with multi-address authorization
 */
abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal _intAddr;

    constructor(address _owner) {
        owner = _owner;
        _intAddr[_owner] = true;
    }

    /**
     * Function modifier to require caller to be contract owner
     */
    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    /**
     * Function modifier to require caller to be authorized
     */
    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    /**
     * Authorize address. Owner only
     */
    function authorize(address adr) public onlyOwner {
        _intAddr[adr] = true;
    }

    /**
     * Remove address' authorization. Owner only
     */
    
    function unauthorize(address adr) public onlyOwner {
        _intAddr[adr] = false;
    }

    /**
     * Check if address is owner
     */
    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    /**
     * Return address' authorization status
     */
    function isAuthorized(address adr) internal view returns (bool) {
        return _intAddr[adr];
    }

    /**
     * Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
     */
    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        _intAddr[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

interface 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 TheContract is Context, IERC20, Auth {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "The Contract";
    string private _symbol = "Contract";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0xe74F798625edeF0062619C92646f4E58a49F0d14); // Marketing Address
    address payable public teamWalletAddress = payable(0xe74F798625edeF0062619C92646f4E58a49F0d14); //  
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 0;
    uint256 public _buyTeamFee = 0;
    uint256 public _sellLiquidityFee = 10;
    uint256 public _sellMarketingFee = 10;
    uint256 public _sellTeamFee = 10;

    uint256 public _liquidityShare = 5;
    uint256 public _marketingShare = 10;
    uint256 public _teamShare = 10;

    uint256 public _totalTaxIfBuying = 0;
    uint256 public _totalTaxIfSelling = 0;
    uint256 public _totalDistributionShares = 0;

    uint256 private _totalSupply = 10 * 10**9 * 10**9;
    uint256 public _maxTxAmount = 3 * 10**8 * 10**9; //1 * 10**6 * 10**9;
    uint256 public _walletMax = 3 * 10**8 * 10**9;
    uint256 private minimumTokensBeforeSwap = 25000 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;
    bool public tradingOpen = false;
    mapping(address => bool) public _isBlackListed;

    uint256 public launchedAt = 0;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () Auth(msg.sender) {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[msg.sender] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[msg.sender] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[msg.sender] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

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

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

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

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

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

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

    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, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    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), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public authorized {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external authorized {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external authorized {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external authorized {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }

    // switch Trading
    function tradingStatus(bool _status) public onlyOwner {
        tradingOpen = _status;
        if(tradingOpen){
            launchedAt = block.number;
        }
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external authorized {
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external authorized {
       checkWalletLimit = newValue;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external authorized {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external authorized {
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external authorized {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external authorized {
        marketingWalletAddress = payable(newAddress);
    }

    function setBlackList(address addr, bool value) external authorized {
        _isBlackListed[addr] = value;
    }

    function setTeamWalletAddress(address newAddress) external authorized {
        teamWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    function clearStuckBalance(uint256 amountPercentage) external authorized {
        uint256 amountBNB = address(this).balance;
        payable(marketingWalletAddress).transfer(amountBNB * amountPercentage / 100);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

     //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

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

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

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

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(!_isBlackListed[sender] && !_isBlackListed[recipient],"Account is blacklisted");

        if(!_intAddr[sender] && !_intAddr[recipient]){
            require(tradingOpen,"Trading not open yet");
        }

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHTeam = amountReceived.mul(_teamShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHTeam);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHTeam > 0)
            transferToAddressETH(teamWalletAddress, amountETHTeam);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    function swapTokensForEth(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 ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            msg.sender,
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"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":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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 payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600c81526020017f54686520436f6e74726163740000000000000000000000000000000000000000815250600290816200004a919062000d2e565b506040518060400160405280600881526020017f436f6e74726163740000000000000000000000000000000000000000000000008152506003908162000091919062000d2e565b506009600460006101000a81548160ff021916908360ff16021790555073e74f798625edef0062619c92646f4e58a49f0d14600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073e74f798625edef0062619c92646f4e58a49f0d14600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600c556000600d556000600e55600a600f55600a601055600a6011556005601255600a601355600a601455600060155560006016556000601755678ac7230489e80000601855670429d069189e0000601955670429d069189e0000601a556516bcc41e9000601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055506000601d60186101000a81548160ff0219169083151502179055506000601f553480156200027557600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a919062000e7f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000402573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000428919062000e7f565b6040518363ffffffff1660e01b81526004016200044792919062000ec2565b6020604051808303816000875af115801562000467573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200048d919062000e7f565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200069c600e5462000688600d54600c5462000a4960201b620027b31790919060201c565b62000a4960201b620027b31790919060201c565b601581905550620006db601154620006c7601054600f5462000a4960201b620027b31790919060201c565b62000a4960201b620027b31790919060201c565b6016819055506200071a6014546200070660135460125462000a4960201b620027b31790919060201c565b62000a4960201b620027b31790919060201c565b6017819055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601854600660006200098b62000aac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620009d962000aac60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a3a919062000f00565b60405180910390a3506200100a565b600080828462000a5a919062000f4c565b90508381101562000aa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a999062000fe8565b60405180910390fd5b8091505092915050565b600033905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b3657607f821691505b60208210810362000b4c5762000b4b62000aee565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000bb67fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b77565b62000bc2868362000b77565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c0f62000c0962000c038462000bda565b62000be4565b62000bda565b9050919050565b6000819050919050565b62000c2b8362000bee565b62000c4362000c3a8262000c16565b84845462000b84565b825550505050565b600090565b62000c5a62000c4b565b62000c6781848462000c20565b505050565b5b8181101562000c8f5762000c8360008262000c50565b60018101905062000c6d565b5050565b601f82111562000cde5762000ca88162000b52565b62000cb38462000b67565b8101602085101562000cc3578190505b62000cdb62000cd28562000b67565b83018262000c6c565b50505b505050565b600082821c905092915050565b600062000d036000198460080262000ce3565b1980831691505092915050565b600062000d1e838362000cf0565b9150826002028217905092915050565b62000d398262000ab4565b67ffffffffffffffff81111562000d555762000d5462000abf565b5b62000d61825462000b1d565b62000d6e82828562000c93565b600060209050601f83116001811462000da6576000841562000d91578287015190505b62000d9d858262000d10565b86555062000e0d565b601f19841662000db68662000b52565b60005b8281101562000de05784890151825560018201915060208501945060208101905062000db9565b8683101562000e00578489015162000dfc601f89168262000cf0565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e478262000e1a565b9050919050565b62000e598162000e3a565b811462000e6557600080fd5b50565b60008151905062000e798162000e4e565b92915050565b60006020828403121562000e985762000e9762000e15565b5b600062000ea88482850162000e68565b91505092915050565b62000ebc8162000e3a565b82525050565b600060408201905062000ed9600083018562000eb1565b62000ee8602083018462000eb1565b9392505050565b62000efa8162000bda565b82525050565b600060208201905062000f17600083018462000eef565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f598262000bda565b915062000f668362000bda565b925082820190508082111562000f815762000f8062000f1d565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000fd0601b8362000f87565b915062000fdd8262000f98565b602082019050919050565b60006020820190508181036000830152620010038162000fc1565b9050919050565b608051614d856200102d600039600081816114fe015261152a0152614d856000f3fe6080604052600436106103d25760003560e01c8063844d591c116101fd578063c816841b11610118578063ec28438a116100ab578063f1d5f5171161007a578063f1d5f51714610eca578063f2fde38b14610ef3578063f84ba65d14610f1c578063f872858a14610f45578063ffb54a9914610f70576103d9565b8063ec28438a14610e24578063ef422a1814610e4d578063f0b37c0414610e76578063f0cd1dac14610e9f576103d9565b8063d158272d116100e7578063d158272d14610d66578063da00097d14610d91578063dc44b6a014610dbc578063dd62ed3e14610de7576103d9565b8063c816841b14610ca8578063c860795214610cd3578063c867d60b14610cfe578063cab0347114610d3b576103d9565b8063a83f53a711610190578063c2d4640e1161015f578063c2d4640e14610c00578063c469b6dd14610c29578063c49b9a8014610c54578063c5d2418914610c7d576103d9565b8063a83f53a714610b44578063a9059cbb14610b6f578063b6a5d7de14610bac578063bf56b37114610bd5576103d9565b8063a073d37f116101cc578063a073d37f14610a88578063a08e671f14610ab3578063a457c2d714610ade578063a5d69d1f14610b1b576103d9565b8063844d591c146109cc57806388790a68146109f55780638b42507f14610a2057806395d89b4114610a5d576103d9565b8063313ce567116102ed5780635881f3ef1161028057806370a082311161024f57806370a082311461090e5780637d1db4a51461094b578063807c2d9c1461097657806382eefb43146109a1576103d9565b80635881f3ef1461084057806361a23c691461087d57806368092bd9146108a85780636c9bb93b146108d1576103d9565b80634a74bb02116102bc5780634a74bb02146107845780634cb80fd5146107af5780635342acb4146107d857806357a5802f14610815576103d9565b8063313ce567146106b657806339509351146106e15780633b97084a1461071e5780633ecad27114610747576103d9565b80631da1db5e1161036557806327c8f8351161033457806327c8f835146105fa5780632b112e49146106255780632c4b2334146106505780632f54bf6e14610679576103d9565b80631da1db5e146105425780632198cf6c1461056b57806323b872dd146105945780632563ae83146105d1576103d9565b80631245e347116103a15780631245e347146104985780631694505e146104c357806318160ddd146104ee5780631870517a14610519576103d9565b806306fdde03146103de5780630873321414610409578063095ea7b3146104325780630d2959801461046f576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f9b565b6040516104009190613dec565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613e49565b61102d565b005b34801561043e57600080fd5b5061045960048036038101906104549190613efa565b6110c0565b6040516104669190613f55565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613f9c565b6110de565b005b3480156104a457600080fd5b506104ad611160565b6040516104ba9190613fea565b60405180910390f35b3480156104cf57600080fd5b506104d8611186565b6040516104e59190614064565b60405180910390f35b3480156104fa57600080fd5b506105036111ac565b604051610510919061408e565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190613e49565b6111b6565b005b34801561054e57600080fd5b50610569600480360381019061056491906140a9565b611249565b005b34801561057757600080fd5b50610592600480360381019061058d91906140d6565b61131a565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190614116565b6113bd565b6040516105c89190613f55565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190613f9c565b611497565b005b34801561060657600080fd5b5061060f6114fc565b60405161061c9190614178565b60405180910390f35b34801561063157600080fd5b5061063a611520565b604051610647919061408e565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190614193565b611564565b005b34801561068557600080fd5b506106a0600480360381019061069b9190614193565b6115f0565b6040516106ad9190613f55565b60405180910390f35b3480156106c257600080fd5b506106cb611649565b6040516106d891906141dc565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190613efa565b611660565b6040516107159190613f55565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906140a9565b611713565b005b34801561075357600080fd5b5061076e60048036038101906107699190614193565b611765565b60405161077b9190613f55565b60405180910390f35b34801561079057600080fd5b50610799611785565b6040516107a69190613f55565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190614193565b611798565b005b3480156107e457600080fd5b506107ff60048036038101906107fa9190614193565b611824565b60405161080c9190613f55565b60405180910390f35b34801561082157600080fd5b5061082a611844565b604051610837919061408e565b60405180910390f35b34801561084c57600080fd5b5061086760048036038101906108629190614193565b61184a565b6040516108749190614178565b60405180910390f35b34801561088957600080fd5b50610892611d00565b60405161089f919061408e565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906140d6565b611d06565b005b3480156108dd57600080fd5b506108f860048036038101906108f39190614193565b611da9565b6040516109059190613f55565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190614193565b611dc9565b604051610942919061408e565b60405180910390f35b34801561095757600080fd5b50610960611e12565b60405161096d919061408e565b60405180910390f35b34801561098257600080fd5b5061098b611e18565b604051610998919061408e565b60405180910390f35b3480156109ad57600080fd5b506109b6611e1e565b6040516109c3919061408e565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906140d6565b611e24565b005b348015610a0157600080fd5b50610a0a611ec7565b604051610a17919061408e565b60405180910390f35b348015610a2c57600080fd5b50610a476004803603810190610a429190614193565b611ecd565b604051610a549190613f55565b60405180910390f35b348015610a6957600080fd5b50610a72611eed565b604051610a7f9190613dec565b60405180910390f35b348015610a9457600080fd5b50610a9d611f7f565b604051610aaa919061408e565b60405180910390f35b348015610abf57600080fd5b50610ac8611f89565b604051610ad5919061408e565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b009190613efa565b611f8f565b604051610b129190613f55565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d9190613f9c565b61205c565b005b348015610b5057600080fd5b50610b596120c1565b604051610b66919061408e565b60405180910390f35b348015610b7b57600080fd5b50610b966004803603810190610b919190613efa565b6120c7565b604051610ba39190613f55565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce9190614193565b6120e6565b005b348015610be157600080fd5b50610bea612188565b604051610bf7919061408e565b60405180910390f35b348015610c0c57600080fd5b50610c276004803603810190610c229190613e49565b61218e565b005b348015610c3557600080fd5b50610c3e612221565b604051610c4b919061408e565b60405180910390f35b348015610c6057600080fd5b50610c7b6004803603810190610c769190613f9c565b612227565b005b348015610c8957600080fd5b50610c926122c3565b604051610c9f919061408e565b60405180910390f35b348015610cb457600080fd5b50610cbd6122c9565b604051610cca9190614178565b60405180910390f35b348015610cdf57600080fd5b50610ce86122ef565b604051610cf5919061408e565b60405180910390f35b348015610d0a57600080fd5b50610d256004803603810190610d209190614193565b6122f5565b604051610d329190613f55565b60405180910390f35b348015610d4757600080fd5b50610d50612315565b604051610d5d919061408e565b60405180910390f35b348015610d7257600080fd5b50610d7b61231b565b604051610d889190613fea565b60405180910390f35b348015610d9d57600080fd5b50610da6612341565b604051610db39190613f55565b60405180910390f35b348015610dc857600080fd5b50610dd1612354565b604051610dde919061408e565b60405180910390f35b348015610df357600080fd5b50610e0e6004803603810190610e0991906141f7565b61235a565b604051610e1b919061408e565b60405180910390f35b348015610e3057600080fd5b50610e4b6004803603810190610e4691906140a9565b6123e1565b005b348015610e5957600080fd5b50610e746004803603810190610e6f91906140d6565b612433565b005b348015610e8257600080fd5b50610e9d6004803603810190610e989190614193565b6124d6565b005b348015610eab57600080fd5b50610eb4612579565b604051610ec1919061408e565b60405180910390f35b348015610ed657600080fd5b50610ef16004803603810190610eec91906140a9565b61257f565b005b348015610eff57600080fd5b50610f1a6004803603810190610f159190614263565b6125d1565b005b348015610f2857600080fd5b50610f436004803603810190610f3e91906140d6565b6126ea565b005b348015610f5157600080fd5b50610f5a61278d565b604051610f679190613f55565b60405180910390f35b348015610f7c57600080fd5b50610f856127a0565b604051610f929190613f55565b60405180910390f35b606060028054610faa906142bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd6906142bf565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b5050505050905090565b61103633612811565b611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c9061433c565b60405180910390fd5b82600f8190555081601081905550806011819055506110b56011546110a7601054600f546127b390919063ffffffff16565b6127b390919063ffffffff16565b601681905550505050565b60006110d46110cd612867565b848461286f565b6001905092915050565b6110e7336115f0565b611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906143a8565b60405180910390fd5b80601d60186101000a81548160ff021916908315150217905550601d60189054906101000a900460ff161561115d5743601f819055505b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b6111bf33612811565b6111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f59061433c565b60405180910390fd5b82600c8190555081600d8190555080600e8190555061123e600e54611230600d54600c546127b390919063ffffffff16565b6127b390919063ffffffff16565b601581905550505050565b61125233612811565b611291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112889061433c565b60405180910390fd5b6000479050600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846112e091906143f7565b6112ea9190614468565b9081150290604051600060405180830381858888f19350505050158015611315573d6000803e3d6000fd5b505050565b61132333612811565b611362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113599061433c565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006113ca848484612a38565b5061148c846113d7612867565b61148785604051806060016040528060288152602001614d0360289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061143d612867565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131f79092919063ffffffff16565b61286f565b600190509392505050565b6114a033612811565b6114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d69061433c565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061155f61154e7f0000000000000000000000000000000000000000000000000000000000000000611dc9565b60185461325b90919063ffffffff16565b905090565b61156d33612811565b6115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061433c565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600460009054906101000a900460ff16905090565b600061170961166d612867565b84611704856007600061167e612867565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b61286f565b6001905092915050565b61171c33612811565b61175b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117529061433c565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b6117a133612811565b6117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d79061433c565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60125481565b6000611855336115f0565b611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b906143a8565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190891906144ae565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199391906144ae565b6040518363ffffffff1660e01b81526004016119b09291906144db565b602060405180830381865afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f191906144ae565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b84578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9691906144ae565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2191906144ae565b6040518363ffffffff1660e01b8152600401611b3e9291906144db565b6020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8191906144ae565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60135481565b611d0f33612811565b611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d459061433c565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601e6020528060005260406000206000915054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b611e2d336115f0565b611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906143a8565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b606060038054611efc906142bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f28906142bf565b8015611f755780601f10611f4a57610100808354040283529160200191611f75565b820191906000526020600020905b815481529060010190602001808311611f5857829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b6000612052611f9c612867565b8461204d85604051806060016040528060258152602001614d2b6025913960076000611fc6612867565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131f79092919063ffffffff16565b61286f565b6001905092915050565b612065336115f0565b6120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b906143a8565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60145481565b60006120db6120d4612867565b8484612a38565b506001905092915050565b6120ef336115f0565b61212e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612125906143a8565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601f5481565b61219733612811565b6121d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cd9061433c565b60405180910390fd5b8260128190555081601381905550806014819055506122166014546122086013546012546127b390919063ffffffff16565b6127b390919063ffffffff16565b601781905550505050565b600e5481565b612230336115f0565b61226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906143a8565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122b89190613f55565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b60115481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123ea33612811565b612429576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124209061433c565b60405180910390fd5b8060198190555050565b61243c33612811565b61247b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124729061433c565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6124df336115f0565b61251e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612515906143a8565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b61258833612811565b6125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be9061433c565b60405180910390fd5b80601a8190555050565b6125da336115f0565b612619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612610906143a8565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516126df9190614525565b60405180910390a150565b6126f333612811565b612732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127299061433c565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b601d60189054906101000a900460ff1681565b60008082846127c29190614540565b905083811015612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe906145c0565b60405180910390fd5b8091505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d590614652565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361294d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612944906146e4565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a2b919061408e565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9f90614776565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90614808565b60405180910390fd5b601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bbb5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190614874565b60405180910390fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c9e5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf357601d60189054906101000a900460ff16612cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce9906148e0565b60405180910390fd5b5b601d60149054906101000a900460ff1615612d1a57612d138484846132a5565b90506131f0565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dbe5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0957601954821115612e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dff90614972565b60405180910390fd5b5b6000612e1430611dc9565b90506000601b548210159050808015612e3a5750601d60149054906101000a900460ff16155b8015612e905750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ea85750601d60159054906101000a900460ff165b15612ed257601d60169054906101000a900460ff1615612ec857601b5491505b612ed182613478565b5b612f5b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131f79092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130415750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61305557613050878787613669565b613057565b845b9050601d60179054906101000a900460ff1680156130bf5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130ee57601a546130e2826130d489611dc9565b6127b390919063ffffffff16565b11156130ed57600080fd5b5b61314081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131e0919061408e565b60405180910390a3600193505050505b9392505050565b600083831115829061323f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132369190613dec565b60405180910390fd5b506000838561324e9190614992565b9050809150509392505050565b600061329d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131f7565b905092915050565b6000613330826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131f79092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133c582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613465919061408e565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006134d160026134c36017546134b56012548761389090919063ffffffff16565b61390a90919063ffffffff16565b61390a90919063ffffffff16565b905060006134e8828461325b90919063ffffffff16565b90506134f381613954565b60004790506000613524613513600260125461390a90919063ffffffff16565b60175461325b90919063ffffffff16565b905060006135626002613554846135466012548861389090919063ffffffff16565b61390a90919063ffffffff16565b61390a90919063ffffffff16565b9050600061358d8361357f6014548761389090919063ffffffff16565b61390a90919063ffffffff16565b905060006135b6826135a8858861325b90919063ffffffff16565b61325b90919063ffffffff16565b905060008111156135ee576135ed600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bd0565b5b600082111561362457613623600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613bd0565b5b6000831180156136345750600087115b15613644576136438784613c1b565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136f1576136ea60646136dc6015548661389090919063ffffffff16565b61390a90919063ffffffff16565b905061376f565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561376e5761376b606461375d6016548661389090919063ffffffff16565b61390a90919063ffffffff16565b90505b5b6000811115613873576137ca81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161386a919061408e565b60405180910390a35b613886818461325b90919063ffffffff16565b9150509392505050565b60008083036138a25760009050613904565b600082846138b091906143f7565b90508284826138bf9190614468565b146138ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f690614a38565b60405180910390fd5b809150505b92915050565b600061394c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cf9565b905092915050565b6000600267ffffffffffffffff81111561397157613970614a58565b5b60405190808252806020026020018201604052801561399f5781602001602082028036833780820191505090505b50905030816000815181106139b7576139b6614a87565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8291906144ae565b81600181518110613a9657613a95614a87565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613afd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461286f565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b61959493929190614baf565b600060405180830381600087803b158015613b7b57600080fd5b505af1158015613b8f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613bc4929190614c09565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c16573d6000803e3d6000fd5b505050565b613c4830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461286f565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008033426040518863ffffffff1660e01b8152600401613caf96959493929190614c39565b60606040518083038185885af1158015613ccd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cf29190614caf565b5050505050565b60008083118290613d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d379190613dec565b60405180910390fd5b5060008385613d4f9190614468565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d96578082015181840152602081019050613d7b565b60008484015250505050565b6000601f19601f8301169050919050565b6000613dbe82613d5c565b613dc88185613d67565b9350613dd8818560208601613d78565b613de181613da2565b840191505092915050565b60006020820190508181036000830152613e068184613db3565b905092915050565b600080fd5b6000819050919050565b613e2681613e13565b8114613e3157600080fd5b50565b600081359050613e4381613e1d565b92915050565b600080600060608486031215613e6257613e61613e0e565b5b6000613e7086828701613e34565b9350506020613e8186828701613e34565b9250506040613e9286828701613e34565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ec782613e9c565b9050919050565b613ed781613ebc565b8114613ee257600080fd5b50565b600081359050613ef481613ece565b92915050565b60008060408385031215613f1157613f10613e0e565b5b6000613f1f85828601613ee5565b9250506020613f3085828601613e34565b9150509250929050565b60008115159050919050565b613f4f81613f3a565b82525050565b6000602082019050613f6a6000830184613f46565b92915050565b613f7981613f3a565b8114613f8457600080fd5b50565b600081359050613f9681613f70565b92915050565b600060208284031215613fb257613fb1613e0e565b5b6000613fc084828501613f87565b91505092915050565b6000613fd482613e9c565b9050919050565b613fe481613fc9565b82525050565b6000602082019050613fff6000830184613fdb565b92915050565b6000819050919050565b600061402a61402561402084613e9c565b614005565b613e9c565b9050919050565b600061403c8261400f565b9050919050565b600061404e82614031565b9050919050565b61405e81614043565b82525050565b60006020820190506140796000830184614055565b92915050565b61408881613e13565b82525050565b60006020820190506140a3600083018461407f565b92915050565b6000602082840312156140bf576140be613e0e565b5b60006140cd84828501613e34565b91505092915050565b600080604083850312156140ed576140ec613e0e565b5b60006140fb85828601613ee5565b925050602061410c85828601613f87565b9150509250929050565b60008060006060848603121561412f5761412e613e0e565b5b600061413d86828701613ee5565b935050602061414e86828701613ee5565b925050604061415f86828701613e34565b9150509250925092565b61417281613ebc565b82525050565b600060208201905061418d6000830184614169565b92915050565b6000602082840312156141a9576141a8613e0e565b5b60006141b784828501613ee5565b91505092915050565b600060ff82169050919050565b6141d6816141c0565b82525050565b60006020820190506141f160008301846141cd565b92915050565b6000806040838503121561420e5761420d613e0e565b5b600061421c85828601613ee5565b925050602061422d85828601613ee5565b9150509250929050565b61424081613fc9565b811461424b57600080fd5b50565b60008135905061425d81614237565b92915050565b60006020828403121561427957614278613e0e565b5b60006142878482850161424e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142d757607f821691505b6020821081036142ea576142e9614290565b5b50919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614326600b83613d67565b9150614331826142f0565b602082019050919050565b6000602082019050818103600083015261435581614319565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614392600683613d67565b915061439d8261435c565b602082019050919050565b600060208201905081810360008301526143c181614385565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061440282613e13565b915061440d83613e13565b925082820261441b81613e13565b91508282048414831517614432576144316143c8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061447382613e13565b915061447e83613e13565b92508261448e5761448d614439565b5b828204905092915050565b6000815190506144a881613ece565b92915050565b6000602082840312156144c4576144c3613e0e565b5b60006144d284828501614499565b91505092915050565b60006040820190506144f06000830185614169565b6144fd6020830184614169565b9392505050565b600061450f82614031565b9050919050565b61451f81614504565b82525050565b600060208201905061453a6000830184614516565b92915050565b600061454b82613e13565b915061455683613e13565b925082820190508082111561456e5761456d6143c8565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006145aa601b83613d67565b91506145b582614574565b602082019050919050565b600060208201905081810360008301526145d98161459d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061463c602483613d67565b9150614647826145e0565b604082019050919050565b6000602082019050818103600083015261466b8161462f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146ce602283613d67565b91506146d982614672565b604082019050919050565b600060208201905081810360008301526146fd816146c1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614760602583613d67565b915061476b82614704565b604082019050919050565b6000602082019050818103600083015261478f81614753565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147f2602383613d67565b91506147fd82614796565b604082019050919050565b60006020820190508181036000830152614821816147e5565b9050919050565b7f4163636f756e7420697320626c61636b6c697374656400000000000000000000600082015250565b600061485e601683613d67565b915061486982614828565b602082019050919050565b6000602082019050818103600083015261488d81614851565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b60006148ca601483613d67565b91506148d582614894565b602082019050919050565b600060208201905081810360008301526148f9816148bd565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061495c602883613d67565b915061496782614900565b604082019050919050565b6000602082019050818103600083015261498b8161494f565b9050919050565b600061499d82613e13565b91506149a883613e13565b92508282039050818111156149c0576149bf6143c8565b5b92915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a22602183613d67565b9150614a2d826149c6565b604082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614adb614ad6614ad184614ab6565b614005565b613e13565b9050919050565b614aeb81614ac0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b2681613ebc565b82525050565b6000614b388383614b1d565b60208301905092915050565b6000602082019050919050565b6000614b5c82614af1565b614b668185614afc565b9350614b7183614b0d565b8060005b83811015614ba2578151614b898882614b2c565b9750614b9483614b44565b925050600181019050614b75565b5085935050505092915050565b600060a082019050614bc4600083018861407f565b614bd16020830187614ae2565b8181036040830152614be38186614b51565b9050614bf26060830185614169565b614bff608083018461407f565b9695505050505050565b6000604082019050614c1e600083018561407f565b8181036020830152614c308184614b51565b90509392505050565b600060c082019050614c4e6000830189614169565b614c5b602083018861407f565b614c686040830187614ae2565b614c756060830186614ae2565b614c826080830185614169565b614c8f60a083018461407f565b979650505050505050565b600081519050614ca981613e1d565b92915050565b600080600060608486031215614cc857614cc7613e0e565b5b6000614cd686828701614c9a565b9350506020614ce786828701614c9a565b9250506040614cf886828701614c9a565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ee86818c562e5c3970bd50fa7a8eb151af7d4d4e385c4e74a146cf35c39e9e464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106103d25760003560e01c8063844d591c116101fd578063c816841b11610118578063ec28438a116100ab578063f1d5f5171161007a578063f1d5f51714610eca578063f2fde38b14610ef3578063f84ba65d14610f1c578063f872858a14610f45578063ffb54a9914610f70576103d9565b8063ec28438a14610e24578063ef422a1814610e4d578063f0b37c0414610e76578063f0cd1dac14610e9f576103d9565b8063d158272d116100e7578063d158272d14610d66578063da00097d14610d91578063dc44b6a014610dbc578063dd62ed3e14610de7576103d9565b8063c816841b14610ca8578063c860795214610cd3578063c867d60b14610cfe578063cab0347114610d3b576103d9565b8063a83f53a711610190578063c2d4640e1161015f578063c2d4640e14610c00578063c469b6dd14610c29578063c49b9a8014610c54578063c5d2418914610c7d576103d9565b8063a83f53a714610b44578063a9059cbb14610b6f578063b6a5d7de14610bac578063bf56b37114610bd5576103d9565b8063a073d37f116101cc578063a073d37f14610a88578063a08e671f14610ab3578063a457c2d714610ade578063a5d69d1f14610b1b576103d9565b8063844d591c146109cc57806388790a68146109f55780638b42507f14610a2057806395d89b4114610a5d576103d9565b8063313ce567116102ed5780635881f3ef1161028057806370a082311161024f57806370a082311461090e5780637d1db4a51461094b578063807c2d9c1461097657806382eefb43146109a1576103d9565b80635881f3ef1461084057806361a23c691461087d57806368092bd9146108a85780636c9bb93b146108d1576103d9565b80634a74bb02116102bc5780634a74bb02146107845780634cb80fd5146107af5780635342acb4146107d857806357a5802f14610815576103d9565b8063313ce567146106b657806339509351146106e15780633b97084a1461071e5780633ecad27114610747576103d9565b80631da1db5e1161036557806327c8f8351161033457806327c8f835146105fa5780632b112e49146106255780632c4b2334146106505780632f54bf6e14610679576103d9565b80631da1db5e146105425780632198cf6c1461056b57806323b872dd146105945780632563ae83146105d1576103d9565b80631245e347116103a15780631245e347146104985780631694505e146104c357806318160ddd146104ee5780631870517a14610519576103d9565b806306fdde03146103de5780630873321414610409578063095ea7b3146104325780630d2959801461046f576103d9565b366103d957005b600080fd5b3480156103ea57600080fd5b506103f3610f9b565b6040516104009190613dec565b60405180910390f35b34801561041557600080fd5b50610430600480360381019061042b9190613e49565b61102d565b005b34801561043e57600080fd5b5061045960048036038101906104549190613efa565b6110c0565b6040516104669190613f55565b60405180910390f35b34801561047b57600080fd5b5061049660048036038101906104919190613f9c565b6110de565b005b3480156104a457600080fd5b506104ad611160565b6040516104ba9190613fea565b60405180910390f35b3480156104cf57600080fd5b506104d8611186565b6040516104e59190614064565b60405180910390f35b3480156104fa57600080fd5b506105036111ac565b604051610510919061408e565b60405180910390f35b34801561052557600080fd5b50610540600480360381019061053b9190613e49565b6111b6565b005b34801561054e57600080fd5b50610569600480360381019061056491906140a9565b611249565b005b34801561057757600080fd5b50610592600480360381019061058d91906140d6565b61131a565b005b3480156105a057600080fd5b506105bb60048036038101906105b69190614116565b6113bd565b6040516105c89190613f55565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190613f9c565b611497565b005b34801561060657600080fd5b5061060f6114fc565b60405161061c9190614178565b60405180910390f35b34801561063157600080fd5b5061063a611520565b604051610647919061408e565b60405180910390f35b34801561065c57600080fd5b5061067760048036038101906106729190614193565b611564565b005b34801561068557600080fd5b506106a0600480360381019061069b9190614193565b6115f0565b6040516106ad9190613f55565b60405180910390f35b3480156106c257600080fd5b506106cb611649565b6040516106d891906141dc565b60405180910390f35b3480156106ed57600080fd5b5061070860048036038101906107039190613efa565b611660565b6040516107159190613f55565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906140a9565b611713565b005b34801561075357600080fd5b5061076e60048036038101906107699190614193565b611765565b60405161077b9190613f55565b60405180910390f35b34801561079057600080fd5b50610799611785565b6040516107a69190613f55565b60405180910390f35b3480156107bb57600080fd5b506107d660048036038101906107d19190614193565b611798565b005b3480156107e457600080fd5b506107ff60048036038101906107fa9190614193565b611824565b60405161080c9190613f55565b60405180910390f35b34801561082157600080fd5b5061082a611844565b604051610837919061408e565b60405180910390f35b34801561084c57600080fd5b5061086760048036038101906108629190614193565b61184a565b6040516108749190614178565b60405180910390f35b34801561088957600080fd5b50610892611d00565b60405161089f919061408e565b60405180910390f35b3480156108b457600080fd5b506108cf60048036038101906108ca91906140d6565b611d06565b005b3480156108dd57600080fd5b506108f860048036038101906108f39190614193565b611da9565b6040516109059190613f55565b60405180910390f35b34801561091a57600080fd5b5061093560048036038101906109309190614193565b611dc9565b604051610942919061408e565b60405180910390f35b34801561095757600080fd5b50610960611e12565b60405161096d919061408e565b60405180910390f35b34801561098257600080fd5b5061098b611e18565b604051610998919061408e565b60405180910390f35b3480156109ad57600080fd5b506109b6611e1e565b6040516109c3919061408e565b60405180910390f35b3480156109d857600080fd5b506109f360048036038101906109ee91906140d6565b611e24565b005b348015610a0157600080fd5b50610a0a611ec7565b604051610a17919061408e565b60405180910390f35b348015610a2c57600080fd5b50610a476004803603810190610a429190614193565b611ecd565b604051610a549190613f55565b60405180910390f35b348015610a6957600080fd5b50610a72611eed565b604051610a7f9190613dec565b60405180910390f35b348015610a9457600080fd5b50610a9d611f7f565b604051610aaa919061408e565b60405180910390f35b348015610abf57600080fd5b50610ac8611f89565b604051610ad5919061408e565b60405180910390f35b348015610aea57600080fd5b50610b056004803603810190610b009190613efa565b611f8f565b604051610b129190613f55565b60405180910390f35b348015610b2757600080fd5b50610b426004803603810190610b3d9190613f9c565b61205c565b005b348015610b5057600080fd5b50610b596120c1565b604051610b66919061408e565b60405180910390f35b348015610b7b57600080fd5b50610b966004803603810190610b919190613efa565b6120c7565b604051610ba39190613f55565b60405180910390f35b348015610bb857600080fd5b50610bd36004803603810190610bce9190614193565b6120e6565b005b348015610be157600080fd5b50610bea612188565b604051610bf7919061408e565b60405180910390f35b348015610c0c57600080fd5b50610c276004803603810190610c229190613e49565b61218e565b005b348015610c3557600080fd5b50610c3e612221565b604051610c4b919061408e565b60405180910390f35b348015610c6057600080fd5b50610c7b6004803603810190610c769190613f9c565b612227565b005b348015610c8957600080fd5b50610c926122c3565b604051610c9f919061408e565b60405180910390f35b348015610cb457600080fd5b50610cbd6122c9565b604051610cca9190614178565b60405180910390f35b348015610cdf57600080fd5b50610ce86122ef565b604051610cf5919061408e565b60405180910390f35b348015610d0a57600080fd5b50610d256004803603810190610d209190614193565b6122f5565b604051610d329190613f55565b60405180910390f35b348015610d4757600080fd5b50610d50612315565b604051610d5d919061408e565b60405180910390f35b348015610d7257600080fd5b50610d7b61231b565b604051610d889190613fea565b60405180910390f35b348015610d9d57600080fd5b50610da6612341565b604051610db39190613f55565b60405180910390f35b348015610dc857600080fd5b50610dd1612354565b604051610dde919061408e565b60405180910390f35b348015610df357600080fd5b50610e0e6004803603810190610e0991906141f7565b61235a565b604051610e1b919061408e565b60405180910390f35b348015610e3057600080fd5b50610e4b6004803603810190610e4691906140a9565b6123e1565b005b348015610e5957600080fd5b50610e746004803603810190610e6f91906140d6565b612433565b005b348015610e8257600080fd5b50610e9d6004803603810190610e989190614193565b6124d6565b005b348015610eab57600080fd5b50610eb4612579565b604051610ec1919061408e565b60405180910390f35b348015610ed657600080fd5b50610ef16004803603810190610eec91906140a9565b61257f565b005b348015610eff57600080fd5b50610f1a6004803603810190610f159190614263565b6125d1565b005b348015610f2857600080fd5b50610f436004803603810190610f3e91906140d6565b6126ea565b005b348015610f5157600080fd5b50610f5a61278d565b604051610f679190613f55565b60405180910390f35b348015610f7c57600080fd5b50610f856127a0565b604051610f929190613f55565b60405180910390f35b606060028054610faa906142bf565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd6906142bf565b80156110235780601f10610ff857610100808354040283529160200191611023565b820191906000526020600020905b81548152906001019060200180831161100657829003601f168201915b5050505050905090565b61103633612811565b611075576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106c9061433c565b60405180910390fd5b82600f8190555081601081905550806011819055506110b56011546110a7601054600f546127b390919063ffffffff16565b6127b390919063ffffffff16565b601681905550505050565b60006110d46110cd612867565b848461286f565b6001905092915050565b6110e7336115f0565b611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906143a8565b60405180910390fd5b80601d60186101000a81548160ff021916908315150217905550601d60189054906101000a900460ff161561115d5743601f819055505b50565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b6111bf33612811565b6111fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f59061433c565b60405180910390fd5b82600c8190555081600d8190555080600e8190555061123e600e54611230600d54600c546127b390919063ffffffff16565b6127b390919063ffffffff16565b601581905550505050565b61125233612811565b611291576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112889061433c565b60405180910390fd5b6000479050600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc606484846112e091906143f7565b6112ea9190614468565b9081150290604051600060405180830381858888f19350505050158015611315573d6000803e3d6000fd5b505050565b61132333612811565b611362576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113599061433c565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006113ca848484612a38565b5061148c846113d7612867565b61148785604051806060016040528060288152602001614d0360289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061143d612867565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131f79092919063ffffffff16565b61286f565b600190509392505050565b6114a033612811565b6114df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d69061433c565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b600061155f61154e7f000000000000000000000000000000000000000000000000000000000000dead611dc9565b60185461325b90919063ffffffff16565b905090565b61156d33612811565b6115ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a39061433c565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b6000600460009054906101000a900460ff16905090565b600061170961166d612867565b84611704856007600061167e612867565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b61286f565b6001905092915050565b61171c33612811565b61175b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117529061433c565b60405180910390fd5b80601b8190555050565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b6117a133612811565b6117e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d79061433c565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60125481565b6000611855336115f0565b611894576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188b906143a8565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156118e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061190891906144ae565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561196f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199391906144ae565b6040518363ffffffff1660e01b81526004016119b09291906144db565b602060405180830381865afa1580156119cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f191906144ae565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b84578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a9691906144ae565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611afd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b2191906144ae565b6040518363ffffffff1660e01b8152600401611b3e9291906144db565b6020604051808303816000875af1158015611b5d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8191906144ae565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b60135481565b611d0f33612811565b611d4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d459061433c565b60405180910390fd5b80601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601e6020528060005260406000206000915054906101000a900460ff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60195481565b601a5481565b60165481565b611e2d336115f0565b611e6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e63906143a8565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600f5481565b600a6020528060005260406000206000915054906101000a900460ff1681565b606060038054611efc906142bf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f28906142bf565b8015611f755780601f10611f4a57610100808354040283529160200191611f75565b820191906000526020600020905b815481529060010190602001808311611f5857829003601f168201915b5050505050905090565b6000601b54905090565b60175481565b6000612052611f9c612867565b8461204d85604051806060016040528060258152602001614d2b6025913960076000611fc6612867565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131f79092919063ffffffff16565b61286f565b6001905092915050565b612065336115f0565b6120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b906143a8565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60145481565b60006120db6120d4612867565b8484612a38565b506001905092915050565b6120ef336115f0565b61212e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612125906143a8565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601f5481565b61219733612811565b6121d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cd9061433c565b60405180910390fd5b8260128190555081601381905550806014819055506122166014546122086013546012546127b390919063ffffffff16565b6127b390919063ffffffff16565b601781905550505050565b600e5481565b612230336115f0565b61226f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612266906143a8565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516122b89190613f55565b60405180910390a150565b600d5481565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b60096020528060005260406000206000915054906101000a900460ff1681565b60115481565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123ea33612811565b612429576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124209061433c565b60405180910390fd5b8060198190555050565b61243c33612811565b61247b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124729061433c565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6124df336115f0565b61251e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612515906143a8565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60155481565b61258833612811565b6125c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125be9061433c565b60405180910390fd5b80601a8190555050565b6125da336115f0565b612619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612610906143a8565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516126df9190614525565b60405180910390a150565b6126f333612811565b612732576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127299061433c565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b601d60189054906101000a900460ff1681565b60008082846127c29190614540565b905083811015612807576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127fe906145c0565b60405180910390fd5b8091505092915050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d590614652565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361294d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612944906146e4565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612a2b919061408e565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9f90614776565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b0e90614808565b60405180910390fd5b601e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612bbb5750601e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf190614874565b60405180910390fd5b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c9e5750600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cf357601d60189054906101000a900460ff16612cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce9906148e0565b60405180910390fd5b5b601d60149054906101000a900460ff1615612d1a57612d138484846132a5565b90506131f0565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612dbe5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e0957601954821115612e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dff90614972565b60405180910390fd5b5b6000612e1430611dc9565b90506000601b548210159050808015612e3a5750601d60149054906101000a900460ff16155b8015612e905750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612ea85750601d60159054906101000a900460ff165b15612ed257601d60169054906101000a900460ff1615612ec857601b5491505b612ed182613478565b5b612f5b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131f79092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130415750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61305557613050878787613669565b613057565b845b9050601d60179054906101000a900460ff1680156130bf5750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130ee57601a546130e2826130d489611dc9565b6127b390919063ffffffff16565b11156130ed57600080fd5b5b61314081600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516131e0919061408e565b60405180910390a3600193505050505b9392505050565b600083831115829061323f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132369190613dec565b60405180910390fd5b506000838561324e9190614992565b9050809150509392505050565b600061329d83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506131f7565b905092915050565b6000613330826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131f79092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506133c582600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613465919061408e565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff02191690831515021790555060006134d160026134c36017546134b56012548761389090919063ffffffff16565b61390a90919063ffffffff16565b61390a90919063ffffffff16565b905060006134e8828461325b90919063ffffffff16565b90506134f381613954565b60004790506000613524613513600260125461390a90919063ffffffff16565b60175461325b90919063ffffffff16565b905060006135626002613554846135466012548861389090919063ffffffff16565b61390a90919063ffffffff16565b61390a90919063ffffffff16565b9050600061358d8361357f6014548761389090919063ffffffff16565b61390a90919063ffffffff16565b905060006135b6826135a8858861325b90919063ffffffff16565b61325b90919063ffffffff16565b905060008111156135ee576135ed600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613bd0565b5b600082111561362457613623600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613bd0565b5b6000831180156136345750600087115b15613644576136438784613c1b565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136f1576136ea60646136dc6015548661389090919063ffffffff16565b61390a90919063ffffffff16565b905061376f565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561376e5761376b606461375d6016548661389090919063ffffffff16565b61390a90919063ffffffff16565b90505b5b6000811115613873576137ca81600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546127b390919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161386a919061408e565b60405180910390a35b613886818461325b90919063ffffffff16565b9150509392505050565b60008083036138a25760009050613904565b600082846138b091906143f7565b90508284826138bf9190614468565b146138ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138f690614a38565b60405180910390fd5b809150505b92915050565b600061394c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613cf9565b905092915050565b6000600267ffffffffffffffff81111561397157613970614a58565b5b60405190808252806020026020018201604052801561399f5781602001602082028036833780820191505090505b50905030816000815181106139b7576139b6614a87565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a8291906144ae565b81600181518110613a9657613a95614a87565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613afd30601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461286f565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613b61959493929190614baf565b600060405180830381600087803b158015613b7b57600080fd5b505af1158015613b8f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613bc4929190614c09565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613c16573d6000803e3d6000fd5b505050565b613c4830601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461286f565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008033426040518863ffffffff1660e01b8152600401613caf96959493929190614c39565b60606040518083038185885af1158015613ccd573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613cf29190614caf565b5050505050565b60008083118290613d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d379190613dec565b60405180910390fd5b5060008385613d4f9190614468565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d96578082015181840152602081019050613d7b565b60008484015250505050565b6000601f19601f8301169050919050565b6000613dbe82613d5c565b613dc88185613d67565b9350613dd8818560208601613d78565b613de181613da2565b840191505092915050565b60006020820190508181036000830152613e068184613db3565b905092915050565b600080fd5b6000819050919050565b613e2681613e13565b8114613e3157600080fd5b50565b600081359050613e4381613e1d565b92915050565b600080600060608486031215613e6257613e61613e0e565b5b6000613e7086828701613e34565b9350506020613e8186828701613e34565b9250506040613e9286828701613e34565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ec782613e9c565b9050919050565b613ed781613ebc565b8114613ee257600080fd5b50565b600081359050613ef481613ece565b92915050565b60008060408385031215613f1157613f10613e0e565b5b6000613f1f85828601613ee5565b9250506020613f3085828601613e34565b9150509250929050565b60008115159050919050565b613f4f81613f3a565b82525050565b6000602082019050613f6a6000830184613f46565b92915050565b613f7981613f3a565b8114613f8457600080fd5b50565b600081359050613f9681613f70565b92915050565b600060208284031215613fb257613fb1613e0e565b5b6000613fc084828501613f87565b91505092915050565b6000613fd482613e9c565b9050919050565b613fe481613fc9565b82525050565b6000602082019050613fff6000830184613fdb565b92915050565b6000819050919050565b600061402a61402561402084613e9c565b614005565b613e9c565b9050919050565b600061403c8261400f565b9050919050565b600061404e82614031565b9050919050565b61405e81614043565b82525050565b60006020820190506140796000830184614055565b92915050565b61408881613e13565b82525050565b60006020820190506140a3600083018461407f565b92915050565b6000602082840312156140bf576140be613e0e565b5b60006140cd84828501613e34565b91505092915050565b600080604083850312156140ed576140ec613e0e565b5b60006140fb85828601613ee5565b925050602061410c85828601613f87565b9150509250929050565b60008060006060848603121561412f5761412e613e0e565b5b600061413d86828701613ee5565b935050602061414e86828701613ee5565b925050604061415f86828701613e34565b9150509250925092565b61417281613ebc565b82525050565b600060208201905061418d6000830184614169565b92915050565b6000602082840312156141a9576141a8613e0e565b5b60006141b784828501613ee5565b91505092915050565b600060ff82169050919050565b6141d6816141c0565b82525050565b60006020820190506141f160008301846141cd565b92915050565b6000806040838503121561420e5761420d613e0e565b5b600061421c85828601613ee5565b925050602061422d85828601613ee5565b9150509250929050565b61424081613fc9565b811461424b57600080fd5b50565b60008135905061425d81614237565b92915050565b60006020828403121561427957614278613e0e565b5b60006142878482850161424e565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806142d757607f821691505b6020821081036142ea576142e9614290565b5b50919050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000614326600b83613d67565b9150614331826142f0565b602082019050919050565b6000602082019050818103600083015261435581614319565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614392600683613d67565b915061439d8261435c565b602082019050919050565b600060208201905081810360008301526143c181614385565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061440282613e13565b915061440d83613e13565b925082820261441b81613e13565b91508282048414831517614432576144316143c8565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061447382613e13565b915061447e83613e13565b92508261448e5761448d614439565b5b828204905092915050565b6000815190506144a881613ece565b92915050565b6000602082840312156144c4576144c3613e0e565b5b60006144d284828501614499565b91505092915050565b60006040820190506144f06000830185614169565b6144fd6020830184614169565b9392505050565b600061450f82614031565b9050919050565b61451f81614504565b82525050565b600060208201905061453a6000830184614516565b92915050565b600061454b82613e13565b915061455683613e13565b925082820190508082111561456e5761456d6143c8565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006145aa601b83613d67565b91506145b582614574565b602082019050919050565b600060208201905081810360008301526145d98161459d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061463c602483613d67565b9150614647826145e0565b604082019050919050565b6000602082019050818103600083015261466b8161462f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006146ce602283613d67565b91506146d982614672565b604082019050919050565b600060208201905081810360008301526146fd816146c1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614760602583613d67565b915061476b82614704565b604082019050919050565b6000602082019050818103600083015261478f81614753565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006147f2602383613d67565b91506147fd82614796565b604082019050919050565b60006020820190508181036000830152614821816147e5565b9050919050565b7f4163636f756e7420697320626c61636b6c697374656400000000000000000000600082015250565b600061485e601683613d67565b915061486982614828565b602082019050919050565b6000602082019050818103600083015261488d81614851565b9050919050565b7f54726164696e67206e6f74206f70656e20796574000000000000000000000000600082015250565b60006148ca601483613d67565b91506148d582614894565b602082019050919050565b600060208201905081810360008301526148f9816148bd565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061495c602883613d67565b915061496782614900565b604082019050919050565b6000602082019050818103600083015261498b8161494f565b9050919050565b600061499d82613e13565b91506149a883613e13565b92508282039050818111156149c0576149bf6143c8565b5b92915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a22602183613d67565b9150614a2d826149c6565b604082019050919050565b60006020820190508181036000830152614a5181614a15565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000614adb614ad6614ad184614ab6565b614005565b613e13565b9050919050565b614aeb81614ac0565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614b2681613ebc565b82525050565b6000614b388383614b1d565b60208301905092915050565b6000602082019050919050565b6000614b5c82614af1565b614b668185614afc565b9350614b7183614b0d565b8060005b83811015614ba2578151614b898882614b2c565b9750614b9483614b44565b925050600181019050614b75565b5085935050505092915050565b600060a082019050614bc4600083018861407f565b614bd16020830187614ae2565b8181036040830152614be38186614b51565b9050614bf26060830185614169565b614bff608083018461407f565b9695505050505050565b6000604082019050614c1e600083018561407f565b8181036020830152614c308184614b51565b90509392505050565b600060c082019050614c4e6000830189614169565b614c5b602083018861407f565b614c686040830187614ae2565b614c756060830186614ae2565b614c826080830185614169565b614c8f60a083018461407f565b979650505050505050565b600081519050614ca981613e1d565b92915050565b600080600060608486031215614cc857614cc7613e0e565b5b6000614cd686828701614c9a565b9350506020614ce786828701614c9a565b9250506040614cf886828701614c9a565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201ee86818c562e5c3970bd50fa7a8eb151af7d4d4e385c4e74a146cf35c39e9e464736f6c63430008110033

Deployed Bytecode Sourcemap

15004:15735:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18826:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21395:340;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20120:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22135:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15383:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16694:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19103:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21055:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23935:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22558:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25251:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22436:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15489:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23665:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23213;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6552:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19012:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19489:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22813:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15881:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16809:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22944:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15710:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16185:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24167:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16226:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23090:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16988:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19211:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16502:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16577:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16350:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20634:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16056:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15826:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18917:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19992:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16394:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19715:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23528:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16268:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25076:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6231:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17043:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21747:357;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16019:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23349:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15977:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16742:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16100:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15767:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16144:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15256:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16856:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15935:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19338:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22318:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20911:136;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6401:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16307:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22702:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6948:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20771:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16908:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16950:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18826:83;18863:13;18896:5;18889:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18826:83;:::o;21395:340::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21538:15:::1;21518:17;:35;;;;21584:15;21564:17;:35;;;;21625:10;21610:12;:25;;;;21669:58;21714:12;;21669:40;21691:17;;21669;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;21648:18;:79;;;;21395:340:::0;;;:::o;20120:161::-;20195:4;20212:39;20221:12;:10;:12::i;:::-;20235:7;20244:6;20212:8;:39::i;:::-;20269:4;20262:11;;20120:161;;;;:::o;22135:171::-;5947:19;5955:10;5947:7;:19::i;:::-;5939:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22214:7:::1;22200:11;;:21;;;;;;;;;;;;;;;;;;22235:11;;;;;;;;;;;22232:67;;;22275:12;22262:10;:25;;;;22232:67;22135:171:::0;:::o;15383:94::-;;;;;;;;;;;;;:::o;16694:41::-;;;;;;;;;;;;;:::o;19103:100::-;19156:7;19183:12;;19176:19;;19103:100;:::o;21055:332::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21196:15:::1;21177:16;:34;;;;21241:15;21222:16;:34;;;;21281:10;21267:11;:24;;;;21324:55;21367:11;;21324:38;21345:16;;21324;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;21304:17;:75;;;;21055:332:::0;;;:::o;23935:220::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;24019:17:::1;24039:21;24019:41;;24079:22;;;;;;;;;;;24071:40;;:76;24143:3;24124:16;24112:9;:28;;;;:::i;:::-;:34;;;;:::i;:::-;24071:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;24008:147;23935:220:::0;:::o;22558:136::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22680:6:::1;22650:19;:27;22670:6;22650:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22558:136:::0;;:::o;25251:313::-;25349:4;25366:36;25376:6;25384:9;25395:6;25366:9;:36::i;:::-;;25413:121;25422:6;25430:12;:10;:12::i;:::-;25444:89;25482:6;25444:89;;;;;;;;;;;;;;;;;:11;:19;25456:6;25444:19;;;;;;;;;;;;;;;:33;25464:12;:10;:12::i;:::-;25444:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25413:8;:121::i;:::-;25552:4;25545:11;;25251:313;;;;;:::o;22436:114::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22534:8:::1;22515:16;;:27;;;;;;;;;;;;;;;;;;22436:114:::0;:::o;15489:81::-;;;:::o;23665:128::-;23718:7;23745:40;23762:22;23772:11;23762:9;:22::i;:::-;23745:12;;:16;;:40;;;;:::i;:::-;23738:47;;23665:128;:::o;23213:::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23322:10:::1;23294:17;;:39;;;;;;;;;;;;;;;;;;23213:128:::0;:::o;6552:103::-;6607:4;6642:5;;;;;;;;;;;6631:16;;:7;:16;;;6624:23;;6552:103;;;:::o;19012:83::-;19053:5;19078:9;;;;;;;;;;;19071:16;;19012:83;:::o;19489:218::-;19577:4;19594:83;19603:12;:10;:12::i;:::-;19617:7;19626:50;19665:10;19626:11;:25;19638:12;:10;:12::i;:::-;19626:25;;;;;;;;;;;;;;;:34;19652:7;19626:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19594:8;:83::i;:::-;19695:4;19688:11;;19489:218;;;;:::o;22813:123::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22920:8:::1;22894:23;:34;;;;22813:123:::0;:::o;15881:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;16809:40::-;;;;;;;;;;;;;:::o;22944:138::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23063:10:::1;23030:22;;:44;;;;;;;;;;;;;;;;;;22944:138:::0;:::o;15710:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;16185:34::-;;;;:::o;24167:807::-;24247:22;5947:19;5955:10;5947:7;:19::i;:::-;5939:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;24284:35:::1;24341:16;24284:74;;24407:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24389:53;;;24451:4;24458:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24389:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24372:110;;24524:1;24498:28;;:14;:28;;::::0;24495:225:::1;;24612:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24594:74;;;24677:4;24684:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24594:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24577:131;;24495:225;24746:14;24732:11;;:28;;;;;;;;;;;;;;;;;;24812:16;24794:15;;:34;;;;;;;;;;;;;;;;;;24910:4;24866:19;:41;24894:11;;;;;;;;;;;24866:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;24962:4;24925:12;:34;24946:11;;;;;;;;;;;24925:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;24271:703;24167:807:::0;;;:::o;16226:35::-;;;;:::o;23090:115::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;23192:5:::1;23169:14;:20;23184:4;23169:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;23090:115:::0;;:::o;16988:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;19211:119::-;19277:7;19304:9;:18;19314:7;19304:18;;;;;;;;;;;;;;;;19297:25;;19211:119;;;:::o;16502:47::-;;;;:::o;16577:45::-;;;;:::o;16350:37::-;;;;:::o;20634:129::-;5947:19;5955:10;5947:7;:19::i;:::-;5939:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20747:8:::1;20723:12;:21;20736:7;20723:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20634:129:::0;;:::o;16056:37::-;;;;:::o;15826:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;18917:87::-;18956:13;18989:7;18982:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18917:87;:::o;19992:120::-;20054:7;20081:23;;20074:30;;19992:120;:::o;16394:43::-;;;;:::o;19715:269::-;19808:4;19825:129;19834:12;:10;:12::i;:::-;19848:7;19857:96;19896:15;19857:96;;;;;;;;;;;;;;;;;:11;:25;19869:12;:10;:12::i;:::-;19857:25;;;;;;;;;;;;;;;:34;19883:7;19857:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19825:8;:129::i;:::-;19972:4;19965:11;;19715:269;;;;:::o;23528:125::-;5947:19;5955:10;5947:7;:19::i;:::-;5939:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23637:8:::1;23609:25;;:36;;;;;;;;;;;;;;;;;;23528:125:::0;:::o;16268:30::-;;;;:::o;25076:167::-;25154:4;25171:42;25181:12;:10;:12::i;:::-;25195:9;25206:6;25171:9;:42::i;:::-;;25231:4;25224:11;;25076:167;;;;:::o;6231:88::-;5947:19;5955:10;5947:7;:19::i;:::-;5939:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6307:4:::1;6291:8:::0;:13:::1;6300:3;6291:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;6231:88:::0;:::o;17043:29::-;;;;:::o;21747:357::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21905:17:::1;21887:15;:35;;;;21951:17;21933:15;:35;;;;21992:12;21979:10;:25;;;;22044:52;22085:10;;22044:36;22064:15;;22044;;:19;;:36;;;;:::i;:::-;:40;;:52;;;;:::i;:::-;22017:24;:79;;;;21747:357:::0;;;:::o;16019:30::-;;;;:::o;23349:171::-;5947:19;5955:10;5947:7;:19::i;:::-;5939:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23450:8:::1;23426:21;;:32;;;;;;;;;;;;;;;;;;23474:38;23503:8;23474:38;;;;;;:::i;:::-;;;;;;;;23349:171:::0;:::o;15977:35::-;;;;:::o;16742:26::-;;;;;;;;;;;;;:::o;16100:37::-;;;;:::o;15767:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;16144:32::-;;;;:::o;15256:99::-;;;;;;;;;;;;;:::o;16856:45::-;;;;;;;;;;;;;:::o;15935:35::-;;;;:::o;19338:143::-;19419:7;19446:11;:18;19458:5;19446:18;;;;;;;;;;;;;;;:27;19465:7;19446:27;;;;;;;;;;;;;;;;19439:34;;19338:143;;;;:::o;22318:110::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22409:11:::1;22394:12;:26;;;;22318:110:::0;:::o;20911:136::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;21031:8:::1;21002:17;:26;21020:7;21002:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20911:136:::0;;:::o;6401:91::-;5947:19;5955:10;5947:7;:19::i;:::-;5939:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;6479:5:::1;6463:8;:13;6472:3;6463:13;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;6401:91:::0;:::o;16307:36::-;;;;:::o;22702:103::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;22789:8:::1;22775:10;:22;;;;22702:103:::0;:::o;6948:167::-;5947:19;5955:10;5947:7;:19::i;:::-;5939:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;7032:3:::1;7024:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;7062:4;7046:8:::0;:13:::1;7055:3;7046:13;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;7082:25;7103:3;7082:25;;;;;;:::i;:::-;;;;;;;;6948:167:::0;:::o;20771:128::-;6116:24;6129:10;6116:12;:24::i;:::-;6108:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;20885:6:::1;20859:15;:23;20875:6;20859:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20771:128:::0;;:::o;16908:35::-;;;;;;;;;;;;;:::o;16950:31::-;;;;;;;;;;;;;:::o;1286:181::-;1344:7;1364:9;1380:1;1376;:5;;;;:::i;:::-;1364:17;;1405:1;1400;:6;;1392:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1458:1;1451:8;;;1286:181;;;;:::o;6726:103::-;6784:4;6808:8;:13;6817:3;6808:13;;;;;;;;;;;;;;;;;;;;;;;;;6801:20;;6726:103;;;:::o;218:115::-;271:15;314:10;299:26;;218:115;:::o;20289:337::-;20399:1;20382:19;;:5;:19;;;20374:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20480:1;20461:21;;:7;:21;;;20453:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20564:6;20534:11;:18;20546:5;20534:18;;;;;;;;;;;;;;;:27;20553:7;20534:27;;;;;;;;;;;;;;;:36;;;;20602:7;20586:32;;20595:5;20586:32;;;20611:6;20586:32;;;;;;:::i;:::-;;;;;;;;20289:337;;;:::o;25572:1932::-;25659:4;25704:1;25686:20;;:6;:20;;;25678:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25788:1;25767:23;;:9;:23;;;25759:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25850:14;:22;25865:6;25850:22;;;;;;;;;;;;;;;;;;;;;;;;;25849:23;:53;;;;;25877:14;:25;25892:9;25877:25;;;;;;;;;;;;;;;;;;;;;;;;;25876:26;25849:53;25841:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;25945:8;:16;25954:6;25945:16;;;;;;;;;;;;;;;;;;;;;;;;;25944:17;:41;;;;;25966:8;:19;25975:9;25966:19;;;;;;;;;;;;;;;;;;;;;;;;;25965:20;25944:41;25941:115;;;26009:11;;;;;;;;;;;26001:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;25941:115;26071:16;;;;;;;;;;;26068:1429;;;26121:41;26136:6;26144:9;26155:6;26121:14;:41::i;:::-;26114:48;;;;26068:1429;26218:15;:23;26234:6;26218:23;;;;;;;;;;;;;;;;;;;;;;;;;26217:24;:55;;;;;26246:15;:26;26262:9;26246:26;;;;;;;;;;;;;;;;;;;;;;;;;26245:27;26217:55;26214:170;;;26311:12;;26301:6;:22;;26293:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;26214:170;26412:28;26443:24;26461:4;26443:9;:24::i;:::-;26412:55;;26482:28;26537:23;;26513:20;:47;;26482:78;;26593:23;:44;;;;;26621:16;;;;;;;;;;;26620:17;26593:44;:69;;;;;26642:12;:20;26655:6;26642:20;;;;;;;;;;;;;;;;;;;;;;;;;26641:21;26593:69;:94;;;;;26666:21;;;;;;;;;;;26593:94;26589:305;;;26725:25;;;;;;;;;;;26722:97;;;26796:23;;26773:46;;26722:97;26838:36;26853:20;26838:14;:36::i;:::-;26589:305;26930:53;26952:6;26930:53;;;;;;;;;;;;;;;;;:9;:17;26940:6;26930:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;26910:9;:17;26920:6;26910:17;;;;;;;;;;;;;;;:73;;;;27000:19;27023:17;:25;27041:6;27023:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;27052:17;:28;27070:9;27052:28;;;;;;;;;;;;;;;;;;;;;;;;;27023:57;27022:148;;27136:34;27144:6;27152:9;27163:6;27136:7;:34::i;:::-;27022:148;;;27127:6;27022:148;27000:170;;27190:16;;;;;;;;;;;:51;;;;;27211:19;:30;27231:9;27211:30;;;;;;;;;;;;;;;;;;;;;;;;;27210:31;27190:51;27187:133;;;27309:10;;27268:37;27293:11;27268:20;27278:9;27268;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;27260:60;;;;;;27187:133;27360:37;27385:11;27360:9;:20;27370:9;27360:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;27337:9;:20;27347:9;27337:20;;;;;;;;;;;;;;;:60;;;;27436:9;27419:40;;27428:6;27419:40;;;27447:11;27419:40;;;;;;:::i;:::-;;;;;;;;27481:4;27474:11;;;;;25572:1932;;;;;;:::o;1619:192::-;1705:7;1738:1;1733;:6;;1741:12;1725:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1765:9;1781:1;1777;:5;;;;:::i;:::-;1765:17;;1802:1;1795:8;;;1619:192;;;;;:::o;1475:136::-;1533:7;1560:43;1564:1;1567;1560:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1553:50;;1475:136;;;;:::o;27512:330::-;27605:4;27642:53;27664:6;27642:53;;;;;;;;;;;;;;;;;:9;:17;27652:6;27642:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;27622:9;:17;27632:6;27622:17;;;;;;;;;;;;;;;:73;;;;27729:32;27754:6;27729:9;:20;27739:9;27729:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27706:9;:20;27716:9;27706:20;;;;;;;;;;;;;;;:55;;;;27794:9;27777:35;;27786:6;27777:35;;;27805:6;27777:35;;;;;;:::i;:::-;;;;;;;;27830:4;27823:11;;27512:330;;;;;:::o;27850:1048::-;17514:4;17495:16;;:23;;;;;;;;;;;;;;;;;;27932:19:::1;27954:65;28017:1;27954:58;27987:24;;27954:28;27966:15;;27954:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;27932:87;;28030:21;28054:24;28066:11;28054:7;:11;;:24;;;;:::i;:::-;28030:48;;28091:31;28108:13;28091:16;:31::i;:::-;28133:22;28158:21;28133:46;;28192:19;28214:52;28243:22;28263:1;28243:15;;:19;;:22;;;;:::i;:::-;28214:24;;:28;;:52;;;;:::i;:::-;28192:74;;28287:26;28316:59;28373:1;28316:52;28356:11;28316:35;28335:15;;28316:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;28287:88;;28386:21;28410:47;28445:11;28410:30;28429:10;;28410:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;28386:71;;28468:26;28497:57;28540:13;28497:38;28516:18;28497:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;28468:86;;28591:1;28570:18;:22;28567:104;;;28607:64;28628:22;;;;;;;;;;;28652:18;28607:20;:64::i;:::-;28567:104;28703:1;28687:13;:17;28684:89;;;28719:54;28740:17;;;;;;;;;;;28759:13;28719:20;:54::i;:::-;28684:89;28810:1;28789:18;:22;:41;;;;;28829:1;28815:11;:15;28789:41;28786:104;;;28845:45;28858:11;28871:18;28845:12;:45::i;:::-;28786:104;27911:987;;;;;;;17560:5:::0;17541:16;;:24;;;;;;;;;;;;;;;;;;27850:1048;:::o;30108:622::-;30194:7;30224:17;30244:1;30224:21;;30269:12;:20;30282:6;30269:20;;;;;;;;;;;;;;;;;;;;;;;;;30266:223;;;30318:38;30352:3;30318:29;30329:17;;30318:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;30306:50;;30266:223;;;30386:12;:23;30399:9;30386:23;;;;;;;;;;;;;;;;;;;;;;;;;30383:106;;;30438:39;30473:3;30438:30;30449:18;;30438:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30426:51;;30383:106;30266:223;30524:1;30512:9;:13;30509:173;;;30569:39;30598:9;30569;:24;30587:4;30569:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;30542:9;:24;30560:4;30542:24;;;;;;;;;;;;;;;:66;;;;30653:4;30628:42;;30637:6;30628:42;;;30660:9;30628:42;;;;;;:::i;:::-;;;;;;;;30509:173;30701:21;30712:9;30701:6;:10;;:21;;;;:::i;:::-;30694:28;;;30108:622;;;;;:::o;1819:250::-;1877:7;1906:1;1901;:6;1897:47;;1931:1;1924:8;;;;1897:47;1956:9;1972:1;1968;:5;;;;:::i;:::-;1956:17;;2001:1;1996;1992;:5;;;;:::i;:::-;:10;1984:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2060:1;2053:8;;;1819:250;;;;;:::o;2077:132::-;2135:7;2162:39;2166:1;2169;2162:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2155:46;;2077:132;;;;:::o;28910:666::-;29036:21;29074:1;29060:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29036:40;;29105:4;29087;29092:1;29087:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;29131:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29121:4;29126:1;29121:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;29166:62;29183:4;29198:15;;;;;;;;;;;29216:11;29166:8;:62::i;:::-;29267:15;;;;;;;;;;;:66;;;29348:11;29374:1;29418:4;29445;29481:15;29267:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29533:35;29550:11;29563:4;29533:35;;;;;;;:::i;:::-;;;;;;;;28965:611;28910:666;:::o;23801:126::-;23893:9;:18;;:26;23912:6;23893:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23801:126;;:::o;29584:516::-;29732:62;29749:4;29764:15;;;;;;;;;;;29782:11;29732:8;:62::i;:::-;29837:15;;;;;;;;;;;:31;;;29876:9;29909:4;29929:11;29955:1;29998;30041:10;30066:15;29837:255;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29584:516;;:::o;2217:278::-;2303:7;2335:1;2331;:5;2338:12;2323:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2362:9;2378:1;2374;:5;;;;:::i;:::-;2362:17;;2486:1;2479:8;;;2217:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:116::-;4141:21;4156:5;4141:21;:::i;:::-;4134:5;4131:32;4121:60;;4177:1;4174;4167:12;4121:60;4071:116;:::o;4193:133::-;4236:5;4274:6;4261:20;4252:29;;4290:30;4314:5;4290:30;:::i;:::-;4193:133;;;;:::o;4332:323::-;4388:6;4437:2;4425:9;4416:7;4412:23;4408:32;4405:119;;;4443:79;;:::i;:::-;4405:119;4563:1;4588:50;4630:7;4621:6;4610:9;4606:22;4588:50;:::i;:::-;4578:60;;4534:114;4332:323;;;;:::o;4661:104::-;4706:7;4735:24;4753:5;4735:24;:::i;:::-;4724:35;;4661:104;;;:::o;4771:142::-;4874:32;4900:5;4874:32;:::i;:::-;4869:3;4862:45;4771:142;;:::o;4919:254::-;5028:4;5066:2;5055:9;5051:18;5043:26;;5079:87;5163:1;5152:9;5148:17;5139:6;5079:87;:::i;:::-;4919:254;;;;:::o;5179:60::-;5207:3;5228:5;5221:12;;5179:60;;;:::o;5245:142::-;5295:9;5328:53;5346:34;5355:24;5373:5;5355:24;:::i;:::-;5346:34;:::i;:::-;5328:53;:::i;:::-;5315:66;;5245:142;;;:::o;5393:126::-;5443:9;5476:37;5507:5;5476:37;:::i;:::-;5463:50;;5393:126;;;:::o;5525:153::-;5602:9;5635:37;5666:5;5635:37;:::i;:::-;5622:50;;5525:153;;;:::o;5684:185::-;5798:64;5856:5;5798:64;:::i;:::-;5793:3;5786:77;5684:185;;:::o;5875:276::-;5995:4;6033:2;6022:9;6018:18;6010:26;;6046:98;6141:1;6130:9;6126:17;6117:6;6046:98;:::i;:::-;5875:276;;;;:::o;6157:118::-;6244:24;6262:5;6244:24;:::i;:::-;6239:3;6232:37;6157:118;;:::o;6281:222::-;6374:4;6412:2;6401:9;6397:18;6389:26;;6425:71;6493:1;6482:9;6478:17;6469:6;6425:71;:::i;:::-;6281:222;;;;:::o;6509:329::-;6568:6;6617:2;6605:9;6596:7;6592:23;6588:32;6585:119;;;6623:79;;:::i;:::-;6585:119;6743:1;6768:53;6813:7;6804:6;6793:9;6789:22;6768:53;:::i;:::-;6758:63;;6714:117;6509:329;;;;:::o;6844:468::-;6909:6;6917;6966:2;6954:9;6945:7;6941:23;6937:32;6934:119;;;6972:79;;:::i;:::-;6934:119;7092:1;7117:53;7162:7;7153:6;7142:9;7138:22;7117:53;:::i;:::-;7107:63;;7063:117;7219:2;7245:50;7287:7;7278:6;7267:9;7263:22;7245:50;:::i;:::-;7235:60;;7190:115;6844:468;;;;;:::o;7318:619::-;7395:6;7403;7411;7460:2;7448:9;7439:7;7435:23;7431:32;7428:119;;;7466:79;;:::i;:::-;7428:119;7586:1;7611:53;7656:7;7647:6;7636:9;7632:22;7611:53;:::i;:::-;7601:63;;7557:117;7713:2;7739:53;7784:7;7775:6;7764:9;7760:22;7739:53;:::i;:::-;7729:63;;7684:118;7841:2;7867:53;7912:7;7903:6;7892:9;7888:22;7867:53;:::i;:::-;7857:63;;7812:118;7318:619;;;;;:::o;7943:118::-;8030:24;8048:5;8030:24;:::i;:::-;8025:3;8018:37;7943:118;;:::o;8067:222::-;8160:4;8198:2;8187:9;8183:18;8175:26;;8211:71;8279:1;8268:9;8264:17;8255:6;8211:71;:::i;:::-;8067:222;;;;:::o;8295:329::-;8354:6;8403:2;8391:9;8382:7;8378:23;8374:32;8371:119;;;8409:79;;:::i;:::-;8371:119;8529:1;8554:53;8599:7;8590:6;8579:9;8575:22;8554:53;:::i;:::-;8544:63;;8500:117;8295:329;;;;:::o;8630:86::-;8665:7;8705:4;8698:5;8694:16;8683:27;;8630:86;;;:::o;8722:112::-;8805:22;8821:5;8805:22;:::i;:::-;8800:3;8793:35;8722:112;;:::o;8840:214::-;8929:4;8967:2;8956:9;8952:18;8944:26;;8980:67;9044:1;9033:9;9029:17;9020:6;8980:67;:::i;:::-;8840:214;;;;:::o;9060:474::-;9128:6;9136;9185:2;9173:9;9164:7;9160:23;9156:32;9153:119;;;9191:79;;:::i;:::-;9153:119;9311:1;9336:53;9381:7;9372:6;9361:9;9357:22;9336:53;:::i;:::-;9326:63;;9282:117;9438:2;9464:53;9509:7;9500:6;9489:9;9485:22;9464:53;:::i;:::-;9454:63;;9409:118;9060:474;;;;;:::o;9540:138::-;9621:32;9647:5;9621:32;:::i;:::-;9614:5;9611:43;9601:71;;9668:1;9665;9658:12;9601:71;9540:138;:::o;9684:155::-;9738:5;9776:6;9763:20;9754:29;;9792:41;9827:5;9792:41;:::i;:::-;9684:155;;;;:::o;9845:345::-;9912:6;9961:2;9949:9;9940:7;9936:23;9932:32;9929:119;;;9967:79;;:::i;:::-;9929:119;10087:1;10112:61;10165:7;10156:6;10145:9;10141:22;10112:61;:::i;:::-;10102:71;;10058:125;9845:345;;;;:::o;10196:180::-;10244:77;10241:1;10234:88;10341:4;10338:1;10331:15;10365:4;10362:1;10355:15;10382:320;10426:6;10463:1;10457:4;10453:12;10443:22;;10510:1;10504:4;10500:12;10531:18;10521:81;;10587:4;10579:6;10575:17;10565:27;;10521:81;10649:2;10641:6;10638:14;10618:18;10615:38;10612:84;;10668:18;;:::i;:::-;10612:84;10433:269;10382:320;;;:::o;10708:161::-;10848:13;10844:1;10836:6;10832:14;10825:37;10708:161;:::o;10875:366::-;11017:3;11038:67;11102:2;11097:3;11038:67;:::i;:::-;11031:74;;11114:93;11203:3;11114:93;:::i;:::-;11232:2;11227:3;11223:12;11216:19;;10875:366;;;:::o;11247:419::-;11413:4;11451:2;11440:9;11436:18;11428:26;;11500:9;11494:4;11490:20;11486:1;11475:9;11471:17;11464:47;11528:131;11654:4;11528:131;:::i;:::-;11520:139;;11247:419;;;:::o;11672:156::-;11812:8;11808:1;11800:6;11796:14;11789:32;11672:156;:::o;11834:365::-;11976:3;11997:66;12061:1;12056:3;11997:66;:::i;:::-;11990:73;;12072:93;12161:3;12072:93;:::i;:::-;12190:2;12185:3;12181:12;12174:19;;11834:365;;;:::o;12205:419::-;12371:4;12409:2;12398:9;12394:18;12386:26;;12458:9;12452:4;12448:20;12444:1;12433:9;12429:17;12422:47;12486:131;12612:4;12486:131;:::i;:::-;12478:139;;12205:419;;;:::o;12630:180::-;12678:77;12675:1;12668:88;12775:4;12772:1;12765:15;12799:4;12796:1;12789:15;12816:410;12856:7;12879:20;12897:1;12879:20;:::i;:::-;12874:25;;12913:20;12931:1;12913:20;:::i;:::-;12908:25;;12968:1;12965;12961:9;12990:30;13008:11;12990:30;:::i;:::-;12979:41;;13169:1;13160:7;13156:15;13153:1;13150:22;13130:1;13123:9;13103:83;13080:139;;13199:18;;:::i;:::-;13080:139;12864:362;12816:410;;;;:::o;13232:180::-;13280:77;13277:1;13270:88;13377:4;13374:1;13367:15;13401:4;13398:1;13391:15;13418:185;13458:1;13475:20;13493:1;13475:20;:::i;:::-;13470:25;;13509:20;13527:1;13509:20;:::i;:::-;13504:25;;13548:1;13538:35;;13553:18;;:::i;:::-;13538:35;13595:1;13592;13588:9;13583:14;;13418:185;;;;:::o;13609:143::-;13666:5;13697:6;13691:13;13682:22;;13713:33;13740:5;13713:33;:::i;:::-;13609:143;;;;:::o;13758:351::-;13828:6;13877:2;13865:9;13856:7;13852:23;13848:32;13845:119;;;13883:79;;:::i;:::-;13845:119;14003:1;14028:64;14084:7;14075:6;14064:9;14060:22;14028:64;:::i;:::-;14018:74;;13974:128;13758:351;;;;:::o;14115:332::-;14236:4;14274:2;14263:9;14259:18;14251:26;;14287:71;14355:1;14344:9;14340:17;14331:6;14287:71;:::i;:::-;14368:72;14436:2;14425:9;14421:18;14412:6;14368:72;:::i;:::-;14115:332;;;;;:::o;14453:134::-;14511:9;14544:37;14575:5;14544:37;:::i;:::-;14531:50;;14453:134;;;:::o;14593:147::-;14688:45;14727:5;14688:45;:::i;:::-;14683:3;14676:58;14593:147;;:::o;14746:238::-;14847:4;14885:2;14874:9;14870:18;14862:26;;14898:79;14974:1;14963:9;14959:17;14950:6;14898:79;:::i;:::-;14746:238;;;;:::o;14990:191::-;15030:3;15049:20;15067:1;15049:20;:::i;:::-;15044:25;;15083:20;15101:1;15083:20;:::i;:::-;15078:25;;15126:1;15123;15119:9;15112:16;;15147:3;15144:1;15141:10;15138:36;;;15154:18;;:::i;:::-;15138:36;14990:191;;;;:::o;15187:177::-;15327:29;15323:1;15315:6;15311:14;15304:53;15187:177;:::o;15370:366::-;15512:3;15533:67;15597:2;15592:3;15533:67;:::i;:::-;15526:74;;15609:93;15698:3;15609:93;:::i;:::-;15727:2;15722:3;15718:12;15711:19;;15370:366;;;:::o;15742:419::-;15908:4;15946:2;15935:9;15931:18;15923:26;;15995:9;15989:4;15985:20;15981:1;15970:9;15966:17;15959:47;16023:131;16149:4;16023:131;:::i;:::-;16015:139;;15742:419;;;:::o;16167:223::-;16307:34;16303:1;16295:6;16291:14;16284:58;16376:6;16371:2;16363:6;16359:15;16352:31;16167:223;:::o;16396:366::-;16538:3;16559:67;16623:2;16618:3;16559:67;:::i;:::-;16552:74;;16635:93;16724:3;16635:93;:::i;:::-;16753:2;16748:3;16744:12;16737:19;;16396:366;;;:::o;16768:419::-;16934:4;16972:2;16961:9;16957:18;16949:26;;17021:9;17015:4;17011:20;17007:1;16996:9;16992:17;16985:47;17049:131;17175:4;17049:131;:::i;:::-;17041:139;;16768:419;;;:::o;17193:221::-;17333:34;17329:1;17321:6;17317:14;17310:58;17402:4;17397:2;17389:6;17385:15;17378:29;17193:221;:::o;17420:366::-;17562:3;17583:67;17647:2;17642:3;17583:67;:::i;:::-;17576:74;;17659:93;17748:3;17659:93;:::i;:::-;17777:2;17772:3;17768:12;17761:19;;17420:366;;;:::o;17792:419::-;17958:4;17996:2;17985:9;17981:18;17973:26;;18045:9;18039:4;18035:20;18031:1;18020:9;18016:17;18009:47;18073:131;18199:4;18073:131;:::i;:::-;18065:139;;17792:419;;;:::o;18217:224::-;18357:34;18353:1;18345:6;18341:14;18334:58;18426:7;18421:2;18413:6;18409:15;18402:32;18217:224;:::o;18447:366::-;18589:3;18610:67;18674:2;18669:3;18610:67;:::i;:::-;18603:74;;18686:93;18775:3;18686:93;:::i;:::-;18804:2;18799:3;18795:12;18788:19;;18447:366;;;:::o;18819:419::-;18985:4;19023:2;19012:9;19008:18;19000:26;;19072:9;19066:4;19062:20;19058:1;19047:9;19043:17;19036:47;19100:131;19226:4;19100:131;:::i;:::-;19092:139;;18819:419;;;:::o;19244:222::-;19384:34;19380:1;19372:6;19368:14;19361:58;19453:5;19448:2;19440:6;19436:15;19429:30;19244:222;:::o;19472:366::-;19614:3;19635:67;19699:2;19694:3;19635:67;:::i;:::-;19628:74;;19711:93;19800:3;19711:93;:::i;:::-;19829:2;19824:3;19820:12;19813:19;;19472:366;;;:::o;19844:419::-;20010:4;20048:2;20037:9;20033:18;20025:26;;20097:9;20091:4;20087:20;20083:1;20072:9;20068:17;20061:47;20125:131;20251:4;20125:131;:::i;:::-;20117:139;;19844:419;;;:::o;20269:172::-;20409:24;20405:1;20397:6;20393:14;20386:48;20269:172;:::o;20447:366::-;20589:3;20610:67;20674:2;20669:3;20610:67;:::i;:::-;20603:74;;20686:93;20775:3;20686:93;:::i;:::-;20804:2;20799:3;20795:12;20788:19;;20447:366;;;:::o;20819:419::-;20985:4;21023:2;21012:9;21008:18;21000:26;;21072:9;21066:4;21062:20;21058:1;21047:9;21043:17;21036:47;21100:131;21226:4;21100:131;:::i;:::-;21092:139;;20819:419;;;:::o;21244:170::-;21384:22;21380:1;21372:6;21368:14;21361:46;21244:170;:::o;21420:366::-;21562:3;21583:67;21647:2;21642:3;21583:67;:::i;:::-;21576:74;;21659:93;21748:3;21659:93;:::i;:::-;21777:2;21772:3;21768:12;21761:19;;21420:366;;;:::o;21792:419::-;21958:4;21996:2;21985:9;21981:18;21973:26;;22045:9;22039:4;22035:20;22031:1;22020:9;22016:17;22009:47;22073:131;22199:4;22073:131;:::i;:::-;22065:139;;21792:419;;;:::o;22217:227::-;22357:34;22353:1;22345:6;22341:14;22334:58;22426:10;22421:2;22413:6;22409:15;22402:35;22217:227;:::o;22450:366::-;22592:3;22613:67;22677:2;22672:3;22613:67;:::i;:::-;22606:74;;22689:93;22778:3;22689:93;:::i;:::-;22807:2;22802:3;22798:12;22791:19;;22450:366;;;:::o;22822:419::-;22988:4;23026:2;23015:9;23011:18;23003:26;;23075:9;23069:4;23065:20;23061:1;23050:9;23046:17;23039:47;23103:131;23229:4;23103:131;:::i;:::-;23095:139;;22822:419;;;:::o;23247:194::-;23287:4;23307:20;23325:1;23307:20;:::i;:::-;23302:25;;23341:20;23359:1;23341:20;:::i;:::-;23336:25;;23385:1;23382;23378:9;23370:17;;23409:1;23403:4;23400:11;23397:37;;;23414:18;;:::i;:::-;23397:37;23247:194;;;;:::o;23447:220::-;23587:34;23583:1;23575:6;23571:14;23564:58;23656:3;23651:2;23643:6;23639:15;23632:28;23447:220;:::o;23673:366::-;23815:3;23836:67;23900:2;23895:3;23836:67;:::i;:::-;23829:74;;23912:93;24001:3;23912:93;:::i;:::-;24030:2;24025:3;24021:12;24014:19;;23673:366;;;:::o;24045:419::-;24211:4;24249:2;24238:9;24234:18;24226:26;;24298:9;24292:4;24288:20;24284:1;24273:9;24269:17;24262:47;24326:131;24452:4;24326:131;:::i;:::-;24318:139;;24045:419;;;:::o;24470:180::-;24518:77;24515:1;24508:88;24615:4;24612:1;24605:15;24639:4;24636:1;24629:15;24656:180;24704:77;24701:1;24694:88;24801:4;24798:1;24791:15;24825:4;24822:1;24815:15;24842:85;24887:7;24916:5;24905:16;;24842:85;;;:::o;24933:158::-;24991:9;25024:61;25042:42;25051:32;25077:5;25051:32;:::i;:::-;25042:42;:::i;:::-;25024:61;:::i;:::-;25011:74;;24933:158;;;:::o;25097:147::-;25192:45;25231:5;25192:45;:::i;:::-;25187:3;25180:58;25097:147;;:::o;25250:114::-;25317:6;25351:5;25345:12;25335:22;;25250:114;;;:::o;25370:184::-;25469:11;25503:6;25498:3;25491:19;25543:4;25538:3;25534:14;25519:29;;25370:184;;;;:::o;25560:132::-;25627:4;25650:3;25642:11;;25680:4;25675:3;25671:14;25663:22;;25560:132;;;:::o;25698:108::-;25775:24;25793:5;25775:24;:::i;:::-;25770:3;25763:37;25698:108;;:::o;25812:179::-;25881:10;25902:46;25944:3;25936:6;25902:46;:::i;:::-;25980:4;25975:3;25971:14;25957:28;;25812:179;;;;:::o;25997:113::-;26067:4;26099;26094:3;26090:14;26082:22;;25997:113;;;:::o;26146:732::-;26265:3;26294:54;26342:5;26294:54;:::i;:::-;26364:86;26443:6;26438:3;26364:86;:::i;:::-;26357:93;;26474:56;26524:5;26474:56;:::i;:::-;26553:7;26584:1;26569:284;26594:6;26591:1;26588:13;26569:284;;;26670:6;26664:13;26697:63;26756:3;26741:13;26697:63;:::i;:::-;26690:70;;26783:60;26836:6;26783:60;:::i;:::-;26773:70;;26629:224;26616:1;26613;26609:9;26604:14;;26569:284;;;26573:14;26869:3;26862:10;;26270:608;;;26146:732;;;;:::o;26884:831::-;27147:4;27185:3;27174:9;27170:19;27162:27;;27199:71;27267:1;27256:9;27252:17;27243:6;27199:71;:::i;:::-;27280:80;27356:2;27345:9;27341:18;27332:6;27280:80;:::i;:::-;27407:9;27401:4;27397:20;27392:2;27381:9;27377:18;27370:48;27435:108;27538:4;27529:6;27435:108;:::i;:::-;27427:116;;27553:72;27621:2;27610:9;27606:18;27597:6;27553:72;:::i;:::-;27635:73;27703:3;27692:9;27688:19;27679:6;27635:73;:::i;:::-;26884:831;;;;;;;;:::o;27721:483::-;27892:4;27930:2;27919:9;27915:18;27907:26;;27943:71;28011:1;28000:9;27996:17;27987:6;27943:71;:::i;:::-;28061:9;28055:4;28051:20;28046:2;28035:9;28031:18;28024:48;28089:108;28192:4;28183:6;28089:108;:::i;:::-;28081:116;;27721:483;;;;;:::o;28210:807::-;28459:4;28497:3;28486:9;28482:19;28474:27;;28511:71;28579:1;28568:9;28564:17;28555:6;28511:71;:::i;:::-;28592:72;28660:2;28649:9;28645:18;28636:6;28592:72;:::i;:::-;28674:80;28750:2;28739:9;28735:18;28726:6;28674:80;:::i;:::-;28764;28840:2;28829:9;28825:18;28816:6;28764:80;:::i;:::-;28854:73;28922:3;28911:9;28907:19;28898:6;28854:73;:::i;:::-;28937;29005:3;28994:9;28990:19;28981:6;28937:73;:::i;:::-;28210:807;;;;;;;;;:::o;29023:143::-;29080:5;29111:6;29105:13;29096:22;;29127:33;29154:5;29127:33;:::i;:::-;29023:143;;;;:::o;29172:663::-;29260:6;29268;29276;29325:2;29313:9;29304:7;29300:23;29296:32;29293:119;;;29331:79;;:::i;:::-;29293:119;29451:1;29476:64;29532:7;29523:6;29512:9;29508:22;29476:64;:::i;:::-;29466:74;;29422:128;29589:2;29615:64;29671:7;29662:6;29651:9;29647:22;29615:64;:::i;:::-;29605:74;;29560:129;29728:2;29754:64;29810:7;29801:6;29790:9;29786:22;29754:64;:::i;:::-;29744:74;;29699:129;29172:663;;;;;:::o

Swarm Source

ipfs://1ee86818c562e5c3970bd50fa7a8eb151af7d4d4e385c4e74a146cf35c39e9e4
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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