ETH Price: $3,018.70 (+2.98%)
Gas: 2 Gwei

Token

BERRIES (BERRIES)
 

Overview

Max Total Supply

100,000,000,000 BERRIES

Holders

114

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
109,461,295.152028829 BERRIES

Value
$0.00
0xccd54a2d7817e3baa091f9bc97d0ee0d27e3dabe
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:
Berries

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

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

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

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

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

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

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

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }
}

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 Berries is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "BERRIES";
    string private _symbol = "BERRIES";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0x48b3c8517ECbE9AeC07c4741f975BBcAf1495CC6); // Marketing
    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 = 10;

    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 25;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 35;

    uint256 public _totalTaxIfBuying = 10;
    uint256 public _totalTaxIfSelling = 25;
    uint256 public _totalDistributionShares = 35;

    uint256 private _totalSupply = 100 * 10**9 * 10**9;
    uint256 public _maxTxAmount = 3 * 10**9 * 10**9;
    uint256 public _walletMax = 3 * 10**9 * 10**9;
    uint256 private minimumTokensBeforeSwap = 550 * 10**6 * 10**9; 

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    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 () {
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); 

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

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

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        isExcludedFromFee[address(marketingWalletAddress)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        isWalletLimitExempt[address(marketingWalletAddress)] = true;
        isWalletLimitExempt[address(0x71B5759d73262FBb223956913ecF4ecC51057641)] = true; //Pinksale address
        isWalletLimitExempt[address(deadAddress)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        isTxLimitExempt[address(marketingWalletAddress)] = true;
        isTxLimitExempt[address(0x71B5759d73262FBb223956913ecF4ecC51057641)] = true; //Pinksale address
        isTxLimitExempt[address(deadAddress)] = 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 setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee);
        require(_totalTaxIfBuying <= 30, "Buy tax must be less than 30%");
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee);
        require(_totalTaxIfSelling <= 45, "Sell tax must be less than 45%");
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare);
        require(_totalDistributionShares <=75, "Distribution Shares must be less than 75%");
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(maxTxAmount >= _totalSupply / 200, "Cannot set MaxTxAmount lower than 0.5%");
        _maxTxAmount = maxTxAmount;
    }

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

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

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= _totalSupply / 200, "Cannot set MaxWallet lower than 0.5%");
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        require(newLimit > 1, "NumTokensBeforeSwap should be not 0");
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = 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);
    }

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

        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 amountETHMarketing = amountReceived.mul(_marketingShare).div(totalETHFee);

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

        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
            owner(),
            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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"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":"_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":"_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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"","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":"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":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","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":"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"}],"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":"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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600781526020017f4245525249455300000000000000000000000000000000000000000000000000815250600290816200004a919062000f50565b506040518060400160405280600781526020017f42455252494553000000000000000000000000000000000000000000000000008152506003908162000091919062000f50565b50600960045f6101000a81548160ff021916908360ff1602179055507348b3c8517ecbe9aec07c4741f975bbcaf1495cc6600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152505f600b55600a600c555f600d556019600e555f600f556023601055600a6011556019601255602360135568056bc75e2d631000006014556729a2241af62c00006015556729a2241af62c00006016556707a1fe16027700006017556001601960156101000a81548160ff0219169083151502179055505f601960166101000a81548160ff0219169083151502179055506001601960176101000a81548160ff021916908315150217905550348015620001ee575f80fd5b505f6200020062000c5c60201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fe573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000324919062001099565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003b0919062001099565b6040518363ffffffff1660e01b8152600401620003cf929190620010da565b6020604051808303815f875af1158015620003ec573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000412919062001099565b60195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060185f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060145460065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160075f6200054662000c6360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506200067a600c54600b5462000c8a60201b90919060201c565b60118190555062000699600e54600d5462000c8a60201b90919060201c565b601281905550620006b8601054600f5462000c8a60201b90919060201c565b601381905550600160085f620006d362000c6360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f7371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f6200093962000c6360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f7371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060145460055f62000ba062000c5c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000bed62000c5c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60145460405162000c4d919062001116565b60405180910390a35062001216565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80828462000c9a91906200115e565b90508381101562000ce2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cd990620011f6565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d6857607f821691505b60208210810362000d7e5762000d7d62000d23565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000de27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000da5565b62000dee868362000da5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000e3862000e3262000e2c8462000e06565b62000e0f565b62000e06565b9050919050565b5f819050919050565b62000e538362000e18565b62000e6b62000e628262000e3f565b84845462000db1565b825550505050565b5f90565b62000e8162000e73565b62000e8e81848462000e48565b505050565b5b8181101562000eb55762000ea95f8262000e77565b60018101905062000e94565b5050565b601f82111562000f045762000ece8162000d84565b62000ed98462000d96565b8101602085101562000ee9578190505b62000f0162000ef88562000d96565b83018262000e93565b50505b505050565b5f82821c905092915050565b5f62000f265f198460080262000f09565b1980831691505092915050565b5f62000f40838362000f15565b9150826002028217905092915050565b62000f5b8262000cec565b67ffffffffffffffff81111562000f775762000f7662000cf6565b5b62000f83825462000d50565b62000f9082828562000eb9565b5f60209050601f83116001811462000fc6575f841562000fb1578287015190505b62000fbd858262000f33565b8655506200102c565b601f19841662000fd68662000d84565b5f5b8281101562000fff5784890151825560018201915060208501945060208101905062000fd8565b868310156200101f57848901516200101b601f89168262000f15565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620010638262001038565b9050919050565b620010758162001057565b811462001080575f80fd5b50565b5f8151905062001093816200106a565b92915050565b5f60208284031215620010b157620010b062001034565b5b5f620010c08482850162001083565b91505092915050565b620010d48162001057565b82525050565b5f604082019050620010ef5f830185620010c9565b620010fe6020830184620010c9565b9392505050565b620011108162000e06565b82525050565b5f6020820190506200112b5f83018462001105565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200116a8262000e06565b9150620011778362000e06565b925082820190508082111562001192576200119162001131565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f620011de601b8362001198565b9150620011eb82620011a8565b602082019050919050565b5f6020820190508181035f8301526200120f81620011d0565b9050919050565b60805161428c620012365f395f8181610ef20152610f1d015261428c5ff3fe6080604052600436106102cc575f3560e01c8063914eb66a11610174578063c8607952116100db578063ec28438a11610094578063f0cd1dac1161006e578063f0cd1dac14610aff578063f1d5f51714610b29578063f84ba65d14610b51578063f872858a14610b79576102d3565b8063ec28438a14610a87578063eea5b63f14610aaf578063ef422a1814610ad7576102d3565b8063c860795214610967578063c867d60b14610991578063d158272d146109cd578063da00097d146109f7578063dc44b6a014610a21578063dd62ed3e14610a4b576102d3565b8063a5d69d1f1161012d578063a5d69d1f1461085f578063a9059cbb14610887578063aa35822c146108c3578063c49b9a80146108eb578063c5d2418914610913578063c816841b1461093d576102d3565b8063914eb66a1461076757806395d89b411461077d578063a073d37f146107a7578063a08e671f146107d1578063a11a1682146107fb578063a457c2d714610823576102d3565b80633ecad2711161023357806370a08231116101ec57806382eefb43116101c657806382eefb43146106ad57806388790a68146106d75780638b42507f146107015780638da5cb5b1461073d576102d3565b806370a082311461061d5780637d1db4a514610659578063807c2d9c14610683576102d3565b80633ecad271146104ff5780634a74bb021461053b5780634cb80fd5146105655780635342acb41461058d57806357a5802f146105c957806361a23c69146105f3576102d3565b80632563ae83116102855780632563ae83146103f557806327c8f8351461041d5780632b112e4914610447578063313ce56714610471578063395093511461049b5780633b97084a146104d7576102d3565b806306fdde03146102d7578063095ea7b3146103015780631694505e1461033d57806318160ddd146103675780632198cf6c1461039157806323b872dd146103b9576102d3565b366102d357005b5f80fd5b3480156102e2575f80fd5b506102eb610ba3565b6040516102f89190613275565b60405180910390f35b34801561030c575f80fd5b5061032760048036038101906103229190613326565b610c33565b604051610334919061337e565b60405180910390f35b348015610348575f80fd5b50610351610c50565b60405161035e91906133f2565b60405180910390f35b348015610372575f80fd5b5061037b610c75565b604051610388919061341a565b60405180910390f35b34801561039c575f80fd5b506103b760048036038101906103b2919061345d565b610c7e565b005b3480156103c4575f80fd5b506103df60048036038101906103da919061349b565b610d6a565b6040516103ec919061337e565b60405180910390f35b348015610400575f80fd5b5061041b600480360381019061041691906134eb565b610e3f565b005b348015610428575f80fd5b50610431610ef0565b60405161043e9190613525565b60405180910390f35b348015610452575f80fd5b5061045b610f14565b604051610468919061341a565b60405180910390f35b34801561047c575f80fd5b50610485610f57565b6040516104929190613559565b60405180910390f35b3480156104a6575f80fd5b506104c160048036038101906104bc9190613326565b610f6c565b6040516104ce919061337e565b60405180910390f35b3480156104e2575f80fd5b506104fd60048036038101906104f89190613572565b61101a565b005b34801561050a575f80fd5b506105256004803603810190610520919061359d565b6110fb565b604051610532919061337e565b60405180910390f35b348015610546575f80fd5b5061054f611118565b60405161055c919061337e565b60405180910390f35b348015610570575f80fd5b5061058b6004803603810190610586919061359d565b61112b565b005b348015610598575f80fd5b506105b360048036038101906105ae919061359d565b611203565b6040516105c0919061337e565b60405180910390f35b3480156105d4575f80fd5b506105dd611220565b6040516105ea919061341a565b60405180910390f35b3480156105fe575f80fd5b50610607611226565b604051610614919061341a565b60405180910390f35b348015610628575f80fd5b50610643600480360381019061063e919061359d565b61122c565b604051610650919061341a565b60405180910390f35b348015610664575f80fd5b5061066d611272565b60405161067a919061341a565b60405180910390f35b34801561068e575f80fd5b50610697611278565b6040516106a4919061341a565b60405180910390f35b3480156106b8575f80fd5b506106c161127e565b6040516106ce919061341a565b60405180910390f35b3480156106e2575f80fd5b506106eb611284565b6040516106f8919061341a565b60405180910390f35b34801561070c575f80fd5b506107276004803603810190610722919061359d565b61128a565b604051610734919061337e565b60405180910390f35b348015610748575f80fd5b506107516112a7565b60405161075e9190613525565b60405180910390f35b348015610772575f80fd5b5061077b6112ce565b005b348015610788575f80fd5b5061079161141c565b60405161079e9190613275565b60405180910390f35b3480156107b2575f80fd5b506107bb6114ac565b6040516107c8919061341a565b60405180910390f35b3480156107dc575f80fd5b506107e56114b5565b6040516107f2919061341a565b60405180910390f35b348015610806575f80fd5b50610821600480360381019061081c91906135c8565b6114bb565b005b34801561082e575f80fd5b5061084960048036038101906108449190613326565b6115c4565b604051610856919061337e565b60405180910390f35b34801561086a575f80fd5b50610885600480360381019061088091906134eb565b61168c565b005b348015610892575f80fd5b506108ad60048036038101906108a89190613326565b61173d565b6040516108ba919061337e565b60405180910390f35b3480156108ce575f80fd5b506108e960048036038101906108e491906135c8565b61175b565b005b3480156108f6575f80fd5b50610911600480360381019061090c91906134eb565b611864565b005b34801561091e575f80fd5b5061092761194c565b604051610934919061341a565b60405180910390f35b348015610948575f80fd5b50610951611952565b60405161095e9190613525565b60405180910390f35b348015610972575f80fd5b5061097b611977565b604051610988919061341a565b60405180910390f35b34801561099c575f80fd5b506109b760048036038101906109b2919061359d565b61197d565b6040516109c4919061337e565b60405180910390f35b3480156109d8575f80fd5b506109e161199a565b6040516109ee9190613626565b60405180910390f35b348015610a02575f80fd5b50610a0b6119c0565b604051610a18919061337e565b60405180910390f35b348015610a2c575f80fd5b50610a356119d3565b604051610a42919061341a565b60405180910390f35b348015610a56575f80fd5b50610a716004803603810190610a6c919061363f565b6119d9565b604051610a7e919061341a565b60405180910390f35b348015610a92575f80fd5b50610aad6004803603810190610aa89190613572565b611a5b565b005b348015610aba575f80fd5b50610ad56004803603810190610ad091906135c8565b611b4a565b005b348015610ae2575f80fd5b50610afd6004803603810190610af8919061345d565b611c53565b005b348015610b0a575f80fd5b50610b13611d3f565b604051610b20919061341a565b60405180910390f35b348015610b34575f80fd5b50610b4f6004803603810190610b4a9190613572565b611d45565b005b348015610b5c575f80fd5b50610b776004803603810190610b72919061345d565b611e34565b005b348015610b84575f80fd5b50610b8d611f20565b604051610b9a919061337e565b60405180910390f35b606060028054610bb2906136aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde906136aa565b8015610c295780601f10610c0057610100808354040283529160200191610c29565b820191905f5260205f20905b815481529060010190602001808311610c0c57829003601f168201915b5050505050905090565b5f610c46610c3f611f33565b8484611f3a565b6001905092915050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601454905090565b610c86611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990613724565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f610d768484846120fd565b50610e3484610d83611f33565b610e2f8560405180606001604052806028815260200161420a6028913960065f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610de6611f33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126c09092919063ffffffff16565b611f3a565b600190509392505050565b610e47611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613724565b60405180910390fd5b80601960176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f610f52610f417f000000000000000000000000000000000000000000000000000000000000000061122c565b60145461272290919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b5f611010610f78611f33565b8461100b8560065f610f88611f33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461276b90919063ffffffff16565b611f3a565b6001905092915050565b611022611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590613724565b60405180910390fd5b600181116110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e8906137b2565b60405180910390fd5b8060178190555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b601960159054906101000a900460ff1681565b611133611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690613724565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6007602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b60105481565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60155481565b60165481565b60125481565b600d5481565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112d6611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613724565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606003805461142b906136aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611457906136aa565b80156114a25780601f10611479576101008083540402835291602001916114a2565b820191905f5260205f20905b81548152906001019060200180831161148557829003601f168201915b5050505050905090565b5f601754905090565b60135481565b6114c3611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690613724565b60405180910390fd5b81600d8190555080600e81905550611574600e54600d5461276b90919063ffffffff16565b601281905550602d60125411156115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b79061381a565b60405180910390fd5b5050565b5f6116826115d0611f33565b8461167d856040518060600160405280602581526020016142326025913960065f6115f9611f33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126c09092919063ffffffff16565b611f3a565b6001905092915050565b611694611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790613724565b60405180910390fd5b80601960166101000a81548160ff02191690831515021790555050565b5f611750611749611f33565b84846120fd565b506001905092915050565b611763611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e690613724565b60405180910390fd5b81600b8190555080600c81905550611814600c54600b5461276b90919063ffffffff16565b601181905550601e6011541115611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790613882565b60405180910390fd5b5050565b61186c611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90613724565b60405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611941919061337e565b60405180910390a150565b600c5481565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6008602052805f5260405f205f915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960169054906101000a900460ff1681565b600b5481565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611a63611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690613724565b60405180910390fd5b60c8601454611afe91906138fa565b811015611b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b379061399a565b60405180910390fd5b8060158190555050565b611b52611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613724565b60405180910390fd5b81600f8190555080601081905550611c03601054600f5461276b90919063ffffffff16565b601381905550604b6013541115611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690613a28565b60405180910390fd5b5050565b611c5b611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90613724565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60115481565b611d4d611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613724565b60405180910390fd5b60c8601454611de891906138fa565b811015611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2190613ab6565b60405180910390fd5b8060168190555050565b611e3c611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90613724565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601960179054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90613b44565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d90613bd2565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f0919061341a565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361216c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216390613c60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190613cee565b60405180910390fd5b601960149054906101000a900460ff1615612201576121fa8484846127c8565b90506126b9565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561229f575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122ea576015548211156122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e090613d7c565b60405180910390fd5b5b5f6122f43061122c565b90505f60175482101590508080156123195750601960149054906101000a900460ff16155b801561236c5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123845750601960159054906101000a900460ff165b156123ae57601960169054906101000a900460ff16156123a45760175491505b6123ad82612992565b5b612435846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126c09092919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612512575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61252657612521878787612b19565b612528565b845b9050601960179054906101000a900460ff16801561258d575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125bb576016546125b0826125a28961122c565b61276b90919063ffffffff16565b11156125ba575f80fd5b5b61260b8160055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461276b90919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126a9919061341a565b60405180910390a3600193505050505b9392505050565b5f838311158290612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe9190613275565b60405180910390fd5b505f83856127159190613d9a565b9050809150509392505050565b5f61276383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126c0565b905092915050565b5f8082846127799190613dcd565b9050838110156127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590613e4a565b60405180910390fd5b8091505092915050565b5f612850826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126c09092919063ffffffff16565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506128e18260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461276b90919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161297f919061341a565b60405180910390a3600190509392505050565b6001601960146101000a81548160ff0219169083151502179055505f6129ea60026129dc6013546129ce600f5487612d3390919063ffffffff16565b612daa90919063ffffffff16565b612daa90919063ffffffff16565b90505f612a00828461272290919063ffffffff16565b9050612a0b81612df3565b5f4790505f612a3a612a296002600f54612daa90919063ffffffff16565b60135461272290919063ffffffff16565b90505f612a776002612a6984612a5b600f5488612d3390919063ffffffff16565b612daa90919063ffffffff16565b612daa90919063ffffffff16565b90505f612aa183612a9360105487612d3390919063ffffffff16565b612daa90919063ffffffff16565b90505f811115612ad857612ad7600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613062565b5b5f82118015612ae657505f86115b15612af657612af586836130aa565b5b5050505050505f601960146101000a81548160ff02191690831515021790555050565b5f805f9050600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612b9c57612b956064612b8760115486612d3390919063ffffffff16565b612daa90919063ffffffff16565b9050612c17565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c1657612c136064612c0560125486612d3390919063ffffffff16565b612daa90919063ffffffff16565b90505b5b5f811115612d1657612c6f8160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461276b90919063ffffffff16565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d0d919061341a565b60405180910390a35b612d29818461272290919063ffffffff16565b9150509392505050565b5f808303612d43575f9050612da4565b5f8284612d509190613e68565b9050828482612d5f91906138fa565b14612d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9690613f19565b60405180910390fd5b809150505b92915050565b5f612deb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061318a565b905092915050565b5f600267ffffffffffffffff811115612e0f57612e0e613f37565b5b604051908082528060200260200182016040528015612e3d5781602001602082028036833780820191505090505b50905030815f81518110612e5457612e53613f64565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f1c9190613fa5565b81600181518110612f3057612f2f613f64565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f963060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3a565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612ff89594939291906140c0565b5f604051808303815f87803b15801561300f575f80fd5b505af1158015613021573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613056929190614118565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156130a5573d5f803e3d5ffd5b505050565b6130d63060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3a565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806131206112a7565b426040518863ffffffff1660e01b815260040161314296959493929190614146565b60606040518083038185885af115801561315e573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061318391906141b9565b5050505050565b5f80831182906131d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c79190613275565b60405180910390fd5b505f83856131de91906138fa565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613222578082015181840152602081019050613207565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613247826131eb565b61325181856131f5565b9350613261818560208601613205565b61326a8161322d565b840191505092915050565b5f6020820190508181035f83015261328d818461323d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132c282613299565b9050919050565b6132d2816132b8565b81146132dc575f80fd5b50565b5f813590506132ed816132c9565b92915050565b5f819050919050565b613305816132f3565b811461330f575f80fd5b50565b5f81359050613320816132fc565b92915050565b5f806040838503121561333c5761333b613295565b5b5f613349858286016132df565b925050602061335a85828601613312565b9150509250929050565b5f8115159050919050565b61337881613364565b82525050565b5f6020820190506133915f83018461336f565b92915050565b5f819050919050565b5f6133ba6133b56133b084613299565b613397565b613299565b9050919050565b5f6133cb826133a0565b9050919050565b5f6133dc826133c1565b9050919050565b6133ec816133d2565b82525050565b5f6020820190506134055f8301846133e3565b92915050565b613414816132f3565b82525050565b5f60208201905061342d5f83018461340b565b92915050565b61343c81613364565b8114613446575f80fd5b50565b5f8135905061345781613433565b92915050565b5f806040838503121561347357613472613295565b5b5f613480858286016132df565b925050602061349185828601613449565b9150509250929050565b5f805f606084860312156134b2576134b1613295565b5b5f6134bf868287016132df565b93505060206134d0868287016132df565b92505060406134e186828701613312565b9150509250925092565b5f60208284031215613500576134ff613295565b5b5f61350d84828501613449565b91505092915050565b61351f816132b8565b82525050565b5f6020820190506135385f830184613516565b92915050565b5f60ff82169050919050565b6135538161353e565b82525050565b5f60208201905061356c5f83018461354a565b92915050565b5f6020828403121561358757613586613295565b5b5f61359484828501613312565b91505092915050565b5f602082840312156135b2576135b1613295565b5b5f6135bf848285016132df565b91505092915050565b5f80604083850312156135de576135dd613295565b5b5f6135eb85828601613312565b92505060206135fc85828601613312565b9150509250929050565b5f61361082613299565b9050919050565b61362081613606565b82525050565b5f6020820190506136395f830184613617565b92915050565b5f806040838503121561365557613654613295565b5b5f613662858286016132df565b9250506020613673858286016132df565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806136c157607f821691505b6020821081036136d4576136d361367d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61370e6020836131f5565b9150613719826136da565b602082019050919050565b5f6020820190508181035f83015261373b81613702565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f5f8201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b5f61379c6023836131f5565b91506137a782613742565b604082019050919050565b5f6020820190508181035f8301526137c981613790565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e2034352500005f82015250565b5f613804601e836131f5565b915061380f826137d0565b602082019050919050565b5f6020820190508181035f830152613831816137f8565b9050919050565b7f42757920746178206d757374206265206c657373207468616e203330250000005f82015250565b5f61386c601d836131f5565b915061387782613838565b602082019050919050565b5f6020820190508181035f83015261389981613860565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613904826132f3565b915061390f836132f3565b92508261391f5761391e6138a0565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f776572207468615f8201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b5f6139846026836131f5565b915061398f8261392a565b604082019050919050565b5f6020820190508181035f8301526139b181613978565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c6573735f8201527f207468616e203735250000000000000000000000000000000000000000000000602082015250565b5f613a126029836131f5565b9150613a1d826139b8565b604082019050919050565b5f6020820190508181035f830152613a3f81613a06565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613aa06024836131f5565b9150613aab82613a46565b604082019050919050565b5f6020820190508181035f830152613acd81613a94565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613b2e6024836131f5565b9150613b3982613ad4565b604082019050919050565b5f6020820190508181035f830152613b5b81613b22565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bbc6022836131f5565b9150613bc782613b62565b604082019050919050565b5f6020820190508181035f830152613be981613bb0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613c4a6025836131f5565b9150613c5582613bf0565b604082019050919050565b5f6020820190508181035f830152613c7781613c3e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613cd86023836131f5565b9150613ce382613c7e565b604082019050919050565b5f6020820190508181035f830152613d0581613ccc565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f613d666028836131f5565b9150613d7182613d0c565b604082019050919050565b5f6020820190508181035f830152613d9381613d5a565b9050919050565b5f613da4826132f3565b9150613daf836132f3565b9250828203905081811115613dc757613dc66138cd565b5b92915050565b5f613dd7826132f3565b9150613de2836132f3565b9250828201905080821115613dfa57613df96138cd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613e34601b836131f5565b9150613e3f82613e00565b602082019050919050565b5f6020820190508181035f830152613e6181613e28565b9050919050565b5f613e72826132f3565b9150613e7d836132f3565b9250828202613e8b816132f3565b91508282048414831517613ea257613ea16138cd565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f036021836131f5565b9150613f0e82613ea9565b604082019050919050565b5f6020820190508181035f830152613f3081613ef7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613f9f816132c9565b92915050565b5f60208284031215613fba57613fb9613295565b5b5f613fc784828501613f91565b91505092915050565b5f819050919050565b5f613ff3613fee613fe984613fd0565b613397565b6132f3565b9050919050565b61400381613fd9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61403b816132b8565b82525050565b5f61404c8383614032565b60208301905092915050565b5f602082019050919050565b5f61406e82614009565b6140788185614013565b935061408383614023565b805f5b838110156140b357815161409a8882614041565b97506140a583614058565b925050600181019050614086565b5085935050505092915050565b5f60a0820190506140d35f83018861340b565b6140e06020830187613ffa565b81810360408301526140f28186614064565b90506141016060830185613516565b61410e608083018461340b565b9695505050505050565b5f60408201905061412b5f83018561340b565b818103602083015261413d8184614064565b90509392505050565b5f60c0820190506141595f830189613516565b614166602083018861340b565b6141736040830187613ffa565b6141806060830186613ffa565b61418d6080830185613516565b61419a60a083018461340b565b979650505050505050565b5f815190506141b3816132fc565b92915050565b5f805f606084860312156141d0576141cf613295565b5b5f6141dd868287016141a5565b93505060206141ee868287016141a5565b92505060406141ff868287016141a5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207a8675f7f973a54ff9bbd2db80075d6525d29f6d7ea200727bd4b3377bfe2f0f64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106102cc575f3560e01c8063914eb66a11610174578063c8607952116100db578063ec28438a11610094578063f0cd1dac1161006e578063f0cd1dac14610aff578063f1d5f51714610b29578063f84ba65d14610b51578063f872858a14610b79576102d3565b8063ec28438a14610a87578063eea5b63f14610aaf578063ef422a1814610ad7576102d3565b8063c860795214610967578063c867d60b14610991578063d158272d146109cd578063da00097d146109f7578063dc44b6a014610a21578063dd62ed3e14610a4b576102d3565b8063a5d69d1f1161012d578063a5d69d1f1461085f578063a9059cbb14610887578063aa35822c146108c3578063c49b9a80146108eb578063c5d2418914610913578063c816841b1461093d576102d3565b8063914eb66a1461076757806395d89b411461077d578063a073d37f146107a7578063a08e671f146107d1578063a11a1682146107fb578063a457c2d714610823576102d3565b80633ecad2711161023357806370a08231116101ec57806382eefb43116101c657806382eefb43146106ad57806388790a68146106d75780638b42507f146107015780638da5cb5b1461073d576102d3565b806370a082311461061d5780637d1db4a514610659578063807c2d9c14610683576102d3565b80633ecad271146104ff5780634a74bb021461053b5780634cb80fd5146105655780635342acb41461058d57806357a5802f146105c957806361a23c69146105f3576102d3565b80632563ae83116102855780632563ae83146103f557806327c8f8351461041d5780632b112e4914610447578063313ce56714610471578063395093511461049b5780633b97084a146104d7576102d3565b806306fdde03146102d7578063095ea7b3146103015780631694505e1461033d57806318160ddd146103675780632198cf6c1461039157806323b872dd146103b9576102d3565b366102d357005b5f80fd5b3480156102e2575f80fd5b506102eb610ba3565b6040516102f89190613275565b60405180910390f35b34801561030c575f80fd5b5061032760048036038101906103229190613326565b610c33565b604051610334919061337e565b60405180910390f35b348015610348575f80fd5b50610351610c50565b60405161035e91906133f2565b60405180910390f35b348015610372575f80fd5b5061037b610c75565b604051610388919061341a565b60405180910390f35b34801561039c575f80fd5b506103b760048036038101906103b2919061345d565b610c7e565b005b3480156103c4575f80fd5b506103df60048036038101906103da919061349b565b610d6a565b6040516103ec919061337e565b60405180910390f35b348015610400575f80fd5b5061041b600480360381019061041691906134eb565b610e3f565b005b348015610428575f80fd5b50610431610ef0565b60405161043e9190613525565b60405180910390f35b348015610452575f80fd5b5061045b610f14565b604051610468919061341a565b60405180910390f35b34801561047c575f80fd5b50610485610f57565b6040516104929190613559565b60405180910390f35b3480156104a6575f80fd5b506104c160048036038101906104bc9190613326565b610f6c565b6040516104ce919061337e565b60405180910390f35b3480156104e2575f80fd5b506104fd60048036038101906104f89190613572565b61101a565b005b34801561050a575f80fd5b506105256004803603810190610520919061359d565b6110fb565b604051610532919061337e565b60405180910390f35b348015610546575f80fd5b5061054f611118565b60405161055c919061337e565b60405180910390f35b348015610570575f80fd5b5061058b6004803603810190610586919061359d565b61112b565b005b348015610598575f80fd5b506105b360048036038101906105ae919061359d565b611203565b6040516105c0919061337e565b60405180910390f35b3480156105d4575f80fd5b506105dd611220565b6040516105ea919061341a565b60405180910390f35b3480156105fe575f80fd5b50610607611226565b604051610614919061341a565b60405180910390f35b348015610628575f80fd5b50610643600480360381019061063e919061359d565b61122c565b604051610650919061341a565b60405180910390f35b348015610664575f80fd5b5061066d611272565b60405161067a919061341a565b60405180910390f35b34801561068e575f80fd5b50610697611278565b6040516106a4919061341a565b60405180910390f35b3480156106b8575f80fd5b506106c161127e565b6040516106ce919061341a565b60405180910390f35b3480156106e2575f80fd5b506106eb611284565b6040516106f8919061341a565b60405180910390f35b34801561070c575f80fd5b506107276004803603810190610722919061359d565b61128a565b604051610734919061337e565b60405180910390f35b348015610748575f80fd5b506107516112a7565b60405161075e9190613525565b60405180910390f35b348015610772575f80fd5b5061077b6112ce565b005b348015610788575f80fd5b5061079161141c565b60405161079e9190613275565b60405180910390f35b3480156107b2575f80fd5b506107bb6114ac565b6040516107c8919061341a565b60405180910390f35b3480156107dc575f80fd5b506107e56114b5565b6040516107f2919061341a565b60405180910390f35b348015610806575f80fd5b50610821600480360381019061081c91906135c8565b6114bb565b005b34801561082e575f80fd5b5061084960048036038101906108449190613326565b6115c4565b604051610856919061337e565b60405180910390f35b34801561086a575f80fd5b50610885600480360381019061088091906134eb565b61168c565b005b348015610892575f80fd5b506108ad60048036038101906108a89190613326565b61173d565b6040516108ba919061337e565b60405180910390f35b3480156108ce575f80fd5b506108e960048036038101906108e491906135c8565b61175b565b005b3480156108f6575f80fd5b50610911600480360381019061090c91906134eb565b611864565b005b34801561091e575f80fd5b5061092761194c565b604051610934919061341a565b60405180910390f35b348015610948575f80fd5b50610951611952565b60405161095e9190613525565b60405180910390f35b348015610972575f80fd5b5061097b611977565b604051610988919061341a565b60405180910390f35b34801561099c575f80fd5b506109b760048036038101906109b2919061359d565b61197d565b6040516109c4919061337e565b60405180910390f35b3480156109d8575f80fd5b506109e161199a565b6040516109ee9190613626565b60405180910390f35b348015610a02575f80fd5b50610a0b6119c0565b604051610a18919061337e565b60405180910390f35b348015610a2c575f80fd5b50610a356119d3565b604051610a42919061341a565b60405180910390f35b348015610a56575f80fd5b50610a716004803603810190610a6c919061363f565b6119d9565b604051610a7e919061341a565b60405180910390f35b348015610a92575f80fd5b50610aad6004803603810190610aa89190613572565b611a5b565b005b348015610aba575f80fd5b50610ad56004803603810190610ad091906135c8565b611b4a565b005b348015610ae2575f80fd5b50610afd6004803603810190610af8919061345d565b611c53565b005b348015610b0a575f80fd5b50610b13611d3f565b604051610b20919061341a565b60405180910390f35b348015610b34575f80fd5b50610b4f6004803603810190610b4a9190613572565b611d45565b005b348015610b5c575f80fd5b50610b776004803603810190610b72919061345d565b611e34565b005b348015610b84575f80fd5b50610b8d611f20565b604051610b9a919061337e565b60405180910390f35b606060028054610bb2906136aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610bde906136aa565b8015610c295780601f10610c0057610100808354040283529160200191610c29565b820191905f5260205f20905b815481529060010190602001808311610c0c57829003601f168201915b5050505050905090565b5f610c46610c3f611f33565b8484611f3a565b6001905092915050565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601454905090565b610c86611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0990613724565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f610d768484846120fd565b50610e3484610d83611f33565b610e2f8560405180606001604052806028815260200161420a6028913960065f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610de6611f33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126c09092919063ffffffff16565b611f3a565b600190509392505050565b610e47611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613724565b60405180910390fd5b80601960176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b5f610f52610f417f000000000000000000000000000000000000000000000000000000000000dead61122c565b60145461272290919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b5f611010610f78611f33565b8461100b8560065f610f88611f33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461276b90919063ffffffff16565b611f3a565b6001905092915050565b611022611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a590613724565b60405180910390fd5b600181116110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e8906137b2565b60405180910390fd5b8060178190555050565b600a602052805f5260405f205f915054906101000a900460ff1681565b601960159054906101000a900460ff1681565b611133611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690613724565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6007602052805f5260405f205f915054906101000a900460ff1681565b600f5481565b60105481565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60155481565b60165481565b60125481565b600d5481565b6009602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112d6611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990613724565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606003805461142b906136aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611457906136aa565b80156114a25780601f10611479576101008083540402835291602001916114a2565b820191905f5260205f20905b81548152906001019060200180831161148557829003601f168201915b5050505050905090565b5f601754905090565b60135481565b6114c3611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461154f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154690613724565b60405180910390fd5b81600d8190555080600e81905550611574600e54600d5461276b90919063ffffffff16565b601281905550602d60125411156115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b79061381a565b60405180910390fd5b5050565b5f6116826115d0611f33565b8461167d856040518060600160405280602581526020016142326025913960065f6115f9611f33565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126c09092919063ffffffff16565b611f3a565b6001905092915050565b611694611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171790613724565b60405180910390fd5b80601960166101000a81548160ff02191690831515021790555050565b5f611750611749611f33565b84846120fd565b506001905092915050565b611763611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e690613724565b60405180910390fd5b81600b8190555080600c81905550611814600c54600b5461276b90919063ffffffff16565b601181905550601e6011541115611860576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185790613882565b60405180910390fd5b5050565b61186c611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ef90613724565b60405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611941919061337e565b60405180910390a150565b600c5481565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6008602052805f5260405f205f915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960169054906101000a900460ff1681565b600b5481565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611a63611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae690613724565b60405180910390fd5b60c8601454611afe91906138fa565b811015611b40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b379061399a565b60405180910390fd5b8060158190555050565b611b52611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd590613724565b60405180910390fd5b81600f8190555080601081905550611c03601054600f5461276b90919063ffffffff16565b601381905550604b6013541115611c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4690613a28565b60405180910390fd5b5050565b611c5b611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde90613724565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60115481565b611d4d611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090613724565b60405180910390fd5b60c8601454611de891906138fa565b811015611e2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2190613ab6565b60405180910390fd5b8060168190555050565b611e3c611f33565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebf90613724565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601960179054906101000a900460ff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9f90613b44565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612016576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200d90613bd2565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516120f0919061341a565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361216c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161216390613c60565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036121da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d190613cee565b60405180910390fd5b601960149054906101000a900460ff1615612201576121fa8484846127c8565b90506126b9565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615801561229f575060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156122ea576015548211156122e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e090613d7c565b60405180910390fd5b5b5f6122f43061122c565b90505f60175482101590508080156123195750601960149054906101000a900460ff16155b801561236c5750600a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123845750601960159054906101000a900460ff165b156123ae57601960169054906101000a900460ff16156123a45760175491505b6123ad82612992565b5b612435846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060055f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126c09092919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60075f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612512575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61252657612521878787612b19565b612528565b845b9050601960179054906101000a900460ff16801561258d575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156125bb576016546125b0826125a28961122c565b61276b90919063ffffffff16565b11156125ba575f80fd5b5b61260b8160055f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461276b90919063ffffffff16565b60055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516126a9919061341a565b60405180910390a3600193505050505b9392505050565b5f838311158290612707576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126fe9190613275565b60405180910390fd5b505f83856127159190613d9a565b9050809150509392505050565b5f61276383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506126c0565b905092915050565b5f8082846127799190613dcd565b9050838110156127be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127b590613e4a565b60405180910390fd5b8091505092915050565b5f612850826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060055f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546126c09092919063ffffffff16565b60055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506128e18260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461276b90919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161297f919061341a565b60405180910390a3600190509392505050565b6001601960146101000a81548160ff0219169083151502179055505f6129ea60026129dc6013546129ce600f5487612d3390919063ffffffff16565b612daa90919063ffffffff16565b612daa90919063ffffffff16565b90505f612a00828461272290919063ffffffff16565b9050612a0b81612df3565b5f4790505f612a3a612a296002600f54612daa90919063ffffffff16565b60135461272290919063ffffffff16565b90505f612a776002612a6984612a5b600f5488612d3390919063ffffffff16565b612daa90919063ffffffff16565b612daa90919063ffffffff16565b90505f612aa183612a9360105487612d3390919063ffffffff16565b612daa90919063ffffffff16565b90505f811115612ad857612ad7600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613062565b5b5f82118015612ae657505f86115b15612af657612af586836130aa565b5b5050505050505f601960146101000a81548160ff02191690831515021790555050565b5f805f9050600a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612b9c57612b956064612b8760115486612d3390919063ffffffff16565b612daa90919063ffffffff16565b9050612c17565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612c1657612c136064612c0560125486612d3390919063ffffffff16565b612daa90919063ffffffff16565b90505b5b5f811115612d1657612c6f8160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461276b90919063ffffffff16565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d0d919061341a565b60405180910390a35b612d29818461272290919063ffffffff16565b9150509392505050565b5f808303612d43575f9050612da4565b5f8284612d509190613e68565b9050828482612d5f91906138fa565b14612d9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9690613f19565b60405180910390fd5b809150505b92915050565b5f612deb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061318a565b905092915050565b5f600267ffffffffffffffff811115612e0f57612e0e613f37565b5b604051908082528060200260200182016040528015612e3d5781602001602082028036833780820191505090505b50905030815f81518110612e5457612e53613f64565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ef8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612f1c9190613fa5565b81600181518110612f3057612f2f613f64565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612f963060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3a565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612ff89594939291906140c0565b5f604051808303815f87803b15801561300f575f80fd5b505af1158015613021573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613056929190614118565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156130a5573d5f803e3d5ffd5b505050565b6130d63060185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611f3a565b60185f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806131206112a7565b426040518863ffffffff1660e01b815260040161314296959493929190614146565b60606040518083038185885af115801561315e573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061318391906141b9565b5050505050565b5f80831182906131d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131c79190613275565b60405180910390fd5b505f83856131de91906138fa565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613222578082015181840152602081019050613207565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613247826131eb565b61325181856131f5565b9350613261818560208601613205565b61326a8161322d565b840191505092915050565b5f6020820190508181035f83015261328d818461323d565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6132c282613299565b9050919050565b6132d2816132b8565b81146132dc575f80fd5b50565b5f813590506132ed816132c9565b92915050565b5f819050919050565b613305816132f3565b811461330f575f80fd5b50565b5f81359050613320816132fc565b92915050565b5f806040838503121561333c5761333b613295565b5b5f613349858286016132df565b925050602061335a85828601613312565b9150509250929050565b5f8115159050919050565b61337881613364565b82525050565b5f6020820190506133915f83018461336f565b92915050565b5f819050919050565b5f6133ba6133b56133b084613299565b613397565b613299565b9050919050565b5f6133cb826133a0565b9050919050565b5f6133dc826133c1565b9050919050565b6133ec816133d2565b82525050565b5f6020820190506134055f8301846133e3565b92915050565b613414816132f3565b82525050565b5f60208201905061342d5f83018461340b565b92915050565b61343c81613364565b8114613446575f80fd5b50565b5f8135905061345781613433565b92915050565b5f806040838503121561347357613472613295565b5b5f613480858286016132df565b925050602061349185828601613449565b9150509250929050565b5f805f606084860312156134b2576134b1613295565b5b5f6134bf868287016132df565b93505060206134d0868287016132df565b92505060406134e186828701613312565b9150509250925092565b5f60208284031215613500576134ff613295565b5b5f61350d84828501613449565b91505092915050565b61351f816132b8565b82525050565b5f6020820190506135385f830184613516565b92915050565b5f60ff82169050919050565b6135538161353e565b82525050565b5f60208201905061356c5f83018461354a565b92915050565b5f6020828403121561358757613586613295565b5b5f61359484828501613312565b91505092915050565b5f602082840312156135b2576135b1613295565b5b5f6135bf848285016132df565b91505092915050565b5f80604083850312156135de576135dd613295565b5b5f6135eb85828601613312565b92505060206135fc85828601613312565b9150509250929050565b5f61361082613299565b9050919050565b61362081613606565b82525050565b5f6020820190506136395f830184613617565b92915050565b5f806040838503121561365557613654613295565b5b5f613662858286016132df565b9250506020613673858286016132df565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806136c157607f821691505b6020821081036136d4576136d361367d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61370e6020836131f5565b9150613719826136da565b602082019050919050565b5f6020820190508181035f83015261373b81613702565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f5f8201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b5f61379c6023836131f5565b91506137a782613742565b604082019050919050565b5f6020820190508181035f8301526137c981613790565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e2034352500005f82015250565b5f613804601e836131f5565b915061380f826137d0565b602082019050919050565b5f6020820190508181035f830152613831816137f8565b9050919050565b7f42757920746178206d757374206265206c657373207468616e203330250000005f82015250565b5f61386c601d836131f5565b915061387782613838565b602082019050919050565b5f6020820190508181035f83015261389981613860565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613904826132f3565b915061390f836132f3565b92508261391f5761391e6138a0565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f776572207468615f8201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b5f6139846026836131f5565b915061398f8261392a565b604082019050919050565b5f6020820190508181035f8301526139b181613978565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c6573735f8201527f207468616e203735250000000000000000000000000000000000000000000000602082015250565b5f613a126029836131f5565b9150613a1d826139b8565b604082019050919050565b5f6020820190508181035f830152613a3f81613a06565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613aa06024836131f5565b9150613aab82613a46565b604082019050919050565b5f6020820190508181035f830152613acd81613a94565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613b2e6024836131f5565b9150613b3982613ad4565b604082019050919050565b5f6020820190508181035f830152613b5b81613b22565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613bbc6022836131f5565b9150613bc782613b62565b604082019050919050565b5f6020820190508181035f830152613be981613bb0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613c4a6025836131f5565b9150613c5582613bf0565b604082019050919050565b5f6020820190508181035f830152613c7781613c3e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613cd86023836131f5565b9150613ce382613c7e565b604082019050919050565b5f6020820190508181035f830152613d0581613ccc565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f613d666028836131f5565b9150613d7182613d0c565b604082019050919050565b5f6020820190508181035f830152613d9381613d5a565b9050919050565b5f613da4826132f3565b9150613daf836132f3565b9250828203905081811115613dc757613dc66138cd565b5b92915050565b5f613dd7826132f3565b9150613de2836132f3565b9250828201905080821115613dfa57613df96138cd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613e34601b836131f5565b9150613e3f82613e00565b602082019050919050565b5f6020820190508181035f830152613e6181613e28565b9050919050565b5f613e72826132f3565b9150613e7d836132f3565b9250828202613e8b816132f3565b91508282048414831517613ea257613ea16138cd565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f036021836131f5565b9150613f0e82613ea9565b604082019050919050565b5f6020820190508181035f830152613f3081613ef7565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050613f9f816132c9565b92915050565b5f60208284031215613fba57613fb9613295565b5b5f613fc784828501613f91565b91505092915050565b5f819050919050565b5f613ff3613fee613fe984613fd0565b613397565b6132f3565b9050919050565b61400381613fd9565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61403b816132b8565b82525050565b5f61404c8383614032565b60208301905092915050565b5f602082019050919050565b5f61406e82614009565b6140788185614013565b935061408383614023565b805f5b838110156140b357815161409a8882614041565b97506140a583614058565b925050600181019050614086565b5085935050505092915050565b5f60a0820190506140d35f83018861340b565b6140e06020830187613ffa565b81810360408301526140f28186614064565b90506141016060830185613516565b61410e608083018461340b565b9695505050505050565b5f60408201905061412b5f83018561340b565b818103602083015261413d8184614064565b90509392505050565b5f60c0820190506141595f830189613516565b614166602083018861340b565b6141736040830187613ffa565b6141806060830186613ffa565b61418d6080830185613516565b61419a60a083018461340b565b979650505050505050565b5f815190506141b3816132fc565b92915050565b5f805f606084860312156141d0576141cf613295565b5b5f6141dd868287016141a5565b93505060206141ee868287016141a5565b92505060406141ff868287016141a5565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212207a8675f7f973a54ff9bbd2db80075d6525d29f6d7ea200727bd4b3377bfe2f0f64736f6c63430008140033

