ETH Price: $3,387.52 (-1.58%)
Gas: 2 Gwei

Token

CARL (CARL)
 

Overview

Max Total Supply

100,000,000 CARL

Holders

186

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,178,288.125979353 CARL

Value
$0.00
0xd90a088b1f4BB17ae8FF3542E31191bE36AaDbF9
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:
CARL

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-17
*/

//https://t.me/CarlCoin_ETH
//www.carlcoin.org

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

    address payable public marketingWalletAddress = payable(0x35e3A8AaC4e3Db24E47c8889b154F0178Ce4CAbF); // Marketing Address  2%
    address payable public developmentWalletAddress = payable(0x22d5c3b619B90c62FF798A6D8f7A741560A07a7A); // Utility development Address 1%
    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 = 2;
    uint256 public _buyDevelopmentFee = 1;
    uint256 public _sellLiquidityFee = 0;
    uint256 public _sellMarketingFee = 2;
    uint256 public _sellDevelopmentFee = 1;

    uint256 public _liquidityShare = 0;
    uint256 public _marketingShare = 4;
    uint256 public _developmentShare = 2;

    uint256 public _totalTaxIfBuying = 3;
    uint256 public _totalTaxIfSelling = 3;
    uint256 public _totalDistributionShares = 6;

    uint256 private _totalSupply = 100 * 10**6 * 10**9;
    uint256 public _maxTxAmount = 3 * 10**6 * 10**9;
    uint256 public _walletMax = 3 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 550000 * 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).add(_buyDevelopmentFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevelopmentFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_developmentShare);

        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, uint256 newDevelopmentTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyDevelopmentFee = newDevelopmentTax;

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

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

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

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_developmentShare);
        require(_totalDistributionShares <=60, "Distribution Shares must be less than 60%");
    }
    
    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 setDevelopmentWalletAddress(address newAddress) external onlyOwner() {
        developmentWalletAddress = 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 amountETHDevelopment = amountReceived.mul(_developmentShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHDevelopment);

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

        if(amountETHDevelopment > 0)
            transferToAddressETH(developmentWalletAddress, amountETHDevelopment);

        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":"_buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":"_developmentShare","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":"_sellDevelopmentFee","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":[],"name":"developmentWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","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"},{"internalType":"uint256","name":"newDevelopmentTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevelopmentWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevelopmentShare","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"},{"internalType":"uint256","name":"newDevelopmentTax","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"}]

60a06040526040518060400160405280600481526020017f4341524c00000000000000000000000000000000000000000000000000000000815250600290816200004a919062000ff1565b506040518060400160405280600481526020017f4341524c000000000000000000000000000000000000000000000000000000008152506003908162000091919062000ff1565b50600960045f6101000a81548160ff021916908360ff1602179055507335e3a8aac4e3db24e47c8889b154f0178ce4cabf600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507322d5c3b619b90c62ff798a6d8f7a741560a07a7a60055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152505f600c556002600d556001600e555f600f55600260105560016011555f6012556004601355600260145560036015556003601655600660175567016345785d8a0000601855660aa87bee538000601955660aa87bee538000601a556601f438daa06000601b556001601d60156101000a81548160ff0219169083151502179055505f601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200024d575f80fd5b505f6200025f62000cfd60201b60201c565b9050805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200035d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200038391906200113a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e9573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200040f91906200113a565b6040518363ffffffff1660e01b81526004016200042e9291906200117b565b6020604051808303815f875af11580156200044b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200047191906200113a565b601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060185460075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600160085f620005a562000d0460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620006ef600e54620006e0600d54600c5462000d2b60201b90919060201c565b62000d2b60201b90919060201c565b6015819055506200072460115462000715601054600f5462000d2b60201b90919060201c565b62000d2b60201b90919060201c565b601681905550620007596014546200074a60135460125462000d2b60201b90919060201c565b62000d2b60201b90919060201c565b601781905550600160095f6200077462000d0460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f7371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160095f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f620009da62000d0460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f7371b5759d73262fbb223956913ecf4ecc5105764173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600a5f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506001600b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060185460065f62000c4162000cfd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555062000c8e62000cfd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000cee9190620011b7565b60405180910390a350620012b7565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80828462000d3b9190620011ff565b90508381101562000d83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d7a9062001297565b60405180910390fd5b8091505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000e0957607f821691505b60208210810362000e1f5762000e1e62000dc4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000e837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e46565b62000e8f868362000e46565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ed962000ed362000ecd8462000ea7565b62000eb0565b62000ea7565b9050919050565b5f819050919050565b62000ef48362000eb9565b62000f0c62000f038262000ee0565b84845462000e52565b825550505050565b5f90565b62000f2262000f14565b62000f2f81848462000ee9565b505050565b5b8181101562000f565762000f4a5f8262000f18565b60018101905062000f35565b5050565b601f82111562000fa55762000f6f8162000e25565b62000f7a8462000e37565b8101602085101562000f8a578190505b62000fa262000f998562000e37565b83018262000f34565b50505b505050565b5f82821c905092915050565b5f62000fc75f198460080262000faa565b1980831691505092915050565b5f62000fe1838362000fb6565b9150826002028217905092915050565b62000ffc8262000d8d565b67ffffffffffffffff81111562001018576200101762000d97565b5b62001024825462000df1565b6200103182828562000f5a565b5f60209050601f83116001811462001067575f841562001052578287015190505b6200105e858262000fd4565b865550620010cd565b601f198416620010778662000e25565b5f5b82811015620010a05784890151825560018201915060208501945060208101905062001079565b86831015620010c05784890151620010bc601f89168262000fb6565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200110482620010d9565b9050919050565b6200111681620010f8565b811462001121575f80fd5b50565b5f8151905062001134816200110b565b92915050565b5f60208284031215620011525762001151620010d5565b5b5f620011618482850162001124565b91505092915050565b6200117581620010f8565b82525050565b5f604082019050620011905f8301856200116a565b6200119f60208301846200116a565b9392505050565b620011b18162000ea7565b82525050565b5f602082019050620011cc5f830184620011a6565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200120b8262000ea7565b9150620012188362000ea7565b9250828201905080821115620012335762001232620011d2565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f6200127f601b8362001239565b91506200128c8262001249565b602082019050919050565b5f6020820190508181035f830152620012b08162001271565b9050919050565b6080516145b4620012d75f395f81816112b801526112e301526145b45ff3fe608060405260043610610353575f3560e01c806388790a68116101c5578063c816841b116100f6578063ec28438a11610094578063f1d5f5171161006e578063f1d5f51714610c56578063f331c7b014610c7e578063f84ba65d14610ca8578063f872858a14610cd05761035a565b8063ec28438a14610bdc578063ef422a1814610c04578063f0cd1dac14610c2c5761035a565b8063d158272d116100d0578063d158272d14610b22578063da00097d14610b4c578063dc44b6a014610b76578063dd62ed3e14610ba05761035a565b8063c816841b14610a92578063c860795214610abc578063c867d60b14610ae65761035a565b8063a0dd804011610163578063a9059cbb1161013d578063a9059cbb146109dc578063c2d4640e14610a18578063c49b9a8014610a40578063c5d2418914610a685761035a565b8063a0dd80401461094e578063a457c2d714610978578063a5d69d1f146109b45761035a565b8063914eb66a1161019f578063914eb66a146108ba57806395d89b41146108d0578063a073d37f146108fa578063a08e671f146109245761035a565b806388790a681461082a5780638b42507f146108545780638da5cb5b146108905761035a565b806337249b651161029f57806357a5802f1161023d5780637d1db4a5116102175780637d1db4a5146107845780637d7846ff146107ae578063807c2d9c146107d657806382eefb43146108005761035a565b806357a5802f146106f457806361a23c691461071e57806370a08231146107485761035a565b80633ecad271116102795780633ecad2711461062a5780634a74bb02146106665780634cb80fd5146106905780635342acb4146106b85761035a565b806337249b651461059c57806339509351146105c65780633b97084a146106025761035a565b80631870517a1161030c5780632563ae83116102e65780632563ae83146104f657806327c8f8351461051e5780632b112e4914610548578063313ce567146105725761035a565b80631870517a1461046a5780632198cf6c1461049257806323b872dd146104ba5761035a565b806306fdde031461035e5780630873321414610388578063095ea7b3146103b05780631694505e146103ec57806318160ddd14610416578063182a4760146104405761035a565b3661035a57005b5f80fd5b348015610369575f80fd5b50610372610cfa565b60405161037f919061358b565b60405180910390f35b348015610393575f80fd5b506103ae60048036038101906103a991906135e2565b610d8a565b005b3480156103bb575f80fd5b506103d660048036038101906103d1919061368c565b610eaf565b6040516103e391906136e4565b60405180910390f35b3480156103f7575f80fd5b50610400610ecc565b60405161040d9190613758565b60405180910390f35b348015610421575f80fd5b5061042a610ef1565b6040516104379190613780565b60405180910390f35b34801561044b575f80fd5b50610454610efa565b60405161046191906137b9565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b91906135e2565b610f1f565b005b34801561049d575f80fd5b506104b860048036038101906104b391906137fc565b611044565b005b3480156104c5575f80fd5b506104e060048036038101906104db919061383a565b611130565b6040516104ed91906136e4565b60405180910390f35b348015610501575f80fd5b5061051c6004803603810190610517919061388a565b611205565b005b348015610529575f80fd5b506105326112b6565b60405161053f91906138c4565b60405180910390f35b348015610553575f80fd5b5061055c6112da565b6040516105699190613780565b60405180910390f35b34801561057d575f80fd5b5061058661131d565b60405161059391906138f8565b60405180910390f35b3480156105a7575f80fd5b506105b0611332565b6040516105bd9190613780565b60405180910390f35b3480156105d1575f80fd5b506105ec60048036038101906105e7919061368c565b611338565b6040516105f991906136e4565b60405180910390f35b34801561060d575f80fd5b5061062860048036038101906106239190613911565b6113e6565b005b348015610635575f80fd5b50610650600480360381019061064b919061393c565b6114c7565b60405161065d91906136e4565b60405180910390f35b348015610671575f80fd5b5061067a6114e4565b60405161068791906136e4565b60405180910390f35b34801561069b575f80fd5b506106b660048036038101906106b1919061393c565b6114f7565b005b3480156106c3575f80fd5b506106de60048036038101906106d9919061393c565b6115cf565b6040516106eb91906136e4565b60405180910390f35b3480156106ff575f80fd5b506107086115ec565b6040516107159190613780565b60405180910390f35b348015610729575f80fd5b506107326115f2565b60405161073f9190613780565b60405180910390f35b348015610753575f80fd5b5061076e6004803603810190610769919061393c565b6115f8565b60405161077b9190613780565b60405180910390f35b34801561078f575f80fd5b5061079861163e565b6040516107a59190613780565b60405180910390f35b3480156107b9575f80fd5b506107d460048036038101906107cf919061393c565b611644565b005b3480156107e1575f80fd5b506107ea61171b565b6040516107f79190613780565b60405180910390f35b34801561080b575f80fd5b50610814611721565b6040516108219190613780565b60405180910390f35b348015610835575f80fd5b5061083e611727565b60405161084b9190613780565b60405180910390f35b34801561085f575f80fd5b5061087a6004803603810190610875919061393c565b61172d565b60405161088791906136e4565b60405180910390f35b34801561089b575f80fd5b506108a461174a565b6040516108b191906138c4565b60405180910390f35b3480156108c5575f80fd5b506108ce611771565b005b3480156108db575f80fd5b506108e46118bf565b6040516108f1919061358b565b60405180910390f35b348015610905575f80fd5b5061090e61194f565b60405161091b9190613780565b60405180910390f35b34801561092f575f80fd5b50610938611958565b6040516109459190613780565b60405180910390f35b348015610959575f80fd5b5061096261195e565b60405161096f9190613780565b60405180910390f35b348015610983575f80fd5b5061099e6004803603810190610999919061368c565b611964565b6040516109ab91906136e4565b60405180910390f35b3480156109bf575f80fd5b506109da60048036038101906109d5919061388a565b611a2c565b005b3480156109e7575f80fd5b50610a0260048036038101906109fd919061368c565b611add565b604051610a0f91906136e4565b60405180910390f35b348015610a23575f80fd5b50610a3e6004803603810190610a3991906135e2565b611afb565b005b348015610a4b575f80fd5b50610a666004803603810190610a61919061388a565b611c20565b005b348015610a73575f80fd5b50610a7c611d08565b604051610a899190613780565b60405180910390f35b348015610a9d575f80fd5b50610aa6611d0e565b604051610ab391906138c4565b60405180910390f35b348015610ac7575f80fd5b50610ad0611d33565b604051610add9190613780565b60405180910390f35b348015610af1575f80fd5b50610b0c6004803603810190610b07919061393c565b611d39565b604051610b1991906136e4565b60405180910390f35b348015610b2d575f80fd5b50610b36611d56565b604051610b4391906137b9565b60405180910390f35b348015610b57575f80fd5b50610b60611d7c565b604051610b6d91906136e4565b60405180910390f35b348015610b81575f80fd5b50610b8a611d8f565b604051610b979190613780565b60405180910390f35b348015610bab575f80fd5b50610bc66004803603810190610bc19190613967565b611d95565b604051610bd39190613780565b60405180910390f35b348015610be7575f80fd5b50610c026004803603810190610bfd9190613911565b611e17565b005b348015610c0f575f80fd5b50610c2a6004803603810190610c2591906137fc565b611f06565b005b348015610c37575f80fd5b50610c40611ff2565b604051610c4d9190613780565b60405180910390f35b348015610c61575f80fd5b50610c7c6004803603810190610c779190613911565b611ff8565b005b348015610c89575f80fd5b50610c926120e7565b604051610c9f9190613780565b60405180910390f35b348015610cb3575f80fd5b50610cce6004803603810190610cc991906137fc565b6120ed565b005b348015610cdb575f80fd5b50610ce46121d9565b604051610cf191906136e4565b60405180910390f35b606060028054610d09906139d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d35906139d2565b8015610d805780601f10610d5757610100808354040283529160200191610d80565b820191905f5260205f20905b815481529060010190602001808311610d6357829003601f168201915b5050505050905090565b610d926121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613a4c565b60405180910390fd5b82600f819055508160108190555080601181905550610e5e601154610e50601054600f546121f390919063ffffffff16565b6121f390919063ffffffff16565b60168190555060236016541115610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613ab4565b60405180910390fd5b505050565b5f610ec2610ebb6121ec565b8484612250565b6001905092915050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601854905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f276121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613a4c565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610ff3600e54610fe5600d54600c546121f390919063ffffffff16565b6121f390919063ffffffff16565b6015819055506019601554111561103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690613b1c565b60405180910390fd5b505050565b61104c6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90613a4c565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61113c848484612413565b506111fa846111496121ec565b6111f5856040518060600160405280602881526020016145326028913960075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6111ac6121ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129d69092919063ffffffff16565b612250565b600190509392505050565b61120d6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129090613a4c565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6113186113077f00000000000000000000000000000000000000000000000000000000000000006115f8565b601854612a3890919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b60115481565b5f6113dc6113446121ec565b846113d78560075f6113546121ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121f390919063ffffffff16565b612250565b6001905092915050565b6113ee6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190613a4c565b60405180910390fd5b600181116114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b490613baa565b60405180910390fd5b80601b8190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b6114ff6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290613a4c565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6008602052805f5260405f205f915054906101000a900460ff1681565b60125481565b60135481565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60195481565b61164c6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90613a4c565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b600f5481565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117796121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90613a4c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600380546118ce906139d2565b80601f01602080910402602001604051908101604052809291908181526020018280546118fa906139d2565b80156119455780601f1061191c57610100808354040283529160200191611945565b820191905f5260205f20905b81548152906001019060200180831161192857829003601f168201915b5050505050905090565b5f601b54905090565b60175481565b60145481565b5f611a226119706121ec565b84611a1d8560405180606001604052806025815260200161455a6025913960075f6119996121ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129d69092919063ffffffff16565b612250565b6001905092915050565b611a346121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790613a4c565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b5f611af0611ae96121ec565b8484612413565b506001905092915050565b611b036121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690613a4c565b60405180910390fd5b826012819055508160138190555080601481905550611bcf601454611bc16013546012546121f390919063ffffffff16565b6121f390919063ffffffff16565b601781905550603c6017541115611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613c38565b60405180910390fd5b505050565b611c286121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab90613a4c565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611cfd91906136e4565b60405180910390a150565b600d5481565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6009602052805f5260405f205f915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611e1f6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290613a4c565b60405180910390fd5b60c8601854611eba9190613cb0565b811015611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613d50565b60405180910390fd5b8060198190555050565b611f0e6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190613a4c565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60155481565b6120006121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461208c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208390613a4c565b60405180910390fd5b60c860185461209b9190613cb0565b8110156120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d490613dde565b60405180910390fd5b80601a8190555050565b600e5481565b6120f56121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890613a4c565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b5f33905090565b5f8082846122019190613dfc565b905083811015612246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223d90613e79565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613f07565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361232c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232390613f95565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124069190613780565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614023565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e7906140b1565b60405180910390fd5b601d60149054906101000a900460ff161561251757612510848484612a81565b90506129cf565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156125b55750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612600576019548211156125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f69061413f565b60405180910390fd5b5b5f61260a306115f8565b90505f601b54821015905080801561262f5750601d60149054906101000a900460ff16155b80156126825750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561269a5750601d60159054906101000a900460ff165b156126c457601d60169054906101000a900460ff16156126ba57601b5491505b6126c382612c4b565b5b61274b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129d69092919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612828575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61283c57612837878787612e2f565b61283e565b845b9050601d60179054906101000a900460ff1680156128a3575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128d157601a546128c6826128b8896115f8565b6121f390919063ffffffff16565b11156128d0575f80fd5b5b6129218160065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121f390919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129bf9190613780565b60405180910390a3600193505050505b9392505050565b5f838311158290612a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a14919061358b565b60405180910390fd5b505f8385612a2b919061415d565b9050809150509392505050565b5f612a7983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129d6565b905092915050565b5f612b09826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129d69092919063ffffffff16565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612b9a8260065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121f390919063ffffffff16565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c389190613780565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055505f612ca36002612c95601754612c876012548761304990919063ffffffff16565b6130c090919063ffffffff16565b6130c090919063ffffffff16565b90505f612cb98284612a3890919063ffffffff16565b9050612cc481613109565b5f4790505f612cf3612ce260026012546130c090919063ffffffff16565b601754612a3890919063ffffffff16565b90505f612d306002612d2284612d146012548861304990919063ffffffff16565b6130c090919063ffffffff16565b6130c090919063ffffffff16565b90505f612d5a83612d4c6014548761304990919063ffffffff16565b6130c090919063ffffffff16565b90505f612d8282612d748588612a3890919063ffffffff16565b612a3890919063ffffffff16565b90505f811115612db957612db8600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613378565b5b5f821115612ded57612dec60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613378565b5b5f83118015612dfb57505f87115b15612e0b57612e0a87846133c0565b5b505050505050505f601d60146101000a81548160ff02191690831515021790555050565b5f805f9050600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612eb257612eab6064612e9d6015548661304990919063ffffffff16565b6130c090919063ffffffff16565b9050612f2d565b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612f2c57612f296064612f1b6016548661304990919063ffffffff16565b6130c090919063ffffffff16565b90505b5b5f81111561302c57612f858160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121f390919063ffffffff16565b60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130239190613780565b60405180910390a35b61303f8184612a3890919063ffffffff16565b9150509392505050565b5f808303613059575f90506130ba565b5f82846130669190614190565b90508284826130759190613cb0565b146130b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ac90614241565b60405180910390fd5b809150505b92915050565b5f61310183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134a0565b905092915050565b5f600267ffffffffffffffff8111156131255761312461425f565b5b6040519080825280602002602001820160405280156131535781602001602082028036833780820191505090505b50905030815f8151811061316a5761316961428c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561320e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323291906142cd565b816001815181106132465761324561428c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132ac30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612250565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161330e9594939291906143e8565b5f604051808303815f87803b158015613325575f80fd5b505af1158015613337573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161336c929190614440565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156133bb573d5f803e3d5ffd5b505050565b6133ec30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612250565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061343661174a565b426040518863ffffffff1660e01b81526004016134589695949392919061446e565b60606040518083038185885af1158015613474573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061349991906144e1565b5050505050565b5f80831182906134e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dd919061358b565b60405180910390fd5b505f83856134f49190613cb0565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561353857808201518184015260208101905061351d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61355d82613501565b613567818561350b565b935061357781856020860161351b565b61358081613543565b840191505092915050565b5f6020820190508181035f8301526135a38184613553565b905092915050565b5f80fd5b5f819050919050565b6135c1816135af565b81146135cb575f80fd5b50565b5f813590506135dc816135b8565b92915050565b5f805f606084860312156135f9576135f86135ab565b5b5f613606868287016135ce565b9350506020613617868287016135ce565b9250506040613628868287016135ce565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61365b82613632565b9050919050565b61366b81613651565b8114613675575f80fd5b50565b5f8135905061368681613662565b92915050565b5f80604083850312156136a2576136a16135ab565b5b5f6136af85828601613678565b92505060206136c0858286016135ce565b9150509250929050565b5f8115159050919050565b6136de816136ca565b82525050565b5f6020820190506136f75f8301846136d5565b92915050565b5f819050919050565b5f61372061371b61371684613632565b6136fd565b613632565b9050919050565b5f61373182613706565b9050919050565b5f61374282613727565b9050919050565b61375281613738565b82525050565b5f60208201905061376b5f830184613749565b92915050565b61377a816135af565b82525050565b5f6020820190506137935f830184613771565b92915050565b5f6137a382613632565b9050919050565b6137b381613799565b82525050565b5f6020820190506137cc5f8301846137aa565b92915050565b6137db816136ca565b81146137e5575f80fd5b50565b5f813590506137f6816137d2565b92915050565b5f8060408385031215613812576138116135ab565b5b5f61381f85828601613678565b9250506020613830858286016137e8565b9150509250929050565b5f805f60608486031215613851576138506135ab565b5b5f61385e86828701613678565b935050602061386f86828701613678565b9250506040613880868287016135ce565b9150509250925092565b5f6020828403121561389f5761389e6135ab565b5b5f6138ac848285016137e8565b91505092915050565b6138be81613651565b82525050565b5f6020820190506138d75f8301846138b5565b92915050565b5f60ff82169050919050565b6138f2816138dd565b82525050565b5f60208201905061390b5f8301846138e9565b92915050565b5f60208284031215613926576139256135ab565b5b5f613933848285016135ce565b91505092915050565b5f60208284031215613951576139506135ab565b5b5f61395e84828501613678565b91505092915050565b5f806040838503121561397d5761397c6135ab565b5b5f61398a85828601613678565b925050602061399b85828601613678565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139e957607f821691505b6020821081036139fc576139fb6139a5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a3660208361350b565b9150613a4182613a02565b602082019050919050565b5f6020820190508181035f830152613a6381613a2a565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e2033352500005f82015250565b5f613a9e601e8361350b565b9150613aa982613a6a565b602082019050919050565b5f6020820190508181035f830152613acb81613a92565b9050919050565b7f42757920746178206d757374206265206c657373207468616e203235250000005f82015250565b5f613b06601d8361350b565b9150613b1182613ad2565b602082019050919050565b5f6020820190508181035f830152613b3381613afa565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f5f8201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b5f613b9460238361350b565b9150613b9f82613b3a565b604082019050919050565b5f6020820190508181035f830152613bc181613b88565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c6573735f8201527f207468616e203630250000000000000000000000000000000000000000000000602082015250565b5f613c2260298361350b565b9150613c2d82613bc8565b604082019050919050565b5f6020820190508181035f830152613c4f81613c16565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cba826135af565b9150613cc5836135af565b925082613cd557613cd4613c56565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f776572207468615f8201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b5f613d3a60268361350b565b9150613d4582613ce0565b604082019050919050565b5f6020820190508181035f830152613d6781613d2e565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613dc860248361350b565b9150613dd382613d6e565b604082019050919050565b5f6020820190508181035f830152613df581613dbc565b9050919050565b5f613e06826135af565b9150613e11836135af565b9250828201905080821115613e2957613e28613c83565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613e63601b8361350b565b9150613e6e82613e2f565b602082019050919050565b5f6020820190508181035f830152613e9081613e57565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613ef160248361350b565b9150613efc82613e97565b604082019050919050565b5f6020820190508181035f830152613f1e81613ee5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f7f60228361350b565b9150613f8a82613f25565b604082019050919050565b5f6020820190508181035f830152613fac81613f73565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61400d60258361350b565b915061401882613fb3565b604082019050919050565b5f6020820190508181035f83015261403a81614001565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61409b60238361350b565b91506140a682614041565b604082019050919050565b5f6020820190508181035f8301526140c88161408f565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f61412960288361350b565b9150614134826140cf565b604082019050919050565b5f6020820190508181035f8301526141568161411d565b9050919050565b5f614167826135af565b9150614172836135af565b925082820390508181111561418a57614189613c83565b5b92915050565b5f61419a826135af565b91506141a5836135af565b92508282026141b3816135af565b915082820484148315176141ca576141c9613c83565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61422b60218361350b565b9150614236826141d1565b604082019050919050565b5f6020820190508181035f8301526142588161421f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142c781613662565b92915050565b5f602082840312156142e2576142e16135ab565b5b5f6142ef848285016142b9565b91505092915050565b5f819050919050565b5f61431b614316614311846142f8565b6136fd565b6135af565b9050919050565b61432b81614301565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61436381613651565b82525050565b5f614374838361435a565b60208301905092915050565b5f602082019050919050565b5f61439682614331565b6143a0818561433b565b93506143ab8361434b565b805f5b838110156143db5781516143c28882614369565b97506143cd83614380565b9250506001810190506143ae565b5085935050505092915050565b5f60a0820190506143fb5f830188613771565b6144086020830187614322565b818103604083015261441a818661438c565b905061442960608301856138b5565b6144366080830184613771565b9695505050505050565b5f6040820190506144535f830185613771565b8181036020830152614465818461438c565b90509392505050565b5f60c0820190506144815f8301896138b5565b61448e6020830188613771565b61449b6040830187614322565b6144a86060830186614322565b6144b560808301856138b5565b6144c260a0830184613771565b979650505050505050565b5f815190506144db816135b8565b92915050565b5f805f606084860312156144f8576144f76135ab565b5b5f614505868287016144cd565b9350506020614516868287016144cd565b9250506040614527868287016144cd565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fb56bf63913a3f1ab41953cb68b40a2c2e257e2e184afe67b66a3b130435a1b664736f6c63430008140033

Deployed Bytecode

0x608060405260043610610353575f3560e01c806388790a68116101c5578063c816841b116100f6578063ec28438a11610094578063f1d5f5171161006e578063f1d5f51714610c56578063f331c7b014610c7e578063f84ba65d14610ca8578063f872858a14610cd05761035a565b8063ec28438a14610bdc578063ef422a1814610c04578063f0cd1dac14610c2c5761035a565b8063d158272d116100d0578063d158272d14610b22578063da00097d14610b4c578063dc44b6a014610b76578063dd62ed3e14610ba05761035a565b8063c816841b14610a92578063c860795214610abc578063c867d60b14610ae65761035a565b8063a0dd804011610163578063a9059cbb1161013d578063a9059cbb146109dc578063c2d4640e14610a18578063c49b9a8014610a40578063c5d2418914610a685761035a565b8063a0dd80401461094e578063a457c2d714610978578063a5d69d1f146109b45761035a565b8063914eb66a1161019f578063914eb66a146108ba57806395d89b41146108d0578063a073d37f146108fa578063a08e671f146109245761035a565b806388790a681461082a5780638b42507f146108545780638da5cb5b146108905761035a565b806337249b651161029f57806357a5802f1161023d5780637d1db4a5116102175780637d1db4a5146107845780637d7846ff146107ae578063807c2d9c146107d657806382eefb43146108005761035a565b806357a5802f146106f457806361a23c691461071e57806370a08231146107485761035a565b80633ecad271116102795780633ecad2711461062a5780634a74bb02146106665780634cb80fd5146106905780635342acb4146106b85761035a565b806337249b651461059c57806339509351146105c65780633b97084a146106025761035a565b80631870517a1161030c5780632563ae83116102e65780632563ae83146104f657806327c8f8351461051e5780632b112e4914610548578063313ce567146105725761035a565b80631870517a1461046a5780632198cf6c1461049257806323b872dd146104ba5761035a565b806306fdde031461035e5780630873321414610388578063095ea7b3146103b05780631694505e146103ec57806318160ddd14610416578063182a4760146104405761035a565b3661035a57005b5f80fd5b348015610369575f80fd5b50610372610cfa565b60405161037f919061358b565b60405180910390f35b348015610393575f80fd5b506103ae60048036038101906103a991906135e2565b610d8a565b005b3480156103bb575f80fd5b506103d660048036038101906103d1919061368c565b610eaf565b6040516103e391906136e4565b60405180910390f35b3480156103f7575f80fd5b50610400610ecc565b60405161040d9190613758565b60405180910390f35b348015610421575f80fd5b5061042a610ef1565b6040516104379190613780565b60405180910390f35b34801561044b575f80fd5b50610454610efa565b60405161046191906137b9565b60405180910390f35b348015610475575f80fd5b50610490600480360381019061048b91906135e2565b610f1f565b005b34801561049d575f80fd5b506104b860048036038101906104b391906137fc565b611044565b005b3480156104c5575f80fd5b506104e060048036038101906104db919061383a565b611130565b6040516104ed91906136e4565b60405180910390f35b348015610501575f80fd5b5061051c6004803603810190610517919061388a565b611205565b005b348015610529575f80fd5b506105326112b6565b60405161053f91906138c4565b60405180910390f35b348015610553575f80fd5b5061055c6112da565b6040516105699190613780565b60405180910390f35b34801561057d575f80fd5b5061058661131d565b60405161059391906138f8565b60405180910390f35b3480156105a7575f80fd5b506105b0611332565b6040516105bd9190613780565b60405180910390f35b3480156105d1575f80fd5b506105ec60048036038101906105e7919061368c565b611338565b6040516105f991906136e4565b60405180910390f35b34801561060d575f80fd5b5061062860048036038101906106239190613911565b6113e6565b005b348015610635575f80fd5b50610650600480360381019061064b919061393c565b6114c7565b60405161065d91906136e4565b60405180910390f35b348015610671575f80fd5b5061067a6114e4565b60405161068791906136e4565b60405180910390f35b34801561069b575f80fd5b506106b660048036038101906106b1919061393c565b6114f7565b005b3480156106c3575f80fd5b506106de60048036038101906106d9919061393c565b6115cf565b6040516106eb91906136e4565b60405180910390f35b3480156106ff575f80fd5b506107086115ec565b6040516107159190613780565b60405180910390f35b348015610729575f80fd5b506107326115f2565b60405161073f9190613780565b60405180910390f35b348015610753575f80fd5b5061076e6004803603810190610769919061393c565b6115f8565b60405161077b9190613780565b60405180910390f35b34801561078f575f80fd5b5061079861163e565b6040516107a59190613780565b60405180910390f35b3480156107b9575f80fd5b506107d460048036038101906107cf919061393c565b611644565b005b3480156107e1575f80fd5b506107ea61171b565b6040516107f79190613780565b60405180910390f35b34801561080b575f80fd5b50610814611721565b6040516108219190613780565b60405180910390f35b348015610835575f80fd5b5061083e611727565b60405161084b9190613780565b60405180910390f35b34801561085f575f80fd5b5061087a6004803603810190610875919061393c565b61172d565b60405161088791906136e4565b60405180910390f35b34801561089b575f80fd5b506108a461174a565b6040516108b191906138c4565b60405180910390f35b3480156108c5575f80fd5b506108ce611771565b005b3480156108db575f80fd5b506108e46118bf565b6040516108f1919061358b565b60405180910390f35b348015610905575f80fd5b5061090e61194f565b60405161091b9190613780565b60405180910390f35b34801561092f575f80fd5b50610938611958565b6040516109459190613780565b60405180910390f35b348015610959575f80fd5b5061096261195e565b60405161096f9190613780565b60405180910390f35b348015610983575f80fd5b5061099e6004803603810190610999919061368c565b611964565b6040516109ab91906136e4565b60405180910390f35b3480156109bf575f80fd5b506109da60048036038101906109d5919061388a565b611a2c565b005b3480156109e7575f80fd5b50610a0260048036038101906109fd919061368c565b611add565b604051610a0f91906136e4565b60405180910390f35b348015610a23575f80fd5b50610a3e6004803603810190610a3991906135e2565b611afb565b005b348015610a4b575f80fd5b50610a666004803603810190610a61919061388a565b611c20565b005b348015610a73575f80fd5b50610a7c611d08565b604051610a899190613780565b60405180910390f35b348015610a9d575f80fd5b50610aa6611d0e565b604051610ab391906138c4565b60405180910390f35b348015610ac7575f80fd5b50610ad0611d33565b604051610add9190613780565b60405180910390f35b348015610af1575f80fd5b50610b0c6004803603810190610b07919061393c565b611d39565b604051610b1991906136e4565b60405180910390f35b348015610b2d575f80fd5b50610b36611d56565b604051610b4391906137b9565b60405180910390f35b348015610b57575f80fd5b50610b60611d7c565b604051610b6d91906136e4565b60405180910390f35b348015610b81575f80fd5b50610b8a611d8f565b604051610b979190613780565b60405180910390f35b348015610bab575f80fd5b50610bc66004803603810190610bc19190613967565b611d95565b604051610bd39190613780565b60405180910390f35b348015610be7575f80fd5b50610c026004803603810190610bfd9190613911565b611e17565b005b348015610c0f575f80fd5b50610c2a6004803603810190610c2591906137fc565b611f06565b005b348015610c37575f80fd5b50610c40611ff2565b604051610c4d9190613780565b60405180910390f35b348015610c61575f80fd5b50610c7c6004803603810190610c779190613911565b611ff8565b005b348015610c89575f80fd5b50610c926120e7565b604051610c9f9190613780565b60405180910390f35b348015610cb3575f80fd5b50610cce6004803603810190610cc991906137fc565b6120ed565b005b348015610cdb575f80fd5b50610ce46121d9565b604051610cf191906136e4565b60405180910390f35b606060028054610d09906139d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d35906139d2565b8015610d805780601f10610d5757610100808354040283529160200191610d80565b820191905f5260205f20905b815481529060010190602001808311610d6357829003601f168201915b5050505050905090565b610d926121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e1590613a4c565b60405180910390fd5b82600f819055508160108190555080601181905550610e5e601154610e50601054600f546121f390919063ffffffff16565b6121f390919063ffffffff16565b60168190555060236016541115610eaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea190613ab4565b60405180910390fd5b505050565b5f610ec2610ebb6121ec565b8484612250565b6001905092915050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f601854905090565b60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610f276121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faa90613a4c565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610ff3600e54610fe5600d54600c546121f390919063ffffffff16565b6121f390919063ffffffff16565b6015819055506019601554111561103f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103690613b1c565b60405180910390fd5b505050565b61104c6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cf90613a4c565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f61113c848484612413565b506111fa846111496121ec565b6111f5856040518060600160405280602881526020016145326028913960075f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6111ac6121ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129d69092919063ffffffff16565b612250565b600190509392505050565b61120d6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611299576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129090613a4c565b60405180910390fd5b80601d60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b5f6113186113077f000000000000000000000000000000000000000000000000000000000000dead6115f8565b601854612a3890919063ffffffff16565b905090565b5f60045f9054906101000a900460ff16905090565b60115481565b5f6113dc6113446121ec565b846113d78560075f6113546121ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121f390919063ffffffff16565b612250565b6001905092915050565b6113ee6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147190613a4c565b60405180910390fd5b600181116114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b490613baa565b60405180910390fd5b80601b8190555050565b600b602052805f5260405f205f915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b6114ff6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158290613a4c565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6008602052805f5260405f205f915054906101000a900460ff1681565b60125481565b60135481565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b60195481565b61164c6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cf90613a4c565b60405180910390fd5b8060055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a5481565b60165481565b600f5481565b600a602052805f5260405f205f915054906101000a900460ff1681565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6117796121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611805576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117fc90613a4c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35f805f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600380546118ce906139d2565b80601f01602080910402602001604051908101604052809291908181526020018280546118fa906139d2565b80156119455780601f1061191c57610100808354040283529160200191611945565b820191905f5260205f20905b81548152906001019060200180831161192857829003601f168201915b5050505050905090565b5f601b54905090565b60175481565b60145481565b5f611a226119706121ec565b84611a1d8560405180606001604052806025815260200161455a6025913960075f6119996121ec565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129d69092919063ffffffff16565b612250565b6001905092915050565b611a346121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790613a4c565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b5f611af0611ae96121ec565b8484612413565b506001905092915050565b611b036121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690613a4c565b60405180910390fd5b826012819055508160138190555080601481905550611bcf601454611bc16013546012546121f390919063ffffffff16565b6121f390919063ffffffff16565b601781905550603c6017541115611c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1290613c38565b60405180910390fd5b505050565b611c286121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cab90613a4c565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611cfd91906136e4565b60405180910390a150565b600d5481565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6009602052805f5260405f205f915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601d60169054906101000a900460ff1681565b600c5481565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b611e1f6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611eab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea290613a4c565b60405180910390fd5b60c8601854611eba9190613cb0565b811015611efc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef390613d50565b60405180910390fd5b8060198190555050565b611f0e6121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9190613a4c565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60155481565b6120006121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461208c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208390613a4c565b60405180910390fd5b60c860185461209b9190613cb0565b8110156120dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d490613dde565b60405180910390fd5b80601a8190555050565b600e5481565b6120f56121ec565b73ffffffffffffffffffffffffffffffffffffffff165f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217890613a4c565b60405180910390fd5b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b5f33905090565b5f8082846122019190613dfc565b905083811015612246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223d90613e79565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b590613f07565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361232c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232390613f95565b60405180910390fd5b8060075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124069190613780565b60405180910390a3505050565b5f8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612482576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247990614023565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036124f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124e7906140b1565b60405180910390fd5b601d60149054906101000a900460ff161561251757612510848484612a81565b90506129cf565b600a5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156125b55750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612600576019548211156125ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f69061413f565b60405180910390fd5b5b5f61260a306115f8565b90505f601b54821015905080801561262f5750601d60149054906101000a900460ff16155b80156126825750600b5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561269a5750601d60159054906101000a900460ff165b156126c457601d60169054906101000a900460ff16156126ba57601b5491505b6126c382612c4b565b5b61274b846040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129d69092919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f60085f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612828575060085f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61283c57612837878787612e2f565b61283e565b845b9050601d60179054906101000a900460ff1680156128a3575060095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156128d157601a546128c6826128b8896115f8565b6121f390919063ffffffff16565b11156128d0575f80fd5b5b6129218160065f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121f390919063ffffffff16565b60065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129bf9190613780565b60405180910390a3600193505050505b9392505050565b5f838311158290612a1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a14919061358b565b60405180910390fd5b505f8385612a2b919061415d565b9050809150509392505050565b5f612a7983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129d6565b905092915050565b5f612b09826040518060400160405280601481526020017f496e73756666696369656e742042616c616e636500000000000000000000000081525060065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546129d69092919063ffffffff16565b60065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612b9a8260065f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121f390919063ffffffff16565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c389190613780565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055505f612ca36002612c95601754612c876012548761304990919063ffffffff16565b6130c090919063ffffffff16565b6130c090919063ffffffff16565b90505f612cb98284612a3890919063ffffffff16565b9050612cc481613109565b5f4790505f612cf3612ce260026012546130c090919063ffffffff16565b601754612a3890919063ffffffff16565b90505f612d306002612d2284612d146012548861304990919063ffffffff16565b6130c090919063ffffffff16565b6130c090919063ffffffff16565b90505f612d5a83612d4c6014548761304990919063ffffffff16565b6130c090919063ffffffff16565b90505f612d8282612d748588612a3890919063ffffffff16565b612a3890919063ffffffff16565b90505f811115612db957612db8600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613378565b5b5f821115612ded57612dec60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613378565b5b5f83118015612dfb57505f87115b15612e0b57612e0a87846133c0565b5b505050505050505f601d60146101000a81548160ff02191690831515021790555050565b5f805f9050600b5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612eb257612eab6064612e9d6015548661304990919063ffffffff16565b6130c090919063ffffffff16565b9050612f2d565b600b5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612f2c57612f296064612f1b6016548661304990919063ffffffff16565b6130c090919063ffffffff16565b90505b5b5f81111561302c57612f858160065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546121f390919063ffffffff16565b60065f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130239190613780565b60405180910390a35b61303f8184612a3890919063ffffffff16565b9150509392505050565b5f808303613059575f90506130ba565b5f82846130669190614190565b90508284826130759190613cb0565b146130b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ac90614241565b60405180910390fd5b809150505b92915050565b5f61310183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134a0565b905092915050565b5f600267ffffffffffffffff8111156131255761312461425f565b5b6040519080825280602002602001820160405280156131535781602001602082028036833780820191505090505b50905030815f8151811061316a5761316961428c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561320e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061323291906142cd565b816001815181106132465761324561428c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506132ac30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612250565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161330e9594939291906143e8565b5f604051808303815f87803b158015613325575f80fd5b505af1158015613337573d5f803e3d5ffd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161336c929190614440565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f193505050501580156133bb573d5f803e3d5ffd5b505050565b6133ec30601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612250565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8061343661174a565b426040518863ffffffff1660e01b81526004016134589695949392919061446e565b60606040518083038185885af1158015613474573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061349991906144e1565b5050505050565b5f80831182906134e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134dd919061358b565b60405180910390fd5b505f83856134f49190613cb0565b9050809150509392505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561353857808201518184015260208101905061351d565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61355d82613501565b613567818561350b565b935061357781856020860161351b565b61358081613543565b840191505092915050565b5f6020820190508181035f8301526135a38184613553565b905092915050565b5f80fd5b5f819050919050565b6135c1816135af565b81146135cb575f80fd5b50565b5f813590506135dc816135b8565b92915050565b5f805f606084860312156135f9576135f86135ab565b5b5f613606868287016135ce565b9350506020613617868287016135ce565b9250506040613628868287016135ce565b9150509250925092565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61365b82613632565b9050919050565b61366b81613651565b8114613675575f80fd5b50565b5f8135905061368681613662565b92915050565b5f80604083850312156136a2576136a16135ab565b5b5f6136af85828601613678565b92505060206136c0858286016135ce565b9150509250929050565b5f8115159050919050565b6136de816136ca565b82525050565b5f6020820190506136f75f8301846136d5565b92915050565b5f819050919050565b5f61372061371b61371684613632565b6136fd565b613632565b9050919050565b5f61373182613706565b9050919050565b5f61374282613727565b9050919050565b61375281613738565b82525050565b5f60208201905061376b5f830184613749565b92915050565b61377a816135af565b82525050565b5f6020820190506137935f830184613771565b92915050565b5f6137a382613632565b9050919050565b6137b381613799565b82525050565b5f6020820190506137cc5f8301846137aa565b92915050565b6137db816136ca565b81146137e5575f80fd5b50565b5f813590506137f6816137d2565b92915050565b5f8060408385031215613812576138116135ab565b5b5f61381f85828601613678565b9250506020613830858286016137e8565b9150509250929050565b5f805f60608486031215613851576138506135ab565b5b5f61385e86828701613678565b935050602061386f86828701613678565b9250506040613880868287016135ce565b9150509250925092565b5f6020828403121561389f5761389e6135ab565b5b5f6138ac848285016137e8565b91505092915050565b6138be81613651565b82525050565b5f6020820190506138d75f8301846138b5565b92915050565b5f60ff82169050919050565b6138f2816138dd565b82525050565b5f60208201905061390b5f8301846138e9565b92915050565b5f60208284031215613926576139256135ab565b5b5f613933848285016135ce565b91505092915050565b5f60208284031215613951576139506135ab565b5b5f61395e84828501613678565b91505092915050565b5f806040838503121561397d5761397c6135ab565b5b5f61398a85828601613678565b925050602061399b85828601613678565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806139e957607f821691505b6020821081036139fc576139fb6139a5565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613a3660208361350b565b9150613a4182613a02565b602082019050919050565b5f6020820190508181035f830152613a6381613a2a565b9050919050565b7f53656c6c20746178206d757374206265206c657373207468616e2033352500005f82015250565b5f613a9e601e8361350b565b9150613aa982613a6a565b602082019050919050565b5f6020820190508181035f830152613acb81613a92565b9050919050565b7f42757920746178206d757374206265206c657373207468616e203235250000005f82015250565b5f613b06601d8361350b565b9150613b1182613ad2565b602082019050919050565b5f6020820190508181035f830152613b3381613afa565b9050919050565b7f4e756d546f6b656e734265666f7265537761702073686f756c64206265206e6f5f8201527f7420300000000000000000000000000000000000000000000000000000000000602082015250565b5f613b9460238361350b565b9150613b9f82613b3a565b604082019050919050565b5f6020820190508181035f830152613bc181613b88565b9050919050565b7f446973747269627574696f6e20536861726573206d757374206265206c6573735f8201527f207468616e203630250000000000000000000000000000000000000000000000602082015250565b5f613c2260298361350b565b9150613c2d82613bc8565b604082019050919050565b5f6020820190508181035f830152613c4f81613c16565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613cba826135af565b9150613cc5836135af565b925082613cd557613cd4613c56565b5b828204905092915050565b7f43616e6e6f7420736574204d61785478416d6f756e74206c6f776572207468615f8201527f6e20302e35250000000000000000000000000000000000000000000000000000602082015250565b5f613d3a60268361350b565b9150613d4582613ce0565b604082019050919050565b5f6020820190508181035f830152613d6781613d2e565b9050919050565b7f43616e6e6f7420736574204d617857616c6c6574206c6f776572207468616e205f8201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b5f613dc860248361350b565b9150613dd382613d6e565b604082019050919050565b5f6020820190508181035f830152613df581613dbc565b9050919050565b5f613e06826135af565b9150613e11836135af565b9250828201905080821115613e2957613e28613c83565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f613e63601b8361350b565b9150613e6e82613e2f565b602082019050919050565b5f6020820190508181035f830152613e9081613e57565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613ef160248361350b565b9150613efc82613e97565b604082019050919050565b5f6020820190508181035f830152613f1e81613ee5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613f7f60228361350b565b9150613f8a82613f25565b604082019050919050565b5f6020820190508181035f830152613fac81613f73565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61400d60258361350b565b915061401882613fb3565b604082019050919050565b5f6020820190508181035f83015261403a81614001565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61409b60238361350b565b91506140a682614041565b604082019050919050565b5f6020820190508181035f8301526140c88161408f565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d6178545f8201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b5f61412960288361350b565b9150614134826140cf565b604082019050919050565b5f6020820190508181035f8301526141568161411d565b9050919050565b5f614167826135af565b9150614172836135af565b925082820390508181111561418a57614189613c83565b5b92915050565b5f61419a826135af565b91506141a5836135af565b92508282026141b3816135af565b915082820484148315176141ca576141c9613c83565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61422b60218361350b565b9150614236826141d1565b604082019050919050565b5f6020820190508181035f8301526142588161421f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506142c781613662565b92915050565b5f602082840312156142e2576142e16135ab565b5b5f6142ef848285016142b9565b91505092915050565b5f819050919050565b5f61431b614316614311846142f8565b6136fd565b6135af565b9050919050565b61432b81614301565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61436381613651565b82525050565b5f614374838361435a565b60208301905092915050565b5f602082019050919050565b5f61439682614331565b6143a0818561433b565b93506143ab8361434b565b805f5b838110156143db5781516143c28882614369565b97506143cd83614380565b9250506001810190506143ae565b5085935050505092915050565b5f60a0820190506143fb5f830188613771565b6144086020830187614322565b818103604083015261441a818661438c565b905061442960608301856138b5565b6144366080830184613771565b9695505050505050565b5f6040820190506144535f830185613771565b8181036020830152614465818461438c565b90509392505050565b5f60c0820190506144815f8301896138b5565b61448e6020830188613771565b61449b6040830187614322565b6144a86060830186614322565b6144b560808301856138b5565b6144c260a0830184613771565b979650505050505050565b5f815190506144db816135b8565b92915050565b5f805f606084860312156144f8576144f76135ab565b5b5f614505868287016144cd565b9350506020614516868287016144cd565b9250506040614527868287016144cd565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fb56bf63913a3f1ab41953cb68b40a2c2e257e2e184afe67b66a3b130435a1b664736f6c63430008140033

Deployed Bytecode Sourcemap

14029:15063:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18270:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20805:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19564:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15740:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18547:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14396:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20360:437;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22091:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23790:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21970:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14538:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23251:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18456:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15198:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18933:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22434:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14930:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15855:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22637:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14759:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15245:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15286;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18655:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15568:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22784:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15622:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15415:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15112:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14875:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5820:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6045:145;;;;;;;;;;;;;:::i;:::-;;18361:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19436:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15459:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15327:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19159:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23114:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23615:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21264:480;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22935:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15026:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15788:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15155:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14816:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14265:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15902:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14984:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18782:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21756:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20217:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15372:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22234:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15068:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20078:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15954:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18270:83;18307:13;18340:5;18333:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18270:83;:::o;20805:447::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20956:15:::1;20936:17;:35;;;;21002:15;20982:17;:35;;;;21050:17;21028:19;:39;;;;21101:65;21146:19;;21101:40;21123:17;;21101;;:21;;:40;;;;:::i;:::-;:44;;:65;;;;:::i;:::-;21080:18;:86;;;;21207:2;21185:18;;:24;;21177:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20805:447:::0;;;:::o;19564:161::-;19639:4;19656:39;19665:12;:10;:12::i;:::-;19679:7;19688:6;19656:8;:39::i;:::-;19713:4;19706:11;;19564:161;;;;:::o;15740:41::-;;;;;;;;;;;;;:::o;18547:100::-;18600:7;18627:12;;18620:19;;18547:100;:::o;14396:101::-;;;;;;;;;;;;;:::o;20360:437::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20509:15:::1;20490:16;:34;;;;20554:15;20535:16;:34;;;;20601:17;20580:18;:38;;;;20651:62;20694:18;;20651:38;20672:16;;20651;;:20;;:38;;;;:::i;:::-;:42;;:62;;;;:::i;:::-;20631:17;:82;;;;20753:2;20732:17;;:23;;20724:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;20360:437:::0;;;:::o;22091:135::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22212:6:::1;22182:19;:27;22202:6;22182:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;22091:135:::0;;:::o;23790:313::-;23888:4;23905:36;23915:6;23923:9;23934:6;23905:9;:36::i;:::-;;23952:121;23961:6;23969:12;:10;:12::i;:::-;23983:89;24021:6;23983:89;;;;;;;;;;;;;;;;;:11;:19;23995:6;23983:19;;;;;;;;;;;;;;;:33;24003:12;:10;:12::i;:::-;23983:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;23952:8;:121::i;:::-;24091:4;24084:11;;23790:313;;;;;:::o;21970:113::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22067:8:::1;22048:16;;:27;;;;;;;;;;;;;;;;;;21970:113:::0;:::o;14538:81::-;;;:::o;23251:128::-;23304:7;23331:40;23348:22;23358:11;23348:9;:22::i;:::-;23331:12;;:16;;:40;;;;:::i;:::-;23324:47;;23251:128;:::o;18456:83::-;18497:5;18522:9;;;;;;;;;;;18515:16;;18456:83;:::o;15198:38::-;;;;:::o;18933:218::-;19021:4;19038:83;19047:12;:10;:12::i;:::-;19061:7;19070:50;19109:10;19070:11;:25;19082:12;:10;:12::i;:::-;19070:25;;;;;;;;;;;;;;;:34;19096:7;19070:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19038:8;:83::i;:::-;19139:4;19132:11;;18933:218;;;;:::o;22434:195::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22535:1:::1;22524:8;:12;22516:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;22613:8;22587:23;:34;;;;22434:195:::0;:::o;14930:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15855:40::-;;;;;;;;;;;;;:::o;22637:139::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22757:10:::1;22724:22;;:44;;;;;;;;;;;;;;;;;;22637:139:::0;:::o;14759:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;15245:34::-;;;;:::o;15286:::-;;;;:::o;18655:119::-;18721:7;18748:9;:18;18758:7;18748:18;;;;;;;;;;;;;;;;18741:25;;18655:119;;;:::o;15568:47::-;;;;:::o;22784:143::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22908:10:::1;22873:24;;:46;;;;;;;;;;;;;;;;;;22784:143:::0;:::o;15622:45::-;;;;:::o;15415:37::-;;;;:::o;15112:36::-;;;;:::o;14875:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5820:79::-;5858:7;5885:6;;;;;;;;;;;5878:13;;5820:79;:::o;6045:145::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6149:1:::1;6112:40;;6133:6;::::0;::::1;;;;;;;;6112:40;;;;;;;;;;;;6180:1;6163:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6045:145::o:0;18361:87::-;18400:13;18433:7;18426:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18361:87;:::o;19436:120::-;19498:7;19525:23;;19518:30;;19436:120;:::o;15459:43::-;;;;:::o;15327:36::-;;;;:::o;19159:269::-;19252:4;19269:129;19278:12;:10;:12::i;:::-;19292:7;19301:96;19340:15;19301:96;;;;;;;;;;;;;;;;;:11;:25;19313:12;:10;:12::i;:::-;19301:25;;;;;;;;;;;;;;;:34;19327:7;19301:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19269:8;:129::i;:::-;19416:4;19409:11;;19159:269;;;;:::o;23114:125::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23223:8:::1;23195:25;;:36;;;;;;;;;;;;;;;;;;23114:125:::0;:::o;23615:167::-;23693:4;23710:42;23720:12;:10;:12::i;:::-;23734:9;23745:6;23710:9;:42::i;:::-;;23770:4;23763:11;;23615:167;;;;:::o;21264:480::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21430:17:::1;21412:15;:35;;;;21476:17;21458:15;:35;;;;21524:19;21504:17;:39;;;;21583:59;21624:17;;21583:36;21603:15;;21583;;:19;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;21556:24;:86;;;;21688:2;21661:24;;:29;;21653:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;21264:480:::0;;;:::o;22935:171::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23036:8:::1;23012:21;;:32;;;;;;;;;;;;;;;;;;23060:38;23089:8;23060:38;;;;;;:::i;:::-;;;;;;;;22935:171:::0;:::o;15026:35::-;;;;:::o;15788:26::-;;;;;;;;;;;;;:::o;15155:36::-;;;;:::o;14816:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14265:99::-;;;;;;;;;;;;;:::o;15902:45::-;;;;;;;;;;;;;:::o;14984:35::-;;;;:::o;18782:143::-;18863:7;18890:11;:18;18902:5;18890:18;;;;;;;;;;;;;;;:27;18909:7;18890:27;;;;;;;;;;;;;;;;18883:34;;18782:143;;;;:::o;21756:206::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21871:3:::1;21856:12;;:18;;;;:::i;:::-;21841:11;:33;;21833:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;21943:11;21928:12;:26;;;;21756:206:::0;:::o;20217:135::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20336:8:::1;20307:17;:26;20325:7;20307:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;20217:135:::0;;:::o;15372:36::-;;;;:::o;22234:192::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22341:3:::1;22326:12;;:18;;;;:::i;:::-;22314:8;:30;;22306:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;22410:8;22396:10;:22;;;;22234:192:::0;:::o;15068:37::-;;;;:::o;20078:127::-;5964:12;:10;:12::i;:::-;5954:22;;:6;;;;;;;;;;:22;;;5946:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20191:6:::1;20165:15;:23;20181:6;20165:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;20078:127:::0;;:::o;15954:35::-;;;;;;;;;;;;;:::o;154:115::-;207:15;250:10;235:26;;154:115;:::o;1222:181::-;1280:7;1300:9;1316:1;1312;:5;;;;:::i;:::-;1300:17;;1341:1;1336;:6;;1328:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1394:1;1387:8;;;1222:181;;;;:::o;19733:337::-;19843:1;19826:19;;:5;:19;;;19818:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19924:1;19905:21;;:7;:21;;;19897:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20008:6;19978:11;:18;19990:5;19978:18;;;;;;;;;;;;;;;:27;19997:7;19978:27;;;;;;;;;;;;;;;:36;;;;20046:7;20030:32;;20039:5;20030:32;;;20055:6;20030:32;;;;;;:::i;:::-;;;;;;;;19733:337;;;:::o;24111:1707::-;24198:4;24243:1;24225:20;;:6;:20;;;24217:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;24327:1;24306:23;;:9;:23;;;24298:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;24385:16;;;;;;;;;;;24382:1429;;;24435:41;24450:6;24458:9;24469:6;24435:14;:41::i;:::-;24428:48;;;;24382:1429;24532:15;:23;24548:6;24532:23;;;;;;;;;;;;;;;;;;;;;;;;;24531:24;:55;;;;;24560:15;:26;24576:9;24560:26;;;;;;;;;;;;;;;;;;;;;;;;;24559:27;24531:55;24528:170;;;24625:12;;24615:6;:22;;24607:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;24528:170;24726:28;24757:24;24775:4;24757:9;:24::i;:::-;24726:55;;24796:28;24851:23;;24827:20;:47;;24796:78;;24907:23;:44;;;;;24935:16;;;;;;;;;;;24934:17;24907:44;:69;;;;;24956:12;:20;24969:6;24956:20;;;;;;;;;;;;;;;;;;;;;;;;;24955:21;24907:69;:94;;;;;24980:21;;;;;;;;;;;24907:94;24903:305;;;25039:25;;;;;;;;;;;25036:97;;;25110:23;;25087:46;;25036:97;25152:36;25167:20;25152:14;:36::i;:::-;24903:305;25244:53;25266:6;25244:53;;;;;;;;;;;;;;;;;:9;:17;25254:6;25244:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25224:9;:17;25234:6;25224:17;;;;;;;;;;;;;;;:73;;;;25314:19;25337:17;:25;25355:6;25337:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;25366:17;:28;25384:9;25366:28;;;;;;;;;;;;;;;;;;;;;;;;;25337:57;25336:148;;25450:34;25458:6;25466:9;25477:6;25450:7;:34::i;:::-;25336:148;;;25441:6;25336:148;25314:170;;25504:16;;;;;;;;;;;:51;;;;;25525:19;:30;25545:9;25525:30;;;;;;;;;;;;;;;;;;;;;;;;;25524:31;25504:51;25501:133;;;25623:10;;25582:37;25607:11;25582:20;25592:9;25582;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;25574:60;;;;;;25501:133;25674:37;25699:11;25674:9;:20;25684:9;25674:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;25651:9;:20;25661:9;25651:20;;;;;;;;;;;;;;;:60;;;;25750:9;25733:40;;25742:6;25733:40;;;25761:11;25733:40;;;;;;:::i;:::-;;;;;;;;25795:4;25788:11;;;;;24111:1707;;;;;;:::o;1555:192::-;1641:7;1674:1;1669;:6;;1677:12;1661:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1701:9;1717:1;1713;:5;;;;:::i;:::-;1701:17;;1738:1;1731:8;;;1555:192;;;;;:::o;1411:136::-;1469:7;1496:43;1500:1;1503;1496:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1489:50;;1411:136;;;;:::o;25826:330::-;25919:4;25956:53;25978:6;25956:53;;;;;;;;;;;;;;;;;:9;:17;25966:6;25956:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;25936:9;:17;25946:6;25936:17;;;;;;;;;;;;;;;:73;;;;26043:32;26068:6;26043:9;:20;26053:9;26043:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;26020:9;:20;26030:9;26020:20;;;;;;;;;;;;;;;:55;;;;26108:9;26091:35;;26100:6;26091:35;;;26119:6;26091:35;;;;;;:::i;:::-;;;;;;;;26144:4;26137:11;;25826:330;;;;;:::o;26164:1090::-;16431:4;16412:16;;:23;;;;;;;;;;;;;;;;;;26246:19:::1;26268:65;26331:1;26268:58;26301:24;;26268:28;26280:15;;26268:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;26246:87;;26344:21;26368:24;26380:11;26368:7;:11;;:24;;;;:::i;:::-;26344:48;;26405:31;26422:13;26405:16;:31::i;:::-;26447:22;26472:21;26447:46;;26506:19;26528:52;26557:22;26577:1;26557:15;;:19;;:22;;;;:::i;:::-;26528:24;;:28;;:52;;;;:::i;:::-;26506:74;;26601:26;26630:59;26687:1;26630:52;26670:11;26630:35;26649:15;;26630:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;26601:88;;26700:28;26731:54;26773:11;26731:37;26750:17;;26731:14;:18;;:37;;;;:::i;:::-;:41;;:54;;;;:::i;:::-;26700:85;;26796:26;26825:64;26868:20;26825:38;26844:18;26825:14;:18;;:38;;;;:::i;:::-;:42;;:64;;;;:::i;:::-;26796:93;;26926:1;26905:18;:22;26902:104;;;26942:64;26963:22;;;;;;;;;;;26987:18;26942:20;:64::i;:::-;26902:104;27045:1;27022:20;:24;27019:110;;;27061:68;27082:24;;;;;;;;;;;27108:20;27061;:68::i;:::-;27019:110;27166:1;27145:18;:22;:41;;;;;27185:1;27171:11;:15;27145:41;27142:104;;;27201:45;27214:11;27227:18;27201:12;:45::i;:::-;27142:104;26225:1029;;;;;;;16477:5:::0;16458:16;;:24;;;;;;;;;;;;;;;;;;26164:1090;:::o;28461:622::-;28547:7;28577:17;28597:1;28577:21;;28622:12;:20;28635:6;28622:20;;;;;;;;;;;;;;;;;;;;;;;;;28619:223;;;28671:38;28705:3;28671:29;28682:17;;28671:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;28659:50;;28619:223;;;28739:12;:23;28752:9;28739:23;;;;;;;;;;;;;;;;;;;;;;;;;28736:106;;;28791:39;28826:3;28791:30;28802:18;;28791:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;28779:51;;28736:106;28619:223;28877:1;28865:9;:13;28862:173;;;28922:39;28951:9;28922;:24;28940:4;28922:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;28895:9;:24;28913:4;28895:24;;;;;;;;;;;;;;;:66;;;;29006:4;28981:42;;28990:6;28981:42;;;29013:9;28981:42;;;;;;:::i;:::-;;;;;;;;28862:173;29054:21;29065:9;29054:6;:10;;:21;;;;:::i;:::-;29047:28;;;28461:622;;;;;:::o;1755:250::-;1813:7;1842:1;1837;:6;1833:47;;1867:1;1860:8;;;;1833:47;1892:9;1908:1;1904;:5;;;;:::i;:::-;1892:17;;1937:1;1932;1928;:5;;;;:::i;:::-;:10;1920:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1996:1;1989:8;;;1755:250;;;;;:::o;2013:132::-;2071:7;2098:39;2102:1;2105;2098:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2091:46;;2013:132;;;;:::o;27266:666::-;27392:21;27430:1;27416:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27392:40;;27461:4;27443;27448:1;27443:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27487:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27477:4;27482:1;27477:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27522:62;27539:4;27554:15;;;;;;;;;;;27572:11;27522:8;:62::i;:::-;27623:15;;;;;;;;;;;:66;;;27704:11;27730:1;27774:4;27801;27837:15;27623:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27889:35;27906:11;27919:4;27889:35;;;;;;;:::i;:::-;;;;;;;;27321:611;27266:666;:::o;23387:126::-;23479:9;:18;;:26;23498:6;23479:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23387:126;;:::o;27940:513::-;28088:62;28105:4;28120:15;;;;;;;;;;;28138:11;28088:8;:62::i;:::-;28193:15;;;;;;;;;;;:31;;;28232:9;28265:4;28285:11;28311:1;28354;28397:7;:5;:7::i;:::-;28419:15;28193:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;27940:513;;:::o;2153:278::-;2239:7;2271:1;2267;:5;2274:12;2259:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2298:9;2314:1;2310;:5;;;;:::i;:::-;2298:17;;2422:1;2415:8;;;2153:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:60::-;4099:3;4120:5;4113:12;;4071:60;;;:::o;4137:142::-;4187:9;4220:53;4238:34;4247:24;4265:5;4247:24;:::i;:::-;4238:34;:::i;:::-;4220:53;:::i;:::-;4207:66;;4137:142;;;:::o;4285:126::-;4335:9;4368:37;4399:5;4368:37;:::i;:::-;4355:50;;4285:126;;;:::o;4417:153::-;4494:9;4527:37;4558:5;4527:37;:::i;:::-;4514:50;;4417:153;;;:::o;4576:185::-;4690:64;4748:5;4690:64;:::i;:::-;4685:3;4678:77;4576:185;;:::o;4767:276::-;4887:4;4925:2;4914:9;4910:18;4902:26;;4938:98;5033:1;5022:9;5018:17;5009:6;4938:98;:::i;:::-;4767:276;;;;:::o;5049:118::-;5136:24;5154:5;5136:24;:::i;:::-;5131:3;5124:37;5049:118;;:::o;5173:222::-;5266:4;5304:2;5293:9;5289:18;5281:26;;5317:71;5385:1;5374:9;5370:17;5361:6;5317:71;:::i;:::-;5173:222;;;;:::o;5401:104::-;5446:7;5475:24;5493:5;5475:24;:::i;:::-;5464:35;;5401:104;;;:::o;5511:142::-;5614:32;5640:5;5614:32;:::i;:::-;5609:3;5602:45;5511:142;;:::o;5659:254::-;5768:4;5806:2;5795:9;5791:18;5783:26;;5819:87;5903:1;5892:9;5888:17;5879:6;5819:87;:::i;:::-;5659:254;;;;:::o;5919:116::-;5989:21;6004:5;5989:21;:::i;:::-;5982:5;5979:32;5969:60;;6025:1;6022;6015:12;5969:60;5919:116;:::o;6041:133::-;6084:5;6122:6;6109:20;6100:29;;6138:30;6162:5;6138:30;:::i;:::-;6041:133;;;;:::o;6180:468::-;6245:6;6253;6302:2;6290:9;6281:7;6277:23;6273:32;6270:119;;;6308:79;;:::i;:::-;6270:119;6428:1;6453:53;6498:7;6489:6;6478:9;6474:22;6453:53;:::i;:::-;6443:63;;6399:117;6555:2;6581:50;6623:7;6614:6;6603:9;6599:22;6581:50;:::i;:::-;6571:60;;6526:115;6180:468;;;;;:::o;6654:619::-;6731:6;6739;6747;6796:2;6784:9;6775:7;6771:23;6767:32;6764:119;;;6802:79;;:::i;:::-;6764:119;6922:1;6947:53;6992:7;6983:6;6972:9;6968:22;6947:53;:::i;:::-;6937:63;;6893:117;7049:2;7075:53;7120:7;7111:6;7100:9;7096:22;7075:53;:::i;:::-;7065:63;;7020:118;7177:2;7203:53;7248:7;7239:6;7228:9;7224:22;7203:53;:::i;:::-;7193:63;;7148:118;6654:619;;;;;:::o;7279:323::-;7335:6;7384:2;7372:9;7363:7;7359:23;7355:32;7352:119;;;7390:79;;:::i;:::-;7352:119;7510:1;7535:50;7577:7;7568:6;7557:9;7553:22;7535:50;:::i;:::-;7525:60;;7481:114;7279:323;;;;:::o;7608:118::-;7695:24;7713:5;7695:24;:::i;:::-;7690:3;7683:37;7608:118;;:::o;7732:222::-;7825:4;7863:2;7852:9;7848:18;7840:26;;7876:71;7944:1;7933:9;7929:17;7920:6;7876:71;:::i;:::-;7732:222;;;;:::o;7960:86::-;7995:7;8035:4;8028:5;8024:16;8013:27;;7960:86;;;:::o;8052:112::-;8135:22;8151:5;8135:22;:::i;:::-;8130:3;8123:35;8052:112;;:::o;8170:214::-;8259:4;8297:2;8286:9;8282:18;8274:26;;8310:67;8374:1;8363:9;8359:17;8350:6;8310:67;:::i;:::-;8170:214;;;;:::o;8390:329::-;8449:6;8498:2;8486:9;8477:7;8473:23;8469:32;8466:119;;;8504:79;;:::i;:::-;8466:119;8624:1;8649:53;8694:7;8685:6;8674:9;8670:22;8649:53;:::i;:::-;8639:63;;8595:117;8390:329;;;;:::o;8725:::-;8784:6;8833:2;8821:9;8812:7;8808:23;8804:32;8801:119;;;8839:79;;:::i;:::-;8801:119;8959:1;8984:53;9029:7;9020:6;9009:9;9005:22;8984:53;:::i;:::-;8974:63;;8930:117;8725:329;;;;:::o;9060:474::-;9128:6;9136;9185:2;9173:9;9164:7;9160:23;9156:32;9153:119;;;9191:79;;:::i;:::-;9153:119;9311:1;9336:53;9381:7;9372:6;9361:9;9357:22;9336:53;:::i;:::-;9326:63;;9282:117;9438:2;9464:53;9509:7;9500:6;9489:9;9485:22;9464:53;:::i;:::-;9454:63;;9409:118;9060:474;;;;;:::o;9540:180::-;9588:77;9585:1;9578:88;9685:4;9682:1;9675:15;9709:4;9706:1;9699:15;9726:320;9770:6;9807:1;9801:4;9797:12;9787:22;;9854:1;9848:4;9844:12;9875:18;9865:81;;9931:4;9923:6;9919:17;9909:27;;9865:81;9993:2;9985:6;9982:14;9962:18;9959:38;9956:84;;10012:18;;:::i;:::-;9956:84;9777:269;9726:320;;;:::o;10052:182::-;10192:34;10188:1;10180:6;10176:14;10169:58;10052:182;:::o;10240:366::-;10382:3;10403:67;10467:2;10462:3;10403:67;:::i;:::-;10396:74;;10479:93;10568:3;10479:93;:::i;:::-;10597:2;10592:3;10588:12;10581:19;;10240:366;;;:::o;10612:419::-;10778:4;10816:2;10805:9;10801:18;10793:26;;10865:9;10859:4;10855:20;10851:1;10840:9;10836:17;10829:47;10893:131;11019:4;10893:131;:::i;:::-;10885:139;;10612:419;;;:::o;11037:180::-;11177:32;11173:1;11165:6;11161:14;11154:56;11037:180;:::o;11223:366::-;11365:3;11386:67;11450:2;11445:3;11386:67;:::i;:::-;11379:74;;11462:93;11551:3;11462:93;:::i;:::-;11580:2;11575:3;11571:12;11564:19;;11223:366;;;:::o;11595:419::-;11761:4;11799:2;11788:9;11784:18;11776:26;;11848:9;11842:4;11838:20;11834:1;11823:9;11819:17;11812:47;11876:131;12002:4;11876:131;:::i;:::-;11868:139;;11595:419;;;:::o;12020:179::-;12160:31;12156:1;12148:6;12144:14;12137:55;12020:179;:::o;12205:366::-;12347:3;12368:67;12432:2;12427:3;12368:67;:::i;:::-;12361:74;;12444:93;12533:3;12444:93;:::i;:::-;12562:2;12557:3;12553:12;12546:19;;12205:366;;;:::o;12577:419::-;12743:4;12781:2;12770:9;12766:18;12758:26;;12830:9;12824:4;12820:20;12816:1;12805:9;12801:17;12794:47;12858:131;12984:4;12858:131;:::i;:::-;12850:139;;12577:419;;;:::o;13002:222::-;13142:34;13138:1;13130:6;13126:14;13119:58;13211:5;13206:2;13198:6;13194:15;13187:30;13002:222;:::o;13230:366::-;13372:3;13393:67;13457:2;13452:3;13393:67;:::i;:::-;13386:74;;13469:93;13558:3;13469:93;:::i;:::-;13587:2;13582:3;13578:12;13571:19;;13230:366;;;:::o;13602:419::-;13768:4;13806:2;13795:9;13791:18;13783:26;;13855:9;13849:4;13845:20;13841:1;13830:9;13826:17;13819:47;13883:131;14009:4;13883:131;:::i;:::-;13875:139;;13602:419;;;:::o;14027:228::-;14167:34;14163:1;14155:6;14151:14;14144:58;14236:11;14231:2;14223:6;14219:15;14212:36;14027:228;:::o;14261:366::-;14403:3;14424:67;14488:2;14483:3;14424:67;:::i;:::-;14417:74;;14500:93;14589:3;14500:93;:::i;:::-;14618:2;14613:3;14609:12;14602:19;;14261:366;;;:::o;14633:419::-;14799:4;14837:2;14826:9;14822:18;14814:26;;14886:9;14880:4;14876:20;14872:1;14861:9;14857:17;14850:47;14914:131;15040:4;14914:131;:::i;:::-;14906:139;;14633:419;;;:::o;15058:180::-;15106:77;15103:1;15096:88;15203:4;15200:1;15193:15;15227:4;15224:1;15217:15;15244:180;15292:77;15289:1;15282:88;15389:4;15386:1;15379:15;15413:4;15410:1;15403:15;15430:185;15470:1;15487:20;15505:1;15487:20;:::i;:::-;15482:25;;15521:20;15539:1;15521:20;:::i;:::-;15516:25;;15560:1;15550:35;;15565:18;;:::i;:::-;15550:35;15607:1;15604;15600:9;15595:14;;15430:185;;;;:::o;15621:225::-;15761:34;15757:1;15749:6;15745:14;15738:58;15830:8;15825:2;15817:6;15813:15;15806:33;15621:225;:::o;15852:366::-;15994:3;16015:67;16079:2;16074:3;16015:67;:::i;:::-;16008:74;;16091:93;16180:3;16091:93;:::i;:::-;16209:2;16204:3;16200:12;16193:19;;15852:366;;;:::o;16224:419::-;16390:4;16428:2;16417:9;16413:18;16405:26;;16477:9;16471:4;16467:20;16463:1;16452:9;16448:17;16441:47;16505:131;16631:4;16505:131;:::i;:::-;16497:139;;16224:419;;;:::o;16649:223::-;16789:34;16785:1;16777:6;16773:14;16766:58;16858:6;16853:2;16845:6;16841:15;16834:31;16649:223;:::o;16878:366::-;17020:3;17041:67;17105:2;17100:3;17041:67;:::i;:::-;17034:74;;17117:93;17206:3;17117:93;:::i;:::-;17235:2;17230:3;17226:12;17219:19;;16878:366;;;:::o;17250:419::-;17416:4;17454:2;17443:9;17439:18;17431:26;;17503:9;17497:4;17493:20;17489:1;17478:9;17474:17;17467:47;17531:131;17657:4;17531:131;:::i;:::-;17523:139;;17250:419;;;:::o;17675:191::-;17715:3;17734:20;17752:1;17734:20;:::i;:::-;17729:25;;17768:20;17786:1;17768:20;:::i;:::-;17763:25;;17811:1;17808;17804:9;17797:16;;17832:3;17829:1;17826:10;17823:36;;;17839:18;;:::i;:::-;17823:36;17675:191;;;;:::o;17872:177::-;18012:29;18008:1;18000:6;17996:14;17989:53;17872:177;:::o;18055:366::-;18197:3;18218:67;18282:2;18277:3;18218:67;:::i;:::-;18211:74;;18294:93;18383:3;18294:93;:::i;:::-;18412:2;18407:3;18403:12;18396:19;;18055:366;;;:::o;18427:419::-;18593:4;18631:2;18620:9;18616:18;18608:26;;18680:9;18674:4;18670:20;18666:1;18655:9;18651:17;18644:47;18708:131;18834:4;18708:131;:::i;:::-;18700:139;;18427:419;;;:::o;18852:223::-;18992:34;18988:1;18980:6;18976:14;18969:58;19061:6;19056:2;19048:6;19044:15;19037:31;18852:223;:::o;19081:366::-;19223:3;19244:67;19308:2;19303:3;19244:67;:::i;:::-;19237:74;;19320:93;19409:3;19320:93;:::i;:::-;19438:2;19433:3;19429:12;19422:19;;19081:366;;;:::o;19453:419::-;19619:4;19657:2;19646:9;19642:18;19634:26;;19706:9;19700:4;19696:20;19692:1;19681:9;19677:17;19670:47;19734:131;19860:4;19734:131;:::i;:::-;19726:139;;19453:419;;;:::o;19878:221::-;20018:34;20014:1;20006:6;20002:14;19995:58;20087:4;20082:2;20074:6;20070:15;20063:29;19878:221;:::o;20105:366::-;20247:3;20268:67;20332:2;20327:3;20268:67;:::i;:::-;20261:74;;20344:93;20433:3;20344:93;:::i;:::-;20462:2;20457:3;20453:12;20446:19;;20105:366;;;:::o;20477:419::-;20643:4;20681:2;20670:9;20666:18;20658:26;;20730:9;20724:4;20720:20;20716:1;20705:9;20701:17;20694:47;20758:131;20884:4;20758:131;:::i;:::-;20750:139;;20477:419;;;:::o;20902:224::-;21042:34;21038:1;21030:6;21026:14;21019:58;21111:7;21106:2;21098:6;21094:15;21087:32;20902:224;:::o;21132:366::-;21274:3;21295:67;21359:2;21354:3;21295:67;:::i;:::-;21288:74;;21371:93;21460:3;21371:93;:::i;:::-;21489:2;21484:3;21480:12;21473:19;;21132:366;;;:::o;21504:419::-;21670:4;21708:2;21697:9;21693:18;21685:26;;21757:9;21751:4;21747:20;21743:1;21732:9;21728:17;21721:47;21785:131;21911:4;21785:131;:::i;:::-;21777:139;;21504:419;;;:::o;21929:222::-;22069:34;22065:1;22057:6;22053:14;22046:58;22138:5;22133:2;22125:6;22121:15;22114:30;21929:222;:::o;22157:366::-;22299:3;22320:67;22384:2;22379:3;22320:67;:::i;:::-;22313:74;;22396:93;22485:3;22396:93;:::i;:::-;22514:2;22509:3;22505:12;22498:19;;22157:366;;;:::o;22529:419::-;22695:4;22733:2;22722:9;22718:18;22710:26;;22782:9;22776:4;22772:20;22768:1;22757:9;22753:17;22746:47;22810:131;22936:4;22810:131;:::i;:::-;22802:139;;22529:419;;;:::o;22954:227::-;23094:34;23090:1;23082:6;23078:14;23071:58;23163:10;23158:2;23150:6;23146:15;23139:35;22954:227;:::o;23187:366::-;23329:3;23350:67;23414:2;23409:3;23350:67;:::i;:::-;23343:74;;23426:93;23515:3;23426:93;:::i;:::-;23544:2;23539:3;23535:12;23528:19;;23187:366;;;:::o;23559:419::-;23725:4;23763:2;23752:9;23748:18;23740:26;;23812:9;23806:4;23802:20;23798:1;23787:9;23783:17;23776:47;23840:131;23966:4;23840:131;:::i;:::-;23832:139;;23559:419;;;:::o;23984:194::-;24024:4;24044:20;24062:1;24044:20;:::i;:::-;24039:25;;24078:20;24096:1;24078:20;:::i;:::-;24073:25;;24122:1;24119;24115:9;24107:17;;24146:1;24140:4;24137:11;24134:37;;;24151:18;;:::i;:::-;24134:37;23984:194;;;;:::o;24184:410::-;24224:7;24247:20;24265:1;24247:20;:::i;:::-;24242:25;;24281:20;24299:1;24281:20;:::i;:::-;24276:25;;24336:1;24333;24329:9;24358:30;24376:11;24358:30;:::i;:::-;24347:41;;24537:1;24528:7;24524:15;24521:1;24518:22;24498:1;24491:9;24471:83;24448:139;;24567:18;;:::i;:::-;24448:139;24232:362;24184:410;;;;:::o;24600:220::-;24740:34;24736:1;24728:6;24724:14;24717:58;24809:3;24804:2;24796:6;24792:15;24785:28;24600:220;:::o;24826:366::-;24968:3;24989:67;25053:2;25048:3;24989:67;:::i;:::-;24982:74;;25065:93;25154:3;25065:93;:::i;:::-;25183:2;25178:3;25174:12;25167:19;;24826:366;;;:::o;25198:419::-;25364:4;25402:2;25391:9;25387:18;25379:26;;25451:9;25445:4;25441:20;25437:1;25426:9;25422:17;25415:47;25479:131;25605:4;25479:131;:::i;:::-;25471:139;;25198:419;;;:::o;25623:180::-;25671:77;25668:1;25661:88;25768:4;25765:1;25758:15;25792:4;25789:1;25782:15;25809:180;25857:77;25854:1;25847:88;25954:4;25951:1;25944:15;25978:4;25975:1;25968:15;25995:143;26052:5;26083:6;26077:13;26068:22;;26099:33;26126:5;26099:33;:::i;:::-;25995:143;;;;:::o;26144:351::-;26214:6;26263:2;26251:9;26242:7;26238:23;26234:32;26231:119;;;26269:79;;:::i;:::-;26231:119;26389:1;26414:64;26470:7;26461:6;26450:9;26446:22;26414:64;:::i;:::-;26404:74;;26360:128;26144:351;;;;:::o;26501:85::-;26546:7;26575:5;26564:16;;26501:85;;;:::o;26592:158::-;26650:9;26683:61;26701:42;26710:32;26736:5;26710:32;:::i;:::-;26701:42;:::i;:::-;26683:61;:::i;:::-;26670:74;;26592:158;;;:::o;26756:147::-;26851:45;26890:5;26851:45;:::i;:::-;26846:3;26839:58;26756:147;;:::o;26909:114::-;26976:6;27010:5;27004:12;26994:22;;26909:114;;;:::o;27029:184::-;27128:11;27162:6;27157:3;27150:19;27202:4;27197:3;27193:14;27178:29;;27029:184;;;;:::o;27219:132::-;27286:4;27309:3;27301:11;;27339:4;27334:3;27330:14;27322:22;;27219:132;;;:::o;27357:108::-;27434:24;27452:5;27434:24;:::i;:::-;27429:3;27422:37;27357:108;;:::o;27471:179::-;27540:10;27561:46;27603:3;27595:6;27561:46;:::i;:::-;27639:4;27634:3;27630:14;27616:28;;27471:179;;;;:::o;27656:113::-;27726:4;27758;27753:3;27749:14;27741:22;;27656:113;;;:::o;27805:732::-;27924:3;27953:54;28001:5;27953:54;:::i;:::-;28023:86;28102:6;28097:3;28023:86;:::i;:::-;28016:93;;28133:56;28183:5;28133:56;:::i;:::-;28212:7;28243:1;28228:284;28253:6;28250:1;28247:13;28228:284;;;28329:6;28323:13;28356:63;28415:3;28400:13;28356:63;:::i;:::-;28349:70;;28442:60;28495:6;28442:60;:::i;:::-;28432:70;;28288:224;28275:1;28272;28268:9;28263:14;;28228:284;;;28232:14;28528:3;28521:10;;27929:608;;;27805:732;;;;:::o;28543:831::-;28806:4;28844:3;28833:9;28829:19;28821:27;;28858:71;28926:1;28915:9;28911:17;28902:6;28858:71;:::i;:::-;28939:80;29015:2;29004:9;29000:18;28991:6;28939:80;:::i;:::-;29066:9;29060:4;29056:20;29051:2;29040:9;29036:18;29029:48;29094:108;29197:4;29188:6;29094:108;:::i;:::-;29086:116;;29212:72;29280:2;29269:9;29265:18;29256:6;29212:72;:::i;:::-;29294:73;29362:3;29351:9;29347:19;29338:6;29294:73;:::i;:::-;28543:831;;;;;;;;:::o;29380:483::-;29551:4;29589:2;29578:9;29574:18;29566:26;;29602:71;29670:1;29659:9;29655:17;29646:6;29602:71;:::i;:::-;29720:9;29714:4;29710:20;29705:2;29694:9;29690:18;29683:48;29748:108;29851:4;29842:6;29748:108;:::i;:::-;29740:116;;29380:483;;;;;:::o;29869:807::-;30118:4;30156:3;30145:9;30141:19;30133:27;;30170:71;30238:1;30227:9;30223:17;30214:6;30170:71;:::i;:::-;30251:72;30319:2;30308:9;30304:18;30295:6;30251:72;:::i;:::-;30333:80;30409:2;30398:9;30394:18;30385:6;30333:80;:::i;:::-;30423;30499:2;30488:9;30484:18;30475:6;30423:80;:::i;:::-;30513:73;30581:3;30570:9;30566:19;30557:6;30513:73;:::i;:::-;30596;30664:3;30653:9;30649:19;30640:6;30596:73;:::i;:::-;29869:807;;;;;;;;;:::o;30682:143::-;30739:5;30770:6;30764:13;30755:22;;30786:33;30813:5;30786:33;:::i;:::-;30682:143;;;;:::o;30831:663::-;30919:6;30927;30935;30984:2;30972:9;30963:7;30959:23;30955:32;30952:119;;;30990:79;;:::i;:::-;30952:119;31110:1;31135:64;31191:7;31182:6;31171:9;31167:22;31135:64;:::i;:::-;31125:74;;31081:128;31248:2;31274:64;31330:7;31321:6;31310:9;31306:22;31274:64;:::i;:::-;31264:74;;31219:129;31387:2;31413:64;31469:7;31460:6;31449:9;31445:22;31413:64;:::i;:::-;31403:74;;31358:129;30831:663;;;;;:::o

Swarm Source

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