Deployed Bytecode Sourcemap

13978:14041:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17883:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19177:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15425:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18160:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21400:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22948:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21279:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14342:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22409:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18069:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18546:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21743:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14734:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15540:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21946:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14563:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14964:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15005:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18268:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15248:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15302:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15093:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14875:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14679:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5769:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5994:145;;;;;;;;;;;;;:::i;:::-;;17974:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19049:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15138:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20318:345;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18772:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22272:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22773:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19973:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22093:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14830:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15473:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14918:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14620:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14223:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15587:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14788:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18395:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21065:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20675:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19830:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15049:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21543:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19691:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15639:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17883:83;17920:13;17953:5;17946:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17883:83;:::o;19177:161::-;19252:4;19269:39;19278:12;:10;:12::i;:::-;19292:7;19301:6;19269:8;:39::i;:::-;19326:4;19319:11;;19177:161;;;;:::o;15425:41::-;;;;;;;;;;;;;:::o;18160:100::-;18213:7;18240:12;;18233:19;;18160:100;:::o;21400:135::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21521:6:::1;21491:19;:27;21511:6;21491:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;21400:135:::0;;:::o;22948:313::-;23046:4;23063:36;23073:6;23081:9;23092:6;23063:9;:36::i;:::-;;23110:121;23119:6;23127:12;:10;:12::i;:::-;23141:89;23179:6;23141:89;;;;;;;;;;;;;;;;;:11;:19;23153:6;23141:19;;;;;;;;;;;;;;;:33;23161:12;:10;:12::i;:::-;23141:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23110:8;:121::i;:::-;23249:4;23242:11;;22948:313;;;;;:::o;21279:113::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21376:8:::1;21357:16;;:27;;;;;;;;;;;;;;;;;;21279:113:::0;:::o;14342:81::-;;;:::o;22409:128::-;22462:7;22489:40;22506:22;22516:11;22506:9;:22::i;:::-;22489:12;;:16;;:40;;;;:::i;:::-;22482:47;;22409:128;:::o;18069:83::-;18110:5;18135:9;;;;;;;;;;;18128:16;;18069:83;:::o;18546:218::-;18634:4;18651:83;18660:12;:10;:12::i;:::-;18674:7;18683:50;18722:10;18683:11;:25;18695:12;:10;:12::i;:::-;18683:25;;;;;;;;;;;;;;;:34;18709:7;18683:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18651:8;:83::i;:::-;18752:4;18745:11;;18546:218;;;;:::o;21743:195::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21844:1:::1;21833:8;:12;21825:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;21922:8;21896:23;:34;;;;21743:195:::0;:::o;14734:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15540:40::-;;;;;;;;;;;;;:::o;21946:139::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22066:10:::1;22033:22;;:44;;;;;;;;;;;;;;;;;;21946:139:::0;:::o;14563:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;14964:34::-;;;;:::o;15005:35::-;;;;:::o;18268:119::-;18334:7;18361:9;:18;18371:7;18361:18;;;;;;;;;;;;;;;;18354:25;;18268:119;;;:::o;15248:47::-;;;;:::o;15302:45::-;;;;:::o;15093:38::-;;;;:::o;14875:36::-;;;;:::o;14679:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5769:79::-;5807:7;5834:6;;;;;;;;;;;5827:13;;5769:79;:::o;5994:145::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6098:1:::1;6061:40;;6082:6;::::0;::::1;;;;;;;;6061:40;;;;;;;;;;;;6129:1;6112:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5994:145::o:0;17974:87::-;18013:13;18046:7;18039:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17974:87;:::o;19049:120::-;19111:7;19138:23;;19131:30;;19049:120;:::o;15138:44::-;;;;:::o;20318:345::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20442:15:::1;20422:17;:35;;;;20488:15;20468:17;:35;;;;20537:40;20559:17;;20537;;:21;;:40;;;;:::i;:::-;20516:18;:61;;;;20618:2;20596:18;;:24;;20588:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20318:345:::0;;:::o;18772:269::-;18865:4;18882:129;18891:12;:10;:12::i;:::-;18905:7;18914:96;18953:15;18914:96;;;;;;;;;;;;;;;;;:11;:25;18926:12;:10;:12::i;:::-;18914:25;;;;;;;;;;;;;;;:34;18940:7;18914:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18882:8;:129::i;:::-;19029:4;19022:11;;18772:269;;;;:::o;22272:125::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22381:8:::1;22353:25;;:36;;;;;;;;;;;;;;;;;;22272:125:::0;:::o;22773:167::-;22851:4;22868:42;22878:12;:10;:12::i;:::-;22892:9;22903:6;22868:9;:42::i;:::-;;22928:4;22921:11;;22773:167;;;;:::o;19973:337::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20095:15:::1;20076:16;:34;;;;20140:15;20121:16;:34;;;;20188:38;20209:16;;20188;;:20;;:38;;;;:::i;:::-;20168:17;:58;;;;20266:2;20245:17;;:23;;20237:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;19973:337:::0;;:::o;22093:171::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22194:8:::1;22170:21;;:32;;;;;;;;;;;;;;;;;;22218:38;22247:8;22218:38;;;;;;:::i;:::-;;;;;;;;22093:171:::0;:::o;14830:36::-;;;;:::o;15473:26::-;;;;;;;;;;;;;:::o;14918:37::-;;;;:::o;14620:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14223:99::-;;;;;;;;;;;;;:::o;15587:45::-;;;;;;;;;;;;;:::o;14788:35::-;;;;:::o;18395:143::-;18476:7;18503:11;:18;18515:5;18503:18;;;;;;;;;;;;;;;:27;18522:7;18503:27;;;;;;;;;;;;;;;;18496:34;;18395:143;;;;:::o;21065:206::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21180:3:::1;21165:12;;:18;;;;:::i;:::-;21150:11;:33;;21142:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;21252:11;21237:12;:26;;;;21065:206:::0;:::o;20675:378::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20812:17:::1;20794:15;:35;;;;20858:17;20840:15;:35;;;;20915:36;20935:15;;20915;;:19;;:36;;;;:::i;:::-;20888:24;:63;;;;20997:2;20970:24;;:29;;20962:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;20675:378:::0;;:::o;19830:135::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19949:8:::1;19920:17;:26;19938:7;19920:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;19830:135:::0;;:::o;15049:37::-;;;;:::o;21543:192::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21650:3:::1;21635:12;;:18;;;;:::i;:::-;21623:8;:30;;21615:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;21719:8;21705:10;:22;;;;21543:192:::0;:::o;19691:127::-;5913:12;:10;:12::i;:::-;5903:22;;:6;;;;;;;;;;:22;;;5895:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19804:6:::1;19778:15;:23;19794:6;19778:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19691:127:::0;;:::o;15639:35::-;;;;;;;;;;;;;:::o;103:115::-;156:15;199:10;184:26;;103:115;:::o;19346:337::-;19456:1;19439:19;;:5;:19;;;19431:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19537:1;19518:21;;:7;:21;;;19510:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19621:6;19591:11;:18;19603:5;19591:18;;;;;;;;;;;;;;;:27;19610:7;19591:27;;;;;;;;;;;;;;;:36;;;;19659:7;19643:32;;19652:5;19643:32;;;19668:6;19643:32;;;;;;:::i;:::-;;;;;;;;19346:337;;;:::o;23269:1707::-;23356:4;23401:1;23383:20;;:6;:20;;;23375:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23485:1;23464:23;;:9;:23;;;23456:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23543:16;;;;;;;;;;;23540:1429;;;23593:41;23608:6;23616:9;23627:6;23593:14;:41::i;:::-;23586:48;;;;23540:1429;23690:15;:23;23706:6;23690:23;;;;;;;;;;;;;;;;;;;;;;;;;23689:24;:55;;;;;23718:15;:26;23734:9;23718:26;;;;;;;;;;;;;;;;;;;;;;;;;23717:27;23689:55;23686:170;;;23783:12;;23773:6;:22;;23765:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23686:170;23884:28;23915:24;23933:4;23915:9;:24::i;:::-;23884:55;;23954:28;24009:23;;23985:20;:47;;23954:78;;24065:23;:44;;;;;24093:16;;;;;;;;;;;24092:17;24065:44;:69;;;;;24114:12;:20;24127:6;24114:20;;;;;;;;;;;;;;;;;;;;;;;;;24113:21;24065:69;:94;;;;;24138:21;;;;;;;;;;;24065:94;24061:305;;;24197:25;;;;;;;;;;;24194:97;;;24268:23;;24245:46;;24194:97;24310:36;24325:20;24310:14;:36::i;:::-;24061:305;24402:53;24424:6;24402:53;;;;;;;;;;;;;;;;;:9;:17;24412:6;24402:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24382:9;:17;24392:6;24382:17;;;;;;;;;;;;;;;:73;;;;24472:19;24495:17;:25;24513:6;24495:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;24524:17;:28;24542:9;24524:28;;;;;;;;;;;;;;;;;;;;;;;;;24495:57;24494:148;;24608:34;24616:6;24624:9;24635:6;24608:7;:34::i;:::-;24494:148;;;24599:6;24494:148;24472:170;;24662:16;;;;;;;;;;;:51;;;;;24683:19;:30;24703:9;24683:30;;;;;;;;;;;;;;;;;;;;;;;;;24682:31;24662:51;24659:133;;;24781:10;;24740:37;24765:11;24740:20;24750:9;24740;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;24732:60;;;;;;24659:133;24832:37;24857:11;24832:9;:20;24842:9;24832:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24809:9;:20;24819:9;24809:20;;;;;;;;;;;;;;;:60;;;;24908:9;24891:40;;24900:6;24891:40;;;24919:11;24891:40;;;;;;:::i;:::-;;;;;;;;24953:4;24946:11;;;;;23269:1707;;;;;;:::o;1504:192::-;1590:7;1623:1;1618;:6;;1626:12;1610:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1650:9;1666:1;1662;:5;;;;:::i;:::-;1650:17;;1687:1;1680:8;;;1504:192;;;;;:::o;1360:136::-;1418:7;1445:43;1449:1;1452;1445:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1438:50;;1360:136;;;;:::o;1171:181::-;1229:7;1249:9;1265:1;1261;:5;;;;:::i;:::-;1249:17;;1290:1;1285;:6;;1277:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1343:1;1336:8;;;1171:181;;;;:::o;24984:330::-;25077:4;25114:53;25136:6;25114:53;;;;;;;;;;;;;;;;;:9;:17;25124:6;25114:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25094:9;:17;25104:6;25094:17;;;;;;;;;;;;;;;:73;;;;25201:32;25226:6;25201:9;:20;25211:9;25201:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25178:9;:20;25188:9;25178:20;;;;;;;;;;;;;;;:55;;;;25266:9;25249:35;;25258:6;25249:35;;;25277:6;25249:35;;;;;;:::i;:::-;;;;;;;;25302:4;25295:11;;24984:330;;;;;:::o;25322:859::-;16116:4;16097:16;;:23;;;;;;;;;;;;;;;;;;25404:19:::1;25426:65;25489:1;25426:58;25459:24;;25426:28;25438:15;;25426:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;25404:87;;25502:21;25526:24;25538:11;25526:7;:11;;:24;;;;:::i;:::-;25502:48;;25563:31;25580:13;25563:16;:31::i;:::-;25605:22;25630:21;25605:46;;25664:19;25686:52;25715:22;25735:1;25715:15;;:19;;:22;;;;:::i;:::-;25686:24;;:28;;:52;;;;:::i;:::-;25664:74;;25759:26;25788:59;25845:1;25788:52;25828:11;25788:35;25807:15;;25788:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25759:88;;25858:26;25887:52;25927:11;25887:35;25906:15;;25887:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;25858:81;;25976:1;25955:18;:22;25952:104;;;25992:64;26013:22;;;;;;;;;;;26037:18;25992:20;:64::i;:::-;25952:104;26093:1;26072:18;:22;:41;;;;;26112:1;26098:11;:15;26072:41;26069:104;;;26128:45;26141:11;26154:18;26128:12;:45::i;:::-;26069:104;25383:798;;;;;;16162:5:::0;16143:16;;:24;;;;;;;;;;;;;;;;;;25322:859;:::o;27388:622::-;27474:7;27504:17;27524:1;27504:21;;27549:12;:20;27562:6;27549:20;;;;;;;;;;;;;;;;;;;;;;;;;27546:223;;;27598:38;27632:3;27598:29;27609:17;;27598:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27586:50;;27546:223;;;27666:12;:23;27679:9;27666:23;;;;;;;;;;;;;;;;;;;;;;;;;27663:106;;;27718:39;27753:3;27718:30;27729:18;;27718:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27706:51;;27663:106;27546:223;27804:1;27792:9;:13;27789:173;;;27849:39;27878:9;27849;:24;27867:4;27849:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27822:9;:24;27840:4;27822:24;;;;;;;;;;;;;;;:66;;;;27933:4;27908:42;;27917:6;27908:42;;;27940:9;27908:42;;;;;;:::i;:::-;;;;;;;;27789:173;27981:21;27992:9;27981:6;:10;;:21;;;;:::i;:::-;27974:28;;;27388:622;;;;;:::o;1704:250::-;1762:7;1791:1;1786;:6;1782:47;;1816:1;1809:8;;;;1782:47;1841:9;1857:1;1853;:5;;;;:::i;:::-;1841:17;;1886:1;1881;1877;:5;;;;:::i;:::-;:10;1869:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1945:1;1938:8;;;1704:250;;;;;:::o;1962:132::-;2020:7;2047:39;2051:1;2054;2047:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2040:46;;1962:132;;;;:::o;26193:666::-;26319:21;26357:1;26343:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26319:40;;26388:4;26370;26375:1;26370:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26414:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26404:4;26409:1;26404:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26449:62;26466:4;26481:15;;;;;;;;;;;26499:11;26449:8;:62::i;:::-;26550:15;;;;;;;;;;;:66;;;26631:11;26657:1;26701:4;26728;26764:15;26550:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26816:35;26833:11;26846:4;26816:35;;;;;;;:::i;:::-;;;;;;;;26248:611;26193:666;:::o;22545:126::-;22637:9;:18;;:26;22656:6;22637:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22545:126;;:::o;26867:513::-;27015:62;27032:4;27047:15;;;;;;;;;;;27065:11;27015:8;:62::i;:::-;27120:15;;;;;;;;;;;:31;;;27159:9;27192:4;27212:11;27238:1;27281;27324:7;:5;:7::i;:::-;27346:15;27120:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26867:513;;:::o;2102:278::-;2188:7;2220:1;2216;:5;2223:12;2208:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2247:9;2263:1;2259;:5;;;;:::i;:::-;2247:17;;2371:1;2364:8;;;2102: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:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:116::-;4846:21;4861:5;4846:21;:::i;:::-;4839:5;4836:32;4826:60;;4882:1;4879;4872:12;4826:60;4776:116;:::o;4898:133::-;4941:5;4979:6;4966:20;4957:29;;4995:30;5019:5;4995:30;:::i;:::-;4898:133;;;;:::o;5037:468::-;5102:6;5110;5159:2;5147:9;5138:7;5134:23;5130:32;5127:119;;;5165:79;;:::i;:::-;5127:119;5285:1;5310:53;5355:7;5346:6;5335:9;5331:22;5310:53;:::i;:::-;5300:63;;5256:117;5412:2;5438:50;5480:7;5471:6;5460:9;5456:22;5438:50;:::i;:::-;5428:60;;5383:115;5037:468;;;;;:::o;5511:619::-;5588:6;5596;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;5511:619;;;;;:::o;6136:323::-;6192:6;6241:2;6229:9;6220:7;6216:23;6212:32;6209:119;;;6247:79;;:::i;:::-;6209:119;6367:1;6392:50;6434:7;6425:6;6414:9;6410:22;6392:50;:::i;:::-;6382:60;;6338:114;6136:323;;;;:::o;6465:118::-;6552:24;6570:5;6552:24;:::i;:::-;6547:3;6540:37;6465:118;;:::o;6589:222::-;6682:4;6720:2;6709:9;6705:18;6697:26;;6733:71;6801:1;6790:9;6786:17;6777:6;6733:71;:::i;:::-;6589:222;;;;:::o;6817:86::-;6852:7;6892:4;6885:5;6881:16;6870:27;;6817:86;;;:::o;6909:112::-;6992:22;7008:5;6992:22;:::i;:::-;6987:3;6980:35;6909:112;;:::o;7027:214::-;7116:4;7154:2;7143:9;7139:18;7131:26;;7167:67;7231:1;7220:9;7216:17;7207:6;7167:67;:::i;:::-;7027:214;;;;:::o;7247:329::-;7306:6;7355:2;7343:9;7334:7;7330:23;7326:32;7323:119;;;7361:79;;:::i;:::-;7323:119;7481:1;7506:53;7551:7;7542:6;7531:9;7527:22;7506:53;:::i;:::-;7496:63;;7452:117;7247:329;;;;:::o;7582:::-;7641:6;7690:2;7678:9;7669:7;7665:23;7661:32;7658:119;;;7696:79;;:::i;:::-;7658:119;7816:1;7841:53;7886:7;7877:6;7866:9;7862:22;7841:53;:::i;:::-;7831:63;;7787:117;7582:329;;;;:::o;7917:474::-;7985:6;7993;8042:2;8030:9;8021:7;8017:23;8013:32;8010:119;;;8048:79;;:::i;:::-;8010:119;8168:1;8193:53;8238:7;8229:6;8218:9;8214:22;8193:53;:::i;:::-;8183:63;;8139:117;8295:2;8321:53;8366:7;8357:6;8346:9;8342:22;8321:53;:::i;:::-;8311:63;;8266:118;7917:474;;;;;:::o;8397:104::-;8442:7;8471:24;8489:5;8471:24;:::i;:::-;8460:35;;8397:104;;;:::o;8507:142::-;8610:32;8636:5;8610:32;:::i;:::-;8605:3;8598:45;8507:142;;:::o;8655:254::-;8764:4;8802:2;8791:9;8787:18;8779:26;;8815:87;8899:1;8888:9;8884:17;8875:6;8815:87;:::i;:::-;8655:254;;;;:::o;8915:474::-;8983:6;8991;9040:2;9028:9;9019:7;9015:23;9011:32;9008:119;;;9046:79;;:::i;:::-;9008:119;9166:1;9191:53;9236:7;9227:6;9216:9;9212:22;9191:53;:::i;:::-;9181:63;;9137:117;9293:2;9319:53;9364:7;9355:6;9344:9;9340:22;9319:53;:::i;:::-;9309:63;;9264:118;8915:474;;;;;:::o;9395:180::-;9443:77;9440:1;9433:88;9540:4;9537:1;9530:15;9564:4;9561:1;9554:15;9581:320;9625:6;9662:1;9656:4;9652:12;9642:22;;9709:1;9703:4;9699:12;9730:18;9720:81;;9786:4;9778:6;9774:17;9764:27;;9720:81;9848:2;9840:6;9837:14;9817:18;9814:38;9811:84;;9867:18;;:::i;:::-;9811:84;9632:269;9581:320;;;:::o;9907:182::-;10047:34;10043:1;10035:6;10031:14;10024:58;9907:182;:::o;10095:366::-;10237:3;10258:67;10322:2;10317:3;10258:67;:::i;:::-;10251:74;;10334:93;10423:3;10334:93;:::i;:::-;10452:2;10447:3;10443:12;10436:19;;10095:366;;;:::o;10467:419::-;10633:4;10671:2;10660:9;10656:18;10648:26;;10720:9;10714:4;10710:20;10706:1;10695:9;10691:17;10684:47;10748:131;10874:4;10748:131;:::i;:::-;10740:139;;10467:419;;;:::o;10892:222::-;11032:34;11028:1;11020:6;11016:14;11009:58;11101:5;11096:2;11088:6;11084:15;11077:30;10892:222;:::o;11120:366::-;11262:3;11283:67;11347:2;11342:3;11283:67;:::i;:::-;11276:74;;11359:93;11448:3;11359:93;:::i;:::-;11477:2;11472:3;11468:12;11461:19;;11120:366;;;:::o;11492:419::-;11658:4;11696:2;11685:9;11681:18;11673:26;;11745:9;11739:4;11735:20;11731:1;11720:9;11716:17;11709:47;11773:131;11899:4;11773:131;:::i;:::-;11765:139;;11492:419;;;:::o;11917:180::-;12057:32;12053:1;12045:6;12041:14;12034:56;11917:180;:::o;12103:366::-;12245:3;12266:67;12330:2;12325:3;12266:67;:::i;:::-;12259:74;;12342:93;12431:3;12342:93;:::i;:::-;12460:2;12455:3;12451:12;12444:19;;12103:366;;;:::o;12475:419::-;12641:4;12679:2;12668:9;12664:18;12656:26;;12728:9;12722:4;12718:20;12714:1;12703:9;12699:17;12692:47;12756:131;12882:4;12756:131;:::i;:::-;12748:139;;12475:419;;;:::o;12900:179::-;13040:31;13036:1;13028:6;13024:14;13017:55;12900:179;:::o;13085:366::-;13227:3;13248:67;13312:2;13307:3;13248:67;:::i;:::-;13241:74;;13324:93;13413:3;13324:93;:::i;:::-;13442:2;13437:3;13433:12;13426:19;;13085:366;;;:::o;13457:419::-;13623:4;13661:2;13650:9;13646:18;13638:26;;13710:9;13704:4;13700:20;13696:1;13685:9;13681:17;13674:47;13738:131;13864:4;13738:131;:::i;:::-;13730:139;;13457:419;;;:::o;13882:180::-;13930:77;13927:1;13920:88;14027:4;14024:1;14017:15;14051:4;14048:1;14041:15;14068:180;14116:77;14113:1;14106:88;14213:4;14210:1;14203:15;14237:4;14234:1;14227:15;14254:185;14294:1;14311:20;14329:1;14311:20;:::i;:::-;14306:25;;14345:20;14363:1;14345:20;:::i;:::-;14340:25;;14384:1;14374:35;;14389:18;;:::i;:::-;14374:35;14431:1;14428;14424:9;14419:14;;14254:185;;;;:::o;14445:225::-;14585:34;14581:1;14573:6;14569:14;14562:58;14654:8;14649:2;14641:6;14637:15;14630:33;14445:225;:::o;14676:366::-;14818:3;14839:67;14903:2;14898:3;14839:67;:::i;:::-;14832:74;;14915:93;15004:3;14915:93;:::i;:::-;15033:2;15028:3;15024:12;15017:19;;14676:366;;;:::o;15048:419::-;15214:4;15252:2;15241:9;15237:18;15229:26;;15301:9;15295:4;15291:20;15287:1;15276:9;15272:17;15265:47;15329:131;15455:4;15329:131;:::i;:::-;15321:139;;15048:419;;;:::o;15473:228::-;15613:34;15609:1;15601:6;15597:14;15590:58;15682:11;15677:2;15669:6;15665:15;15658:36;15473:228;:::o;15707:366::-;15849:3;15870:67;15934:2;15929:3;15870:67;:::i;:::-;15863:74;;15946:93;16035:3;15946:93;:::i;:::-;16064:2;16059:3;16055:12;16048:19;;15707:366;;;:::o;16079:419::-;16245:4;16283:2;16272:9;16268:18;16260:26;;16332:9;16326:4;16322:20;16318:1;16307:9;16303:17;16296:47;16360:131;16486:4;16360:131;:::i;:::-;16352:139;;16079:419;;;:::o;16504:223::-;16644:34;16640:1;16632:6;16628:14;16621:58;16713:6;16708:2;16700:6;16696:15;16689:31;16504:223;:::o;16733:366::-;16875:3;16896:67;16960:2;16955:3;16896:67;:::i;:::-;16889:74;;16972:93;17061:3;16972:93;:::i;:::-;17090:2;17085:3;17081:12;17074:19;;16733:366;;;:::o;17105:419::-;17271:4;17309:2;17298:9;17294:18;17286:26;;17358:9;17352:4;17348:20;17344:1;17333:9;17329:17;17322:47;17386:131;17512:4;17386:131;:::i;:::-;17378:139;;17105:419;;;:::o;17530:223::-;17670:34;17666:1;17658:6;17654:14;17647:58;17739:6;17734:2;17726:6;17722:15;17715:31;17530:223;:::o;17759:366::-;17901:3;17922:67;17986:2;17981:3;17922:67;:::i;:::-;17915:74;;17998:93;18087:3;17998:93;:::i;:::-;18116:2;18111:3;18107:12;18100:19;;17759:366;;;:::o;18131:419::-;18297:4;18335:2;18324:9;18320:18;18312:26;;18384:9;18378:4;18374:20;18370:1;18359:9;18355:17;18348:47;18412:131;18538:4;18412:131;:::i;:::-;18404:139;;18131:419;;;:::o;18556:221::-;18696:34;18692:1;18684:6;18680:14;18673:58;18765:4;18760:2;18752:6;18748:15;18741:29;18556:221;:::o;18783:366::-;18925:3;18946:67;19010:2;19005:3;18946:67;:::i;:::-;18939:74;;19022:93;19111:3;19022:93;:::i;:::-;19140:2;19135:3;19131:12;19124:19;;18783:366;;;:::o;19155:419::-;19321:4;19359:2;19348:9;19344:18;19336:26;;19408:9;19402:4;19398:20;19394:1;19383:9;19379:17;19372:47;19436:131;19562:4;19436:131;:::i;:::-;19428:139;;19155:419;;;:::o;19580:224::-;19720:34;19716:1;19708:6;19704:14;19697:58;19789:7;19784:2;19776:6;19772:15;19765:32;19580:224;:::o;19810:366::-;19952:3;19973:67;20037:2;20032:3;19973:67;:::i;:::-;19966:74;;20049:93;20138:3;20049:93;:::i;:::-;20167:2;20162:3;20158:12;20151:19;;19810:366;;;:::o;20182:419::-;20348:4;20386:2;20375:9;20371:18;20363:26;;20435:9;20429:4;20425:20;20421:1;20410:9;20406:17;20399:47;20463:131;20589:4;20463:131;:::i;:::-;20455:139;;20182:419;;;:::o;20607:222::-;20747:34;20743:1;20735:6;20731:14;20724:58;20816:5;20811:2;20803:6;20799:15;20792:30;20607:222;:::o;20835:366::-;20977:3;20998:67;21062:2;21057:3;20998:67;:::i;:::-;20991:74;;21074:93;21163:3;21074:93;:::i;:::-;21192:2;21187:3;21183:12;21176:19;;20835:366;;;:::o;21207:419::-;21373:4;21411:2;21400:9;21396:18;21388:26;;21460:9;21454:4;21450:20;21446:1;21435:9;21431:17;21424:47;21488:131;21614:4;21488:131;:::i;:::-;21480:139;;21207:419;;;:::o;21632:227::-;21772:34;21768:1;21760:6;21756:14;21749:58;21841:10;21836:2;21828:6;21824:15;21817:35;21632:227;:::o;21865:366::-;22007:3;22028:67;22092:2;22087:3;22028:67;:::i;:::-;22021:74;;22104:93;22193:3;22104:93;:::i;:::-;22222:2;22217:3;22213:12;22206:19;;21865:366;;;:::o;22237:419::-;22403:4;22441:2;22430:9;22426:18;22418:26;;22490:9;22484:4;22480:20;22476:1;22465:9;22461:17;22454:47;22518:131;22644:4;22518:131;:::i;:::-;22510:139;;22237:419;;;:::o;22662:194::-;22702:4;22722:20;22740:1;22722:20;:::i;:::-;22717:25;;22756:20;22774:1;22756:20;:::i;:::-;22751:25;;22800:1;22797;22793:9;22785:17;;22824:1;22818:4;22815:11;22812:37;;;22829:18;;:::i;:::-;22812:37;22662:194;;;;:::o;22862:191::-;22902:3;22921:20;22939:1;22921:20;:::i;:::-;22916:25;;22955:20;22973:1;22955:20;:::i;:::-;22950:25;;22998:1;22995;22991:9;22984:16;;23019:3;23016:1;23013:10;23010:36;;;23026:18;;:::i;:::-;23010:36;22862:191;;;;:::o;23059:177::-;23199:29;23195:1;23187:6;23183:14;23176:53;23059:177;:::o;23242:366::-;23384:3;23405:67;23469:2;23464:3;23405:67;:::i;:::-;23398:74;;23481:93;23570:3;23481:93;:::i;:::-;23599:2;23594:3;23590:12;23583:19;;23242:366;;;:::o;23614:419::-;23780:4;23818:2;23807:9;23803:18;23795:26;;23867:9;23861:4;23857:20;23853:1;23842:9;23838:17;23831:47;23895:131;24021:4;23895:131;:::i;:::-;23887:139;;23614:419;;;:::o;24039:410::-;24079:7;24102:20;24120:1;24102:20;:::i;:::-;24097:25;;24136:20;24154:1;24136:20;:::i;:::-;24131:25;;24191:1;24188;24184:9;24213:30;24231:11;24213:30;:::i;:::-;24202:41;;24392:1;24383:7;24379:15;24376:1;24373:22;24353:1;24346:9;24326:83;24303:139;;24422:18;;:::i;:::-;24303:139;24087:362;24039:410;;;;:::o;24455:220::-;24595:34;24591:1;24583:6;24579:14;24572:58;24664:3;24659:2;24651:6;24647:15;24640:28;24455:220;:::o;24681:366::-;24823:3;24844:67;24908:2;24903:3;24844:67;:::i;:::-;24837:74;;24920:93;25009:3;24920:93;:::i;:::-;25038:2;25033:3;25029:12;25022:19;;24681:366;;;:::o;25053:419::-;25219:4;25257:2;25246:9;25242:18;25234:26;;25306:9;25300:4;25296:20;25292:1;25281:9;25277:17;25270:47;25334:131;25460:4;25334:131;:::i;:::-;25326:139;;25053:419;;;:::o;25478:180::-;25526:77;25523:1;25516:88;25623:4;25620:1;25613:15;25647:4;25644:1;25637:15;25664:180;25712:77;25709:1;25702:88;25809:4;25806:1;25799:15;25833:4;25830:1;25823:15;25850:143;25907:5;25938:6;25932:13;25923:22;;25954:33;25981:5;25954:33;:::i;:::-;25850:143;;;;:::o;25999:351::-;26069:6;26118:2;26106:9;26097:7;26093:23;26089:32;26086:119;;;26124:79;;:::i;:::-;26086:119;26244:1;26269:64;26325:7;26316:6;26305:9;26301:22;26269:64;:::i;:::-;26259:74;;26215:128;25999:351;;;;:::o;26356:85::-;26401:7;26430:5;26419:16;;26356:85;;;:::o;26447:158::-;26505:9;26538:61;26556:42;26565:32;26591:5;26565:32;:::i;:::-;26556:42;:::i;:::-;26538:61;:::i;:::-;26525:74;;26447:158;;;:::o;26611:147::-;26706:45;26745:5;26706:45;:::i;:::-;26701:3;26694:58;26611:147;;:::o;26764:114::-;26831:6;26865:5;26859:12;26849:22;;26764:114;;;:::o;26884:184::-;26983:11;27017:6;27012:3;27005:19;27057:4;27052:3;27048:14;27033:29;;26884:184;;;;:::o;27074:132::-;27141:4;27164:3;27156:11;;27194:4;27189:3;27185:14;27177:22;;27074:132;;;:::o;27212:108::-;27289:24;27307:5;27289:24;:::i;:::-;27284:3;27277:37;27212:108;;:::o;27326:179::-;27395:10;27416:46;27458:3;27450:6;27416:46;:::i;:::-;27494:4;27489:3;27485:14;27471:28;;27326:179;;;;:::o;27511:113::-;27581:4;27613;27608:3;27604:14;27596:22;;27511:113;;;:::o;27660:732::-;27779:3;27808:54;27856:5;27808:54;:::i;:::-;27878:86;27957:6;27952:3;27878:86;:::i;:::-;27871:93;;27988:56;28038:5;27988:56;:::i;:::-;28067:7;28098:1;28083:284;28108:6;28105:1;28102:13;28083:284;;;28184:6;28178:13;28211:63;28270:3;28255:13;28211:63;:::i;:::-;28204:70;;28297:60;28350:6;28297:60;:::i;:::-;28287:70;;28143:224;28130:1;28127;28123:9;28118:14;;28083:284;;;28087:14;28383:3;28376:10;;27784:608;;;27660:732;;;;:::o;28398:831::-;28661:4;28699:3;28688:9;28684:19;28676:27;;28713:71;28781:1;28770:9;28766:17;28757:6;28713:71;:::i;:::-;28794:80;28870:2;28859:9;28855:18;28846:6;28794:80;:::i;:::-;28921:9;28915:4;28911:20;28906:2;28895:9;28891:18;28884:48;28949:108;29052:4;29043:6;28949:108;:::i;:::-;28941:116;;29067:72;29135:2;29124:9;29120:18;29111:6;29067:72;:::i;:::-;29149:73;29217:3;29206:9;29202:19;29193:6;29149:73;:::i;:::-;28398:831;;;;;;;;:::o;29235:483::-;29406:4;29444:2;29433:9;29429:18;29421:26;;29457:71;29525:1;29514:9;29510:17;29501:6;29457:71;:::i;:::-;29575:9;29569:4;29565:20;29560:2;29549:9;29545:18;29538:48;29603:108;29706:4;29697:6;29603:108;:::i;:::-;29595:116;;29235:483;;;;;:::o;29724:807::-;29973:4;30011:3;30000:9;29996:19;29988:27;;30025:71;30093:1;30082:9;30078:17;30069:6;30025:71;:::i;:::-;30106:72;30174:2;30163:9;30159:18;30150:6;30106:72;:::i;:::-;30188:80;30264:2;30253:9;30249:18;30240:6;30188:80;:::i;:::-;30278;30354:2;30343:9;30339:18;30330:6;30278:80;:::i;:::-;30368:73;30436:3;30425:9;30421:19;30412:6;30368:73;:::i;:::-;30451;30519:3;30508:9;30504:19;30495:6;30451:73;:::i;:::-;29724:807;;;;;;;;;:::o;30537:143::-;30594:5;30625:6;30619:13;30610:22;;30641:33;30668:5;30641:33;:::i;:::-;30537:143;;;;:::o;30686:663::-;30774:6;30782;30790;30839:2;30827:9;30818:7;30814:23;30810:32;30807:119;;;30845:79;;:::i;:::-;30807:119;30965:1;30990:64;31046:7;31037:6;31026:9;31022:22;30990:64;:::i;:::-;30980:74;;30936:128;31103:2;31129:64;31185:7;31176:6;31165:9;31161:22;31129:64;:::i;:::-;31119:74;;31074:129;31242:2;31268:64;31324:7;31315:6;31304:9;31300:22;31268:64;:::i;:::-;31258:74;;31213:129;30686:663;;;;;:::o

Swarm Source

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