ETH Price: $3,159.56 (+0.52%)
Gas: 2 Gwei

Token

BABY REFUND (BRF)
 

Overview

Max Total Supply

1,000,000 BRF

Holders

51

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
90482.eth
Balance
9 BRF

Value
$0.00
0xa450826d154d8f61e517625b7bafc65e9b2bea1b
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:
BaByREFUND

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// telegram = https://babyrefunderc20 

pragma solidity >=0.6.2;

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);

    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: norefund.sol

pragma solidity ^0.8.17;



contract BaByREFUND is Context, IERC20, Ownable {
    using SafeMath for uint256;

    string private constant _name = "BABY REFUND";
    string private constant _symbol = "BRF";
    uint8 private constant _decimals = 9;

    mapping(address => uint256) private _rOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _isExcludedFromFee;
    uint256 private constant MAX = ~uint256(0);
    
    uint256 private constant _tTotal = 1_000_000 * 10 ** _decimals;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 3;
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 3;

 
    uint256 private _redisFee = _redisFeeOnSell;
    uint256 private _taxFee = _taxFeeOnSell;

    uint256 private _previousredisFee = _redisFee;
    uint256 private _previoustaxFee = _taxFee;

    mapping(address => bool) public bots;
    address private _developmentAddress;
    address private _marketingAddress;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool public tradingOpen = false;
    bool private inSwap = false;
    bool public swapEnabled = true;

    
    uint256 public _swapTokensAtAmount = _tTotal.div(200);
    uint256 public _swapTokenMin = _tTotal.div(1000);
    uint256 public launchTime;
    uint256 public _maxTxAmountBuy = _tTotal.div(100); 
    uint256 public _maxTxAmountSell = _tTotal.div(100); 
    uint256 public _maxWalletSize = _tTotal.div(100); 

    event MaxTxAmountUpdated(uint256 _maxTxAmount);

    modifier lockTheSwap() {
        inSwap = true;
        _;
        inSwap = false;
    }


    

    constructor() {
       
        _marketingAddress = msg.sender;
        _developmentAddress = msg.sender;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
         _rOwned[address(this)] = _rTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_developmentAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

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

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

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

    function totalSupply() public pure override returns (uint256) {
        return _tTotal;
    }

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

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

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

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function 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 tokenFromReflection(
        uint256 rAmount
    ) private view returns (uint256) {
        require(
            rAmount <= _rTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getRate();
        return rAmount.div(currentRate);
    }

    function removeAllFee() private {
        if (_redisFee == 0 && _taxFee == 0) return;

        _previousredisFee = _redisFee;
        _previoustaxFee = _taxFee;

        _redisFee = 0;
        _taxFee = 0;
    }

    function restoreAllFee() private {
        _redisFee = _previousredisFee;
        _taxFee = _previoustaxFee;
    }

    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 _transfer(address from, address to, uint256 amount) private {
        require(amount > 0, "Transfer amount must be greater than zero");

        if (from != owner() && to != owner() && from != address(this)) {
            //Trade start check
            if (!tradingOpen) {
                require(
                    from == owner() || from == address(this),
                    "TOKEN: This account cannot send tokens until trading is enabled"
                );
            }

            require(
                !bots[from] && !bots[to],
                "TOKEN: Your account is blacklisted!"
            );

            if (block.timestamp == launchTime && from == uniswapV2Pair)
            {
                bots[to] = true;

            }

            if (
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to] &&
                !_isExcludedFromFee[tx.origin]
            ) {
                //buy case
                if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                    require(
                        amount <= _maxTxAmountBuy,
                        "TOKEN: Max Transaction Limit"
                    );
                }
                //sell case
                if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                    require(
                        amount <= _maxTxAmountSell,
                        "TOKEN: Max Transaction Limit"
                    );
                }
            }

            if (
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to] &&
                !_isExcludedFromFee[tx.origin] &&
                to != uniswapV2Pair
            ) {
                require(
                    balanceOf(to) + amount < _maxWalletSize,
                    "TOKEN: Balance exceeds wallet size!"
                );
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;

            if (
                canSwap &&
                !inSwap &&
                from != uniswapV2Pair &&
                swapEnabled &&
                !_isExcludedFromFee[from] &&
                !_isExcludedFromFee[to]
            ) {
                if (amount > _swapTokenMin) {
                    swapTokensForEth(_swapTokensAtAmount);
                }

                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
        }

        bool takeFee = true;

        //Transfer Tokens
        if (
            (_isExcludedFromFee[from] || _isExcludedFromFee[to]) ||
            (from != uniswapV2Pair && to != uniswapV2Pair)
        ) {
            takeFee = false;
        } else {
           
            if (from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
        }
    _tokenTransfer(from, to, amount, takeFee);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        if (tokenAmount == 0) {
            return;
        }
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function sendETHToFee(uint256 amount) private {
        (bool transferSuccess, ) = payable(_marketingAddress).call{
            value: amount
        }("");
        require(transferSuccess, "eth transfer failed");
    }

    function openTrading(bool _tradingOpen) public onlyOwner {
        if (launchTime == 0) { launchTime = block.timestamp; }
        tradingOpen = _tradingOpen;
    }

    function manualswap(uint256 amount) external {
        require(
            _msgSender() == _developmentAddress ||
                _msgSender() == _marketingAddress ||
                _msgSender() == owner()
        );

        swapTokensForEth(amount);
    }

    function changeDevAndMarketingAddress(
        address _newDev,
        address _newMarketing
    ) external onlyOwner {
        _developmentAddress = _newDev;
        _marketingAddress = _newMarketing;
    }

    function manualsend() external {
        require(
            _msgSender() == _developmentAddress ||
                _msgSender() == _marketingAddress ||
                _msgSender() == owner()
        );
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function BBots(address[] memory bots_) external onlyOwner {
        for (uint256 i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function UBot(address notbot) external onlyOwner {
        bots[notbot] = false;
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();
        _transferStandard(sender, recipient, amount);
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tTeam
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        if (tTeam > 0) { _takeTeam(tTeam, sender); }
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _takeTeam(uint256 tTeam, address sender) private {
        uint256 currentRate = _getRate();
        uint256 rTeam = tTeam.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        emit Transfer(sender, address(this), tTeam);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function isERC20(address tokenAdd, uint256 amount) external onlyOwner {
        require(
            IERC20(tokenAdd).balanceOf(address(this)) >= amount,
            "0 ERC20 balance"
        );
        IERC20(tokenAdd).transfer(address(_developmentAddress), amount);
    }

    receive() external payable {}

    function _getValues(
        uint256 tAmount
    )
        private
        view
        returns (uint256, uint256, uint256, uint256, uint256, uint256)
    {
        (uint256 tTransferAmount, uint256 tFee, uint256 tTeam) = _getTValues(
            tAmount,
            _redisFee,
            _taxFee
        );
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            tTeam,
            currentRate
        );
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tTeam);
    }

    function _getTValues(
        uint256 tAmount,
        uint256 redisFee,
        uint256 taxFee
    ) private pure returns (uint256, uint256, uint256) {
        uint256 tFee = tAmount.mul(redisFee).div(100);
        uint256 tTeam = tAmount.mul(taxFee).div(100);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tTeam);
        return (tTransferAmount, tFee, tTeam);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 tTeam,
        uint256 currentRate
    ) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rTeam = tTeam.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function setFee(
        uint256 redisFeeOnBuy,
        uint256 redisFeeOnSell,
        uint256 taxFeeOnBuy,
        uint256 taxFeeOnSell
    ) external onlyOwner {
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }

    //Set minimum tokens required to swap.
    function setMinSwapTokensThreshold(
        uint256 swapTokensAtAmount,
        uint256 swapTokensMin
    ) external onlyOwner {
        _swapTokensAtAmount = swapTokensAtAmount;
        _swapTokenMin = swapTokensMin;
    }

    //Set minimum tokens required to swap.
    function toggleSwap(bool _swapEnabled) external onlyOwner {
        swapEnabled = _swapEnabled;
    }

    //Set maximum transaction
    function setMaxTxnAmount(
        uint256 maxTxAmountBuy,
        uint256 maxAmountSell
    ) external onlyOwner {
        _maxTxAmountBuy = maxTxAmountBuy;
        _maxTxAmountSell = maxAmountSell;
    }

    function setMaxWalletSize(uint256 maxWalletSize) external onlyOwner {
        _maxWalletSize = maxWalletSize;
    }

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

    function addlquidity(uint256 tokenAmount) external payable onlyOwner {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    //TEST
    function changeUniswapV2pair(address _newPair) external onlyOwner {
        uniswapV2Pair = _newPair;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":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":"bots_","type":"address[]"}],"name":"BBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"notbot","type":"address"}],"name":"UBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_maxTxAmountBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmountSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokenMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addlquidity","outputs":[],"stateMutability":"payable","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":[{"internalType":"address","name":"","type":"address"}],"name":"bots","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newDev","type":"address"},{"internalType":"address","name":"_newMarketing","type":"address"}],"name":"changeDevAndMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_newPair","type":"address"}],"name":"changeUniswapV2pair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"isERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_tradingOpen","type":"bool"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmountBuy","type":"uint256"},{"internalType":"uint256","name":"maxAmountSell","type":"uint256"}],"name":"setMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWalletSize","type":"uint256"}],"name":"setMaxWalletSize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapTokensAtAmount","type":"uint256"},{"internalType":"uint256","name":"swapTokensMin","type":"uint256"}],"name":"setMinSwapTokensThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a620000149190620009e0565b620f424062000024919062000a31565b60001962000033919062000aab565b60001962000042919062000ae3565b6004556000600655600360075560006008556003600955600854600a55600954600b55600a54600c55600b54600d556000601260146101000a81548160ff0219169083151502179055506000601260156101000a81548160ff0219169083151502179055506001601260166101000a81548160ff021916908315150217905550620000fc60c86009600a620000d89190620009e0565b620f4240620000e8919062000a31565b6200073960201b620014861790919060201c565b6013556200013a6103e86009600a620001169190620009e0565b620f424062000126919062000a31565b6200073960201b620014861790919060201c565b6014556200017760646009600a620001539190620009e0565b620f424062000163919062000a31565b6200073960201b620014861790919060201c565b601655620001b460646009600a620001909190620009e0565b620f4240620001a0919062000a31565b6200073960201b620014861790919060201c565b601755620001f160646009600a620001cd9190620009e0565b620f4240620001dd919062000a31565b6200073960201b620014861790919060201c565b6018553480156200020157600080fd5b5062000222620002166200075160201b60201c565b6200075960201b60201c565b33601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905080601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200034a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000370919062000b88565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fe919062000b88565b6040518363ffffffff1660e01b81526004016200041d92919062000bcb565b6020604051808303816000875af11580156200043d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000463919062000b88565b601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600454600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160036000620004ff6200081d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160036000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006ac6200075160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009600a6200070b9190620009e0565b620f42406200071b919062000a31565b6040516200072a919062000c09565b60405180910390a35062000c5e565b6000818362000749919062000c26565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620008d457808604811115620008ac57620008ab62000846565b5b6001851615620008bc5780820291505b8081029050620008cc8562000875565b94506200088c565b94509492505050565b600082620008ef5760019050620009c2565b81620008ff5760009050620009c2565b8160018114620009185760028114620009235762000959565b6001915050620009c2565b60ff84111562000938576200093762000846565b5b8360020a91508482111562000952576200095162000846565b5b50620009c2565b5060208310610133831016604e8410600b8410161715620009935782820a9050838111156200098d576200098c62000846565b5b620009c2565b620009a2848484600162000882565b92509050818404811115620009bc57620009bb62000846565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620009ed82620009c9565b9150620009fa83620009d3565b925062000a297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008dd565b905092915050565b600062000a3e82620009c9565b915062000a4b83620009c9565b925082820262000a5b81620009c9565b9150828204841483151762000a755762000a7462000846565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ab882620009c9565b915062000ac583620009c9565b92508262000ad85762000ad762000a7c565b5b828206905092915050565b600062000af082620009c9565b915062000afd83620009c9565b925082820390508181111562000b185762000b1762000846565b5b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000b508262000b23565b9050919050565b62000b628162000b43565b811462000b6e57600080fd5b50565b60008151905062000b828162000b57565b92915050565b60006020828403121562000ba15762000ba062000b1e565b5b600062000bb18482850162000b71565b91505092915050565b62000bc58162000b43565b82525050565b600060408201905062000be2600083018562000bba565b62000bf1602083018462000bba565b9392505050565b62000c0381620009c9565b82525050565b600060208201905062000c20600083018462000bf8565b92915050565b600062000c3382620009c9565b915062000c4083620009c9565b92508262000c535762000c5262000a7c565b5b828204905092915050565b6142948062000c6e6000396000f3fe6080604052600436106102295760003560e01c8063881dce6011610123578063b0f15959116100ab578063dd7474a11161006f578063dd7474a1146107df578063ea1644d514610808578063f2fde38b14610831578063f59d047c1461085a578063ffb54a991461088557610230565b8063b0f15959146106ea578063bfd7928414610713578063c492f04614610750578063da388d4214610779578063dd62ed3e146107a257610230565b806395d89b41116100f257806395d89b4114610607578063a2a957bb14610632578063a9059cbb1461065b578063aabe9ad314610698578063ae0f3f45146106c157610230565b8063881dce601461056c5780638aec09cd146105955780638da5cb5b146105b15780638f9a55c0146105dc57610230565b806346469ae7116101b15780636ddd1713116101755780636ddd1713146104ab5780636fc3eaec146104d657806370a08231146104ed578063715018a61461052a578063790ca4131461054157610230565b806346469ae7146103d857806349bd5a5e1461040357806350aa3c951461042e5780635f254426146104595780636d8aa8f81461048257610230565b806318160ddd116101f857806318160ddd146102f157806323b872dd1461031c5780632a9b8072146103595780632fd689e314610382578063313ce567146103ad57610230565b806306fdde0314610235578063095ea7b31461026057806312e808011461029d5780631694505e146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108b0565b6040516102579190612f0e565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190612fd8565b6108ed565b6040516102949190613033565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061304e565b61090b565b005b3480156102d257600080fd5b506102db610925565b6040516102e891906130ed565b60405180910390f35b3480156102fd57600080fd5b5061030661094b565b6040516103139190613117565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613132565b61096e565b6040516103509190613033565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906131b1565b610a47565b005b34801561038e57600080fd5b50610397610a7e565b6040516103a49190613117565b60405180910390f35b3480156103b957600080fd5b506103c2610a84565b6040516103cf91906131fa565b60405180910390f35b3480156103e457600080fd5b506103ed610a8d565b6040516103fa9190613117565b60405180910390f35b34801561040f57600080fd5b50610418610a93565b6040516104259190613224565b60405180910390f35b34801561043a57600080fd5b50610443610ab9565b6040516104509190613117565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b919061323f565b610abf565b005b34801561048e57600080fd5b506104a960048036038101906104a491906131b1565b610b4d565b005b3480156104b757600080fd5b506104c0610b72565b6040516104cd9190613033565b60405180910390f35b3480156104e257600080fd5b506104eb610b85565b005b3480156104f957600080fd5b50610514600480360381019061050f919061327f565b610c9a565b6040516105219190613117565b60405180910390f35b34801561053657600080fd5b5061053f610ceb565b005b34801561054d57600080fd5b50610556610cff565b6040516105639190613117565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e91906132ac565b610d05565b005b6105af60048036038101906105aa91906132ac565b610e15565b005b3480156105bd57600080fd5b506105c6610f01565b6040516105d39190613224565b60405180910390f35b3480156105e857600080fd5b506105f1610f2a565b6040516105fe9190613117565b60405180910390f35b34801561061357600080fd5b5061061c610f30565b6040516106299190612f0e565b60405180910390f35b34801561063e57600080fd5b50610659600480360381019061065491906132d9565b610f6d565b005b34801561066757600080fd5b50610682600480360381019061067d9190612fd8565b610f97565b60405161068f9190613033565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190612fd8565b610fb5565b005b3480156106cd57600080fd5b506106e860048036038101906106e3919061304e565b61111e565b005b3480156106f657600080fd5b50610711600480360381019061070c919061327f565b611138565b005b34801561071f57600080fd5b5061073a6004803603810190610735919061327f565b61119b565b6040516107479190613033565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906133a5565b6111bb565b005b34801561078557600080fd5b506107a0600480360381019061079b9190613543565b611268565b005b3480156107ae57600080fd5b506107c960048036038101906107c4919061323f565b611305565b6040516107d69190613117565b60405180910390f35b3480156107eb57600080fd5b506108066004803603810190610801919061327f565b61138c565b005b34801561081457600080fd5b5061082f600480360381019061082a91906132ac565b6113d8565b005b34801561083d57600080fd5b506108586004803603810190610853919061327f565b6113ea565b005b34801561086657600080fd5b5061086f61146d565b60405161087c9190613117565b60405180910390f35b34801561089157600080fd5b5061089a611473565b6040516108a79190613033565b60405180910390f35b60606040518060400160405280600b81526020017f4241425920524546554e44000000000000000000000000000000000000000000815250905090565b60006109016108fa61149c565b84846114a4565b6001905092915050565b61091361166d565b81601381905550806014819055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a61095b91906136ee565b620f42406109699190613739565b905090565b600061097b8484846116eb565b610a3c8461098761149c565b610a378560405180606001604052806028815260200161423760289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ed61149c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123659092919063ffffffff16565b6114a4565b600190509392505050565b610a4f61166d565b600060155403610a6157426015819055505b80601260146101000a81548160ff02191690831515021790555050565b60135481565b60006009905090565b60165481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b610ac761166d565b81600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b5561166d565b80601260166101000a81548160ff02191690831515021790555050565b601260169054906101000a900460ff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bc661149c565b73ffffffffffffffffffffffffffffffffffffffff161480610c3c5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c2461149c565b73ffffffffffffffffffffffffffffffffffffffff16145b80610c805750610c4a610f01565b73ffffffffffffffffffffffffffffffffffffffff16610c6861149c565b73ffffffffffffffffffffffffffffffffffffffff16145b610c8957600080fd5b6000479050610c97816123ba565b50565b6000610ce4600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248c565b9050919050565b610cf361166d565b610cfd60006124fa565b565b60155481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d4661149c565b73ffffffffffffffffffffffffffffffffffffffff161480610dbc5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610da461149c565b73ffffffffffffffffffffffffffffffffffffffff16145b80610e005750610dca610f01565b73ffffffffffffffffffffffffffffffffffffffff16610de861149c565b73ffffffffffffffffffffffffffffffffffffffff16145b610e0957600080fd5b610e12816125be565b50565b610e1d61166d565b610e4a30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836114a4565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343084600080610e96610f01565b426040518863ffffffff1660e01b8152600401610eb8969594939291906137b6565b60606040518083038185885af1158015610ed6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610efb919061382c565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60185481565b60606040518060400160405280600381526020017f4252460000000000000000000000000000000000000000000000000000000000815250905090565b610f7561166d565b8360068190555082600881905550816007819055508060098190555050505050565b6000610fab610fa461149c565b84846116eb565b6001905092915050565b610fbd61166d565b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ff79190613224565b602060405180830381865afa158015611014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611038919061387f565b1015611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906138f8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016110d6929190613918565b6020604051808303816000875af11580156110f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111199190613956565b505050565b61112661166d565b81601681905550806017819055505050565b61114061166d565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6111c361166d565b60005b838390508110156112625781600360008686858181106111e9576111e8613983565b5b90506020020160208101906111fe919061327f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061125a906139b2565b9150506111c6565b50505050565b61127061166d565b60005b8151811015611301576001600e600084848151811061129557611294613983565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112f9906139b2565b915050611273565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61139461166d565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113e061166d565b8060188190555050565b6113f261166d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613a6c565b60405180910390fd5b61146a816124fa565b50565b60175481565b601260149054906101000a900460ff1681565b600081836114949190613abb565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a90613b5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157990613bf0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116609190613117565b60405180910390a3505050565b61167561149c565b73ffffffffffffffffffffffffffffffffffffffff16611693610f01565b73ffffffffffffffffffffffffffffffffffffffff16146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090613c5c565b60405180910390fd5b565b6000811161172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590613cee565b60405180910390fd5b611736610f01565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117a45750611774610f01565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117dc57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561206457601260149054906101000a900460ff166118a1576117fd610f01565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061186157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790613d80565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119455750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90613e12565b60405180910390fd5b601554421480156119e25750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611a40576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ae45750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b3a5750600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d2c57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611bea5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c3557601654811115611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90613e7e565b60405180910390fd5b5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611ce05750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611d2b57601754811115611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613e7e565b60405180910390fd5b5b5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611dd05750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e265750600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e805750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611edd5760185481611e9284610c9a565b611e9c9190613e9e565b10611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390613f44565b60405180910390fd5b5b6000611ee830610c9a565b905060006013548210159050808015611f0e5750601260159054906101000a900460ff16155b8015611f685750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f805750601260169054906101000a900460ff165b8015611fd65750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561202c5750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561206157601454831115612047576120466013546125be565b5b6000479050600081111561205f5761205e476123ba565b5b505b50505b600060019050600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061210b5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806121be5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121bd5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156121cc5760009050612353565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156122775750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561228f57600654600a81905550600754600b819055505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561233a5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561235257600854600a81905550600954600b819055505b5b61235f84848484612841565b50505050565b60008383111582906123ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a49190612f0e565b60405180910390fd5b5082840390509392505050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161240290613f95565b60006040518083038185875af1925050503d806000811461243f576040519150601f19603f3d011682016040523d82523d6000602084013e612444565b606091505b5050905080612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613ff6565b60405180910390fd5b5050565b60006004548211156124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614088565b60405180910390fd5b60006124dd61286e565b90506124f2818461148690919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260156101000a81548160ff0219169083151502179055506000810315612823576000600267ffffffffffffffff8111156125ff576125fe613405565b5b60405190808252806020026020018201604052801561262d5781602001602082028036833780820191505090505b509050308160008151811061264557612644613983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271091906140bd565b8160018151811061272457612723613983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061278b30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114a4565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127ef9594939291906141a8565b600060405180830381600087803b15801561280957600080fd5b505af115801561281d573d6000803e3d6000fd5b50505050505b6000601260156101000a81548160ff02191690831515021790555050565b8061284f5761284e612899565b5b61285a8484846128d6565b8061286857612867612aac565b5b50505050565b600080600061287b612ac0565b91509150612892818361148690919063ffffffff16565b9250505090565b6000600a541480156128ad57506000600b54145b6128d457600a54600c81905550600b54600d819055506000600a819055506000600b819055505b565b6000806000806000806128e887612b58565b95509550955095509550955061294686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc090919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129db85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115612a3257612a31818a612bec565b5b612a3c8483612d0f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a999190613117565b60405180910390a3505050505050505050565b600c54600a81905550600d54600b81905550565b6000806000600454905060006009600a612ada91906136ee565b620f4240612ae89190613739565b9050612b1a6009600a612afb91906136ee565b620f4240612b099190613739565b60045461148690919063ffffffff16565b821015612b4b576004546009600a612b3291906136ee565b620f4240612b409190613739565b935093505050612b54565b81819350935050505b9091565b6000806000806000806000806000612b758a600a54600b54612d49565b9250925092506000612b8561286e565b90506000806000612b988e878787612ddf565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008183612bce9190614202565b905092915050565b60008183612be49190613e9e565b905092915050565b6000612bf661286e565b90506000612c0d8285612e6890919063ffffffff16565b9050612c6181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612d019190613117565b60405180910390a350505050565b612d2482600454612bc090919063ffffffff16565b600481905550612d3f81600554612bd690919063ffffffff16565b6005819055505050565b600080600080612d756064612d67888a612e6890919063ffffffff16565b61148690919063ffffffff16565b90506000612d9f6064612d91888b612e6890919063ffffffff16565b61148690919063ffffffff16565b90506000612dc882612dba858c612bc090919063ffffffff16565b612bc090919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612df88589612e6890919063ffffffff16565b90506000612e0f8689612e6890919063ffffffff16565b90506000612e268789612e6890919063ffffffff16565b90506000612e4f82612e418587612bc090919063ffffffff16565b612bc090919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008183612e769190613739565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612eb8578082015181840152602081019050612e9d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ee082612e7e565b612eea8185612e89565b9350612efa818560208601612e9a565b612f0381612ec4565b840191505092915050565b60006020820190508181036000830152612f288184612ed5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f6f82612f44565b9050919050565b612f7f81612f64565b8114612f8a57600080fd5b50565b600081359050612f9c81612f76565b92915050565b6000819050919050565b612fb581612fa2565b8114612fc057600080fd5b50565b600081359050612fd281612fac565b92915050565b60008060408385031215612fef57612fee612f3a565b5b6000612ffd85828601612f8d565b925050602061300e85828601612fc3565b9150509250929050565b60008115159050919050565b61302d81613018565b82525050565b60006020820190506130486000830184613024565b92915050565b6000806040838503121561306557613064612f3a565b5b600061307385828601612fc3565b925050602061308485828601612fc3565b9150509250929050565b6000819050919050565b60006130b36130ae6130a984612f44565b61308e565b612f44565b9050919050565b60006130c582613098565b9050919050565b60006130d7826130ba565b9050919050565b6130e7816130cc565b82525050565b600060208201905061310260008301846130de565b92915050565b61311181612fa2565b82525050565b600060208201905061312c6000830184613108565b92915050565b60008060006060848603121561314b5761314a612f3a565b5b600061315986828701612f8d565b935050602061316a86828701612f8d565b925050604061317b86828701612fc3565b9150509250925092565b61318e81613018565b811461319957600080fd5b50565b6000813590506131ab81613185565b92915050565b6000602082840312156131c7576131c6612f3a565b5b60006131d58482850161319c565b91505092915050565b600060ff82169050919050565b6131f4816131de565b82525050565b600060208201905061320f60008301846131eb565b92915050565b61321e81612f64565b82525050565b60006020820190506132396000830184613215565b92915050565b6000806040838503121561325657613255612f3a565b5b600061326485828601612f8d565b925050602061327585828601612f8d565b9150509250929050565b60006020828403121561329557613294612f3a565b5b60006132a384828501612f8d565b91505092915050565b6000602082840312156132c2576132c1612f3a565b5b60006132d084828501612fc3565b91505092915050565b600080600080608085870312156132f3576132f2612f3a565b5b600061330187828801612fc3565b945050602061331287828801612fc3565b935050604061332387828801612fc3565b925050606061333487828801612fc3565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f84011261336557613364613340565b5b8235905067ffffffffffffffff81111561338257613381613345565b5b60208301915083602082028301111561339e5761339d61334a565b5b9250929050565b6000806000604084860312156133be576133bd612f3a565b5b600084013567ffffffffffffffff8111156133dc576133db612f3f565b5b6133e88682870161334f565b935093505060206133fb8682870161319c565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61343d82612ec4565b810181811067ffffffffffffffff8211171561345c5761345b613405565b5b80604052505050565b600061346f612f30565b905061347b8282613434565b919050565b600067ffffffffffffffff82111561349b5761349a613405565b5b602082029050602081019050919050565b60006134bf6134ba84613480565b613465565b905080838252602082019050602084028301858111156134e2576134e161334a565b5b835b8181101561350b57806134f78882612f8d565b8452602084019350506020810190506134e4565b5050509392505050565b600082601f83011261352a57613529613340565b5b813561353a8482602086016134ac565b91505092915050565b60006020828403121561355957613558612f3a565b5b600082013567ffffffffffffffff81111561357757613576612f3f565b5b61358384828501613515565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613612578086048111156135ee576135ed61358c565b5b60018516156135fd5780820291505b808102905061360b856135bb565b94506135d2565b94509492505050565b60008261362b57600190506136e7565b8161363957600090506136e7565b816001811461364f576002811461365957613688565b60019150506136e7565b60ff84111561366b5761366a61358c565b5b8360020a9150848211156136825761368161358c565b5b506136e7565b5060208310610133831016604e8410600b84101617156136bd5782820a9050838111156136b8576136b761358c565b5b6136e7565b6136ca84848460016135c8565b925090508184048111156136e1576136e061358c565b5b81810290505b9392505050565b60006136f982612fa2565b9150613704836131de565b92506137317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461361b565b905092915050565b600061374482612fa2565b915061374f83612fa2565b925082820261375d81612fa2565b915082820484148315176137745761377361358c565b5b5092915050565b6000819050919050565b60006137a061379b6137968461377b565b61308e565b612fa2565b9050919050565b6137b081613785565b82525050565b600060c0820190506137cb6000830189613215565b6137d86020830188613108565b6137e560408301876137a7565b6137f260608301866137a7565b6137ff6080830185613215565b61380c60a0830184613108565b979650505050505050565b60008151905061382681612fac565b92915050565b60008060006060848603121561384557613844612f3a565b5b600061385386828701613817565b935050602061386486828701613817565b925050604061387586828701613817565b9150509250925092565b60006020828403121561389557613894612f3a565b5b60006138a384828501613817565b91505092915050565b7f302045524332302062616c616e63650000000000000000000000000000000000600082015250565b60006138e2600f83612e89565b91506138ed826138ac565b602082019050919050565b60006020820190508181036000830152613911816138d5565b9050919050565b600060408201905061392d6000830185613215565b61393a6020830184613108565b9392505050565b60008151905061395081613185565b92915050565b60006020828403121561396c5761396b612f3a565b5b600061397a84828501613941565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006139bd82612fa2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139ef576139ee61358c565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a56602683612e89565b9150613a61826139fa565b604082019050919050565b60006020820190508181036000830152613a8581613a49565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ac682612fa2565b9150613ad183612fa2565b925082613ae157613ae0613a8c565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b48602483612e89565b9150613b5382613aec565b604082019050919050565b60006020820190508181036000830152613b7781613b3b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bda602283612e89565b9150613be582613b7e565b604082019050919050565b60006020820190508181036000830152613c0981613bcd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c46602083612e89565b9150613c5182613c10565b602082019050919050565b60006020820190508181036000830152613c7581613c39565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613cd8602983612e89565b9150613ce382613c7c565b604082019050919050565b60006020820190508181036000830152613d0781613ccb565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000613d6a603f83612e89565b9150613d7582613d0e565b604082019050919050565b60006020820190508181036000830152613d9981613d5d565b9050919050565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b6000613dfc602383612e89565b9150613e0782613da0565b604082019050919050565b60006020820190508181036000830152613e2b81613def565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b6000613e68601c83612e89565b9150613e7382613e32565b602082019050919050565b60006020820190508181036000830152613e9781613e5b565b9050919050565b6000613ea982612fa2565b9150613eb483612fa2565b9250828201905080821115613ecc57613ecb61358c565b5b92915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613f2e602383612e89565b9150613f3982613ed2565b604082019050919050565b60006020820190508181036000830152613f5d81613f21565b9050919050565b600081905092915050565b50565b6000613f7f600083613f64565b9150613f8a82613f6f565b600082019050919050565b6000613fa082613f72565b9150819050919050565b7f657468207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613fe0601383612e89565b9150613feb82613faa565b602082019050919050565b6000602082019050818103600083015261400f81613fd3565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614072602a83612e89565b915061407d82614016565b604082019050919050565b600060208201905081810360008301526140a181614065565b9050919050565b6000815190506140b781612f76565b92915050565b6000602082840312156140d3576140d2612f3a565b5b60006140e1848285016140a8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61411f81612f64565b82525050565b60006141318383614116565b60208301905092915050565b6000602082019050919050565b6000614155826140ea565b61415f81856140f5565b935061416a83614106565b8060005b8381101561419b5781516141828882614125565b975061418d8361413d565b92505060018101905061416e565b5085935050505092915050565b600060a0820190506141bd6000830188613108565b6141ca60208301876137a7565b81810360408301526141dc818661414a565b90506141eb6060830185613215565b6141f86080830184613108565b9695505050505050565b600061420d82612fa2565b915061421883612fa2565b92508282039050818111156142305761422f61358c565b5b9291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209c37a34cd581aa49c5512c85d957b657745296cf461661725aca86cdee3a068864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102295760003560e01c8063881dce6011610123578063b0f15959116100ab578063dd7474a11161006f578063dd7474a1146107df578063ea1644d514610808578063f2fde38b14610831578063f59d047c1461085a578063ffb54a991461088557610230565b8063b0f15959146106ea578063bfd7928414610713578063c492f04614610750578063da388d4214610779578063dd62ed3e146107a257610230565b806395d89b41116100f257806395d89b4114610607578063a2a957bb14610632578063a9059cbb1461065b578063aabe9ad314610698578063ae0f3f45146106c157610230565b8063881dce601461056c5780638aec09cd146105955780638da5cb5b146105b15780638f9a55c0146105dc57610230565b806346469ae7116101b15780636ddd1713116101755780636ddd1713146104ab5780636fc3eaec146104d657806370a08231146104ed578063715018a61461052a578063790ca4131461054157610230565b806346469ae7146103d857806349bd5a5e1461040357806350aa3c951461042e5780635f254426146104595780636d8aa8f81461048257610230565b806318160ddd116101f857806318160ddd146102f157806323b872dd1461031c5780632a9b8072146103595780632fd689e314610382578063313ce567146103ad57610230565b806306fdde0314610235578063095ea7b31461026057806312e808011461029d5780631694505e146102c657610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a6108b0565b6040516102579190612f0e565b60405180910390f35b34801561026c57600080fd5b5061028760048036038101906102829190612fd8565b6108ed565b6040516102949190613033565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf919061304e565b61090b565b005b3480156102d257600080fd5b506102db610925565b6040516102e891906130ed565b60405180910390f35b3480156102fd57600080fd5b5061030661094b565b6040516103139190613117565b60405180910390f35b34801561032857600080fd5b50610343600480360381019061033e9190613132565b61096e565b6040516103509190613033565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b91906131b1565b610a47565b005b34801561038e57600080fd5b50610397610a7e565b6040516103a49190613117565b60405180910390f35b3480156103b957600080fd5b506103c2610a84565b6040516103cf91906131fa565b60405180910390f35b3480156103e457600080fd5b506103ed610a8d565b6040516103fa9190613117565b60405180910390f35b34801561040f57600080fd5b50610418610a93565b6040516104259190613224565b60405180910390f35b34801561043a57600080fd5b50610443610ab9565b6040516104509190613117565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b919061323f565b610abf565b005b34801561048e57600080fd5b506104a960048036038101906104a491906131b1565b610b4d565b005b3480156104b757600080fd5b506104c0610b72565b6040516104cd9190613033565b60405180910390f35b3480156104e257600080fd5b506104eb610b85565b005b3480156104f957600080fd5b50610514600480360381019061050f919061327f565b610c9a565b6040516105219190613117565b60405180910390f35b34801561053657600080fd5b5061053f610ceb565b005b34801561054d57600080fd5b50610556610cff565b6040516105639190613117565b60405180910390f35b34801561057857600080fd5b50610593600480360381019061058e91906132ac565b610d05565b005b6105af60048036038101906105aa91906132ac565b610e15565b005b3480156105bd57600080fd5b506105c6610f01565b6040516105d39190613224565b60405180910390f35b3480156105e857600080fd5b506105f1610f2a565b6040516105fe9190613117565b60405180910390f35b34801561061357600080fd5b5061061c610f30565b6040516106299190612f0e565b60405180910390f35b34801561063e57600080fd5b50610659600480360381019061065491906132d9565b610f6d565b005b34801561066757600080fd5b50610682600480360381019061067d9190612fd8565b610f97565b60405161068f9190613033565b60405180910390f35b3480156106a457600080fd5b506106bf60048036038101906106ba9190612fd8565b610fb5565b005b3480156106cd57600080fd5b506106e860048036038101906106e3919061304e565b61111e565b005b3480156106f657600080fd5b50610711600480360381019061070c919061327f565b611138565b005b34801561071f57600080fd5b5061073a6004803603810190610735919061327f565b61119b565b6040516107479190613033565b60405180910390f35b34801561075c57600080fd5b50610777600480360381019061077291906133a5565b6111bb565b005b34801561078557600080fd5b506107a0600480360381019061079b9190613543565b611268565b005b3480156107ae57600080fd5b506107c960048036038101906107c4919061323f565b611305565b6040516107d69190613117565b60405180910390f35b3480156107eb57600080fd5b506108066004803603810190610801919061327f565b61138c565b005b34801561081457600080fd5b5061082f600480360381019061082a91906132ac565b6113d8565b005b34801561083d57600080fd5b506108586004803603810190610853919061327f565b6113ea565b005b34801561086657600080fd5b5061086f61146d565b60405161087c9190613117565b60405180910390f35b34801561089157600080fd5b5061089a611473565b6040516108a79190613033565b60405180910390f35b60606040518060400160405280600b81526020017f4241425920524546554e44000000000000000000000000000000000000000000815250905090565b60006109016108fa61149c565b84846114a4565b6001905092915050565b61091361166d565b81601381905550806014819055505050565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006009600a61095b91906136ee565b620f42406109699190613739565b905090565b600061097b8484846116eb565b610a3c8461098761149c565b610a378560405180606001604052806028815260200161423760289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109ed61149c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123659092919063ffffffff16565b6114a4565b600190509392505050565b610a4f61166d565b600060155403610a6157426015819055505b80601260146101000a81548160ff02191690831515021790555050565b60135481565b60006009905090565b60165481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b610ac761166d565b81600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b610b5561166d565b80601260166101000a81548160ff02191690831515021790555050565b601260169054906101000a900460ff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610bc661149c565b73ffffffffffffffffffffffffffffffffffffffff161480610c3c5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610c2461149c565b73ffffffffffffffffffffffffffffffffffffffff16145b80610c805750610c4a610f01565b73ffffffffffffffffffffffffffffffffffffffff16610c6861149c565b73ffffffffffffffffffffffffffffffffffffffff16145b610c8957600080fd5b6000479050610c97816123ba565b50565b6000610ce4600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461248c565b9050919050565b610cf361166d565b610cfd60006124fa565b565b60155481565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d4661149c565b73ffffffffffffffffffffffffffffffffffffffff161480610dbc5750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610da461149c565b73ffffffffffffffffffffffffffffffffffffffff16145b80610e005750610dca610f01565b73ffffffffffffffffffffffffffffffffffffffff16610de861149c565b73ffffffffffffffffffffffffffffffffffffffff16145b610e0957600080fd5b610e12816125be565b50565b610e1d61166d565b610e4a30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836114a4565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719343084600080610e96610f01565b426040518863ffffffff1660e01b8152600401610eb8969594939291906137b6565b60606040518083038185885af1158015610ed6573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610efb919061382c565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60185481565b60606040518060400160405280600381526020017f4252460000000000000000000000000000000000000000000000000000000000815250905090565b610f7561166d565b8360068190555082600881905550816007819055508060098190555050505050565b6000610fab610fa461149c565b84846116eb565b6001905092915050565b610fbd61166d565b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ff79190613224565b602060405180830381865afa158015611014573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611038919061387f565b1015611079576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611070906138f8565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b81526004016110d6929190613918565b6020604051808303816000875af11580156110f5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111199190613956565b505050565b61112661166d565b81601681905550806017819055505050565b61114061166d565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6111c361166d565b60005b838390508110156112625781600360008686858181106111e9576111e8613983565b5b90506020020160208101906111fe919061327f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061125a906139b2565b9150506111c6565b50505050565b61127061166d565b60005b8151811015611301576001600e600084848151811061129557611294613983565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080806112f9906139b2565b915050611273565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61139461166d565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6113e061166d565b8060188190555050565b6113f261166d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145890613a6c565b60405180910390fd5b61146a816124fa565b50565b60175481565b601260149054906101000a900460ff1681565b600081836114949190613abb565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a90613b5e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611582576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157990613bf0565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516116609190613117565b60405180910390a3505050565b61167561149c565b73ffffffffffffffffffffffffffffffffffffffff16611693610f01565b73ffffffffffffffffffffffffffffffffffffffff16146116e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e090613c5c565b60405180910390fd5b565b6000811161172e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172590613cee565b60405180910390fd5b611736610f01565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156117a45750611774610f01565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156117dc57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561206457601260149054906101000a900460ff166118a1576117fd610f01565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061186157503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b6118a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189790613d80565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156119455750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90613e12565b60405180910390fd5b601554421480156119e25750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15611a40576001600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611ae45750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b3a5750600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611d2c57601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611bea5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611c3557601654811115611c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2b90613e7e565b60405180910390fd5b5b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611ce05750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b15611d2b57601754811115611d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2190613e7e565b60405180910390fd5b5b5b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611dd05750600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e265750600360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611e805750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15611edd5760185481611e9284610c9a565b611e9c9190613e9e565b10611edc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed390613f44565b60405180910390fd5b5b6000611ee830610c9a565b905060006013548210159050808015611f0e5750601260159054906101000a900460ff16155b8015611f685750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015611f805750601260169054906101000a900460ff165b8015611fd65750600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561202c5750600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561206157601454831115612047576120466013546125be565b5b6000479050600081111561205f5761205e476123ba565b5b505b50505b600060019050600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061210b5750600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806121be5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141580156121bd5750601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b5b156121cc5760009050612353565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156122775750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561228f57600654600a81905550600754600b819055505b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561233a5750601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b1561235257600854600a81905550600954600b819055505b5b61235f84848484612841565b50505050565b60008383111582906123ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a49190612f0e565b60405180910390fd5b5082840390509392505050565b6000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161240290613f95565b60006040518083038185875af1925050503d806000811461243f576040519150601f19603f3d011682016040523d82523d6000602084013e612444565b606091505b5050905080612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90613ff6565b60405180910390fd5b5050565b60006004548211156124d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ca90614088565b60405180910390fd5b60006124dd61286e565b90506124f2818461148690919063ffffffff16565b915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601260156101000a81548160ff0219169083151502179055506000810315612823576000600267ffffffffffffffff8111156125ff576125fe613405565b5b60405190808252806020026020018201604052801561262d5781602001602082028036833780820191505090505b509050308160008151811061264557612644613983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061271091906140bd565b8160018151811061272457612723613983565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061278b30601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114a4565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016127ef9594939291906141a8565b600060405180830381600087803b15801561280957600080fd5b505af115801561281d573d6000803e3d6000fd5b50505050505b6000601260156101000a81548160ff02191690831515021790555050565b8061284f5761284e612899565b5b61285a8484846128d6565b8061286857612867612aac565b5b50505050565b600080600061287b612ac0565b91509150612892818361148690919063ffffffff16565b9250505090565b6000600a541480156128ad57506000600b54145b6128d457600a54600c81905550600b54600d819055506000600a819055506000600b819055505b565b6000806000806000806128e887612b58565b95509550955095509550955061294686600160008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bc090919063ffffffff16565b600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129db85600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd690919063ffffffff16565b600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000811115612a3257612a31818a612bec565b5b612a3c8483612d0f565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612a999190613117565b60405180910390a3505050505050505050565b600c54600a81905550600d54600b81905550565b6000806000600454905060006009600a612ada91906136ee565b620f4240612ae89190613739565b9050612b1a6009600a612afb91906136ee565b620f4240612b099190613739565b60045461148690919063ffffffff16565b821015612b4b576004546009600a612b3291906136ee565b620f4240612b409190613739565b935093505050612b54565b81819350935050505b9091565b6000806000806000806000806000612b758a600a54600b54612d49565b9250925092506000612b8561286e565b90506000806000612b988e878787612ddf565b9250925092508282828989899c509c509c509c509c509c505050505050505091939550919395565b60008183612bce9190614202565b905092915050565b60008183612be49190613e9e565b905092915050565b6000612bf661286e565b90506000612c0d8285612e6890919063ffffffff16565b9050612c6181600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612bd690919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051612d019190613117565b60405180910390a350505050565b612d2482600454612bc090919063ffffffff16565b600481905550612d3f81600554612bd690919063ffffffff16565b6005819055505050565b600080600080612d756064612d67888a612e6890919063ffffffff16565b61148690919063ffffffff16565b90506000612d9f6064612d91888b612e6890919063ffffffff16565b61148690919063ffffffff16565b90506000612dc882612dba858c612bc090919063ffffffff16565b612bc090919063ffffffff16565b905080838395509550955050505093509350939050565b600080600080612df88589612e6890919063ffffffff16565b90506000612e0f8689612e6890919063ffffffff16565b90506000612e268789612e6890919063ffffffff16565b90506000612e4f82612e418587612bc090919063ffffffff16565b612bc090919063ffffffff16565b9050838184965096509650505050509450945094915050565b60008183612e769190613739565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612eb8578082015181840152602081019050612e9d565b60008484015250505050565b6000601f19601f8301169050919050565b6000612ee082612e7e565b612eea8185612e89565b9350612efa818560208601612e9a565b612f0381612ec4565b840191505092915050565b60006020820190508181036000830152612f288184612ed5565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f6f82612f44565b9050919050565b612f7f81612f64565b8114612f8a57600080fd5b50565b600081359050612f9c81612f76565b92915050565b6000819050919050565b612fb581612fa2565b8114612fc057600080fd5b50565b600081359050612fd281612fac565b92915050565b60008060408385031215612fef57612fee612f3a565b5b6000612ffd85828601612f8d565b925050602061300e85828601612fc3565b9150509250929050565b60008115159050919050565b61302d81613018565b82525050565b60006020820190506130486000830184613024565b92915050565b6000806040838503121561306557613064612f3a565b5b600061307385828601612fc3565b925050602061308485828601612fc3565b9150509250929050565b6000819050919050565b60006130b36130ae6130a984612f44565b61308e565b612f44565b9050919050565b60006130c582613098565b9050919050565b60006130d7826130ba565b9050919050565b6130e7816130cc565b82525050565b600060208201905061310260008301846130de565b92915050565b61311181612fa2565b82525050565b600060208201905061312c6000830184613108565b92915050565b60008060006060848603121561314b5761314a612f3a565b5b600061315986828701612f8d565b935050602061316a86828701612f8d565b925050604061317b86828701612fc3565b9150509250925092565b61318e81613018565b811461319957600080fd5b50565b6000813590506131ab81613185565b92915050565b6000602082840312156131c7576131c6612f3a565b5b60006131d58482850161319c565b91505092915050565b600060ff82169050919050565b6131f4816131de565b82525050565b600060208201905061320f60008301846131eb565b92915050565b61321e81612f64565b82525050565b60006020820190506132396000830184613215565b92915050565b6000806040838503121561325657613255612f3a565b5b600061326485828601612f8d565b925050602061327585828601612f8d565b9150509250929050565b60006020828403121561329557613294612f3a565b5b60006132a384828501612f8d565b91505092915050565b6000602082840312156132c2576132c1612f3a565b5b60006132d084828501612fc3565b91505092915050565b600080600080608085870312156132f3576132f2612f3a565b5b600061330187828801612fc3565b945050602061331287828801612fc3565b935050604061332387828801612fc3565b925050606061333487828801612fc3565b91505092959194509250565b600080fd5b600080fd5b600080fd5b60008083601f84011261336557613364613340565b5b8235905067ffffffffffffffff81111561338257613381613345565b5b60208301915083602082028301111561339e5761339d61334a565b5b9250929050565b6000806000604084860312156133be576133bd612f3a565b5b600084013567ffffffffffffffff8111156133dc576133db612f3f565b5b6133e88682870161334f565b935093505060206133fb8682870161319c565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61343d82612ec4565b810181811067ffffffffffffffff8211171561345c5761345b613405565b5b80604052505050565b600061346f612f30565b905061347b8282613434565b919050565b600067ffffffffffffffff82111561349b5761349a613405565b5b602082029050602081019050919050565b60006134bf6134ba84613480565b613465565b905080838252602082019050602084028301858111156134e2576134e161334a565b5b835b8181101561350b57806134f78882612f8d565b8452602084019350506020810190506134e4565b5050509392505050565b600082601f83011261352a57613529613340565b5b813561353a8482602086016134ac565b91505092915050565b60006020828403121561355957613558612f3a565b5b600082013567ffffffffffffffff81111561357757613576612f3f565b5b61358384828501613515565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115613612578086048111156135ee576135ed61358c565b5b60018516156135fd5780820291505b808102905061360b856135bb565b94506135d2565b94509492505050565b60008261362b57600190506136e7565b8161363957600090506136e7565b816001811461364f576002811461365957613688565b60019150506136e7565b60ff84111561366b5761366a61358c565b5b8360020a9150848211156136825761368161358c565b5b506136e7565b5060208310610133831016604e8410600b84101617156136bd5782820a9050838111156136b8576136b761358c565b5b6136e7565b6136ca84848460016135c8565b925090508184048111156136e1576136e061358c565b5b81810290505b9392505050565b60006136f982612fa2565b9150613704836131de565b92506137317fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461361b565b905092915050565b600061374482612fa2565b915061374f83612fa2565b925082820261375d81612fa2565b915082820484148315176137745761377361358c565b5b5092915050565b6000819050919050565b60006137a061379b6137968461377b565b61308e565b612fa2565b9050919050565b6137b081613785565b82525050565b600060c0820190506137cb6000830189613215565b6137d86020830188613108565b6137e560408301876137a7565b6137f260608301866137a7565b6137ff6080830185613215565b61380c60a0830184613108565b979650505050505050565b60008151905061382681612fac565b92915050565b60008060006060848603121561384557613844612f3a565b5b600061385386828701613817565b935050602061386486828701613817565b925050604061387586828701613817565b9150509250925092565b60006020828403121561389557613894612f3a565b5b60006138a384828501613817565b91505092915050565b7f302045524332302062616c616e63650000000000000000000000000000000000600082015250565b60006138e2600f83612e89565b91506138ed826138ac565b602082019050919050565b60006020820190508181036000830152613911816138d5565b9050919050565b600060408201905061392d6000830185613215565b61393a6020830184613108565b9392505050565b60008151905061395081613185565b92915050565b60006020828403121561396c5761396b612f3a565b5b600061397a84828501613941565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006139bd82612fa2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036139ef576139ee61358c565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a56602683612e89565b9150613a61826139fa565b604082019050919050565b60006020820190508181036000830152613a8581613a49565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613ac682612fa2565b9150613ad183612fa2565b925082613ae157613ae0613a8c565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b48602483612e89565b9150613b5382613aec565b604082019050919050565b60006020820190508181036000830152613b7781613b3b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bda602283612e89565b9150613be582613b7e565b604082019050919050565b60006020820190508181036000830152613c0981613bcd565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613c46602083612e89565b9150613c5182613c10565b602082019050919050565b60006020820190508181036000830152613c7581613c39565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000613cd8602983612e89565b9150613ce382613c7c565b604082019050919050565b60006020820190508181036000830152613d0781613ccb565b9050919050565b7f544f4b454e3a2054686973206163636f756e742063616e6e6f742073656e642060008201527f746f6b656e7320756e74696c2074726164696e6720697320656e61626c656400602082015250565b6000613d6a603f83612e89565b9150613d7582613d0e565b604082019050919050565b60006020820190508181036000830152613d9981613d5d565b9050919050565b7f544f4b454e3a20596f7572206163636f756e7420697320626c61636b6c69737460008201527f6564210000000000000000000000000000000000000000000000000000000000602082015250565b6000613dfc602383612e89565b9150613e0782613da0565b604082019050919050565b60006020820190508181036000830152613e2b81613def565b9050919050565b7f544f4b454e3a204d6178205472616e73616374696f6e204c696d697400000000600082015250565b6000613e68601c83612e89565b9150613e7382613e32565b602082019050919050565b60006020820190508181036000830152613e9781613e5b565b9050919050565b6000613ea982612fa2565b9150613eb483612fa2565b9250828201905080821115613ecc57613ecb61358c565b5b92915050565b7f544f4b454e3a2042616c616e636520657863656564732077616c6c657420736960008201527f7a65210000000000000000000000000000000000000000000000000000000000602082015250565b6000613f2e602383612e89565b9150613f3982613ed2565b604082019050919050565b60006020820190508181036000830152613f5d81613f21565b9050919050565b600081905092915050565b50565b6000613f7f600083613f64565b9150613f8a82613f6f565b600082019050919050565b6000613fa082613f72565b9150819050919050565b7f657468207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613fe0601383612e89565b9150613feb82613faa565b602082019050919050565b6000602082019050818103600083015261400f81613fd3565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614072602a83612e89565b915061407d82614016565b604082019050919050565b600060208201905081810360008301526140a181614065565b9050919050565b6000815190506140b781612f76565b92915050565b6000602082840312156140d3576140d2612f3a565b5b60006140e1848285016140a8565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61411f81612f64565b82525050565b60006141318383614116565b60208301905092915050565b6000602082019050919050565b6000614155826140ea565b61415f81856140f5565b935061416a83614106565b8060005b8381101561419b5781516141828882614125565b975061418d8361413d565b92505060018101905061416e565b5085935050505092915050565b600060a0820190506141bd6000830188613108565b6141ca60208301876137a7565b81810360408301526141dc818661414a565b90506141eb6060830185613215565b6141f86080830184613108565b9695505050505050565b600061420d82612fa2565b915061421883612fa2565b92508282039050818111156142305761422f61358c565b5b9291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209c37a34cd581aa49c5512c85d957b657745296cf461661725aca86cdee3a068864736f6c63430008110033

Deployed Bytecode Sourcemap

21908:16101:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24446:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25348:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36482:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23030:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24723:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25542:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31192:166;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23232:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24632:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23379:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23078:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23292:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31641:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36763:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23187:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31863:320;;;;;;;;;;;;;:::i;:::-;;24826:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18155:103;;;;;;;;;;;;;:::i;:::-;;23347:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31366:267;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37518:359;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17507:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23494:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24537:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36094:336;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24972:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33841:279;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36905:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32366:88;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22903:36;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37248:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32191:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25172:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37897:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37123:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18413:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23436:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23115:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24446:83;24483:13;24516:5;;;;;;;;;;;;;;;;;24509:12;;24446:83;:::o;25348:186::-;25448:4;25465:39;25474:12;:10;:12::i;:::-;25488:7;25497:6;25465:8;:39::i;:::-;25522:4;25515:11;;25348:186;;;;:::o;36482:229::-;17393:13;:11;:13::i;:::-;36645:18:::1;36623:19;:40;;;;36690:13;36674;:29;;;;36482:229:::0;;:::o;23030:41::-;;;;;;;;;;;;;:::o;24723:95::-;24776:7;22131:1;22425:2;:15;;;;:::i;:::-;22413:9;:27;;;;:::i;:::-;24796:14;;24723:95;:::o;25542:446::-;25674:4;25691:36;25701:6;25709:9;25720:6;25691:9;:36::i;:::-;25738:220;25761:6;25782:12;:10;:12::i;:::-;25809:138;25865:6;25809:138;;;;;;;;;;;;;;;;;:11;:19;25821:6;25809:19;;;;;;;;;;;;;;;:33;25829:12;:10;:12::i;:::-;25809:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;25738:8;:220::i;:::-;25976:4;25969:11;;25542:446;;;;;:::o;31192:166::-;17393:13;:11;:13::i;:::-;31278:1:::1;31264:10;;:15:::0;31260:54:::1;;31296:15;31283:10;:28;;;;31260:54;31338:12;31324:11;;:26;;;;;;;;;;;;;;;;;;31192:166:::0;:::o;23232:53::-;;;;:::o;24632:83::-;24673:5;22131:1;24691:16;;24632:83;:::o;23379:49::-;;;;:::o;23078:28::-;;;;;;;;;;;;;:::o;23292:48::-;;;;:::o;31641:214::-;17393:13;:11;:13::i;:::-;31796:7:::1;31774:19;;:29;;;;;;;;;;;;;;;;;;31834:13;31814:17;;:33;;;;;;;;;;;;;;;;;;31641:214:::0;;:::o;36763:103::-;17393:13;:11;:13::i;:::-;36846:12:::1;36832:11;;:26;;;;;;;;;;;;;;;;;;36763:103:::0;:::o;23187:30::-;;;;;;;;;;;;;:::o;31863:320::-;31943:19;;;;;;;;;;;31927:35;;:12;:10;:12::i;:::-;:35;;;:89;;;;31999:17;;;;;;;;;;;31983:33;;:12;:10;:12::i;:::-;:33;;;31927:89;:133;;;;32053:7;:5;:7::i;:::-;32037:23;;:12;:10;:12::i;:::-;:23;;;31927:133;31905:166;;;;;;32082:26;32111:21;32082:50;;32143:32;32156:18;32143:12;:32::i;:::-;31894:289;31863:320::o;24826:138::-;24892:7;24919:37;24939:7;:16;24947:7;24939:16;;;;;;;;;;;;;;;;24919:19;:37::i;:::-;24912:44;;24826:138;;;:::o;18155:103::-;17393:13;:11;:13::i;:::-;18220:30:::1;18247:1;18220:18;:30::i;:::-;18155:103::o:0;23347:25::-;;;;:::o;31366:267::-;31460:19;;;;;;;;;;;31444:35;;:12;:10;:12::i;:::-;:35;;;:89;;;;31516:17;;;;;;;;;;;31500:33;;:12;:10;:12::i;:::-;:33;;;31444:89;:133;;;;31570:7;:5;:7::i;:::-;31554:23;;:12;:10;:12::i;:::-;:23;;;31444:133;31422:166;;;;;;31601:24;31618:6;31601:16;:24::i;:::-;31366:267;:::o;37518:359::-;17393:13;:11;:13::i;:::-;37598:62:::1;37615:4;37630:15;;;;;;;;;;;37648:11;37598:8;:62::i;:::-;37671:15;;;;;;;;;;;:31;;;37710:9;37743:4;37763:11;37789:1;37805::::0;37821:7:::1;:5;:7::i;:::-;37843:15;37671:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;37518:359:::0;:::o;17507:87::-;17553:7;17580:6;;;;;;;;;;;17573:13;;17507:87;:::o;23494:48::-;;;;:::o;24537:87::-;24576:13;24609:7;;;;;;;;;;;;;;;;;24602:14;;24537:87;:::o;36094:336::-;17393:13;:11;:13::i;:::-;36290::::1;36273:14;:30;;;;36332:14;36314:15;:32;;;;36372:11;36357:12;:26;;;;36410:12;36394:13;:28;;;;36094:336:::0;;;;:::o;24972:192::-;25075:4;25092:42;25102:12;:10;:12::i;:::-;25116:9;25127:6;25092:9;:42::i;:::-;25152:4;25145:11;;24972:192;;;;:::o;33841:279::-;17393:13;:11;:13::i;:::-;33989:6:::1;33951:8;33944:26;;;33979:4;33944:41;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:51;;33922:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;34056:8;34049:25;;;34083:19;;;;;;;;;;;34105:6;34049:63;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33841:279:::0;;:::o;36905:210::-;17393:13;:11;:13::i;:::-;37050:14:::1;37032:15;:32;;;;37094:13;37075:16;:32;;;;36905:210:::0;;:::o;32366:88::-;17393:13;:11;:13::i;:::-;32441:5:::1;32426:4;:12;32431:6;32426:12;;;;;;;;;;;;;;;;:20;;;;;;;;;;;;;;;;;;32366:88:::0;:::o;22903:36::-;;;;;;;;;;;;;;;;;;;;;;:::o;37248:262::-;17393:13;:11;:13::i;:::-;37393:9:::1;37388:115;37412:8;;:15;;37408:1;:19;37388:115;;;37483:8;37449:18;:31;37468:8;;37477:1;37468:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37449:31;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;37429:3;;;;;:::i;:::-;;;;37388:115;;;;37248:262:::0;;;:::o;32191:167::-;17393:13;:11;:13::i;:::-;32265:9:::1;32260:91;32284:5;:12;32280:1;:16;32260:91;;;32335:4;32318;:14;32323:5;32329:1;32323:8;;;;;;;;:::i;:::-;;;;;;;;32318:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32298:3;;;;;:::i;:::-;;;;32260:91;;;;32191:167:::0;:::o;25172:168::-;25278:7;25305:11;:18;25317:5;25305:18;;;;;;;;;;;;;;;:27;25324:7;25305:27;;;;;;;;;;;;;;;;25298:34;;25172:168;;;;:::o;37897:109::-;17393:13;:11;:13::i;:::-;37990:8:::1;37974:13;;:24;;;;;;;;;;;;;;;;;;37897:109:::0;:::o;37123:117::-;17393:13;:11;:13::i;:::-;37219::::1;37202:14;:30;;;;37123:117:::0;:::o;18413:201::-;17393:13;:11;:13::i;:::-;18522:1:::1;18502:22;;:8;:22;;::::0;18494:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18578:28;18597:8;18578:18;:28::i;:::-;18413:201:::0;:::o;23436:50::-;;;;:::o;23115:31::-;;;;;;;;;;;;;:::o;12351:98::-;12409:7;12440:1;12436;:5;;;;:::i;:::-;12429:12;;12351:98;;;;:::o;16058:::-;16111:7;16138:10;16131:17;;16058:98;:::o;26663:335::-;26773:1;26756:19;;:5;:19;;;26748:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26854:1;26835:21;;:7;:21;;;26827:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26936:6;26906:11;:18;26918:5;26906:18;;;;;;;;;;;;;;;:27;26925:7;26906:27;;;;;;;;;;;;;;;:36;;;;26974:7;26958:32;;26967:5;26958:32;;;26983:6;26958:32;;;;;;:::i;:::-;;;;;;;;26663:335;;;:::o;17672:132::-;17747:12;:10;:12::i;:::-;17736:23;;:7;:5;:7::i;:::-;:23;;;17728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17672:132::o;27006:3390::-;27103:1;27094:6;:10;27086:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27175:7;:5;:7::i;:::-;27167:15;;:4;:15;;;;:32;;;;;27192:7;:5;:7::i;:::-;27186:13;;:2;:13;;;;27167:32;:57;;;;;27219:4;27203:21;;:4;:21;;;;27167:57;27163:2533;;;27279:11;;;;;;;;;;;27274:230;;27349:7;:5;:7::i;:::-;27341:15;;:4;:15;;;:40;;;;27376:4;27360:21;;:4;:21;;;27341:40;27311:177;;;;;;;;;;;;:::i;:::-;;;;;;;;;27274:230;27547:4;:10;27552:4;27547:10;;;;;;;;;;;;;;;;;;;;;;;;;27546:11;:24;;;;;27562:4;:8;27567:2;27562:8;;;;;;;;;;;;;;;;;;;;;;;;;27561:9;27546:24;27520:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;27681:10;;27662:15;:29;:54;;;;;27703:13;;;;;;;;;;;27695:21;;:4;:21;;;27662:54;27658:125;;;27761:4;27750;:8;27755:2;27750:8;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;;;;;;;27658:125;27822:18;:24;27841:4;27822:24;;;;;;;;;;;;;;;;;;;;;;;;;27821:25;:69;;;;;27868:18;:22;27887:2;27868:22;;;;;;;;;;;;;;;;;;;;;;;;;27867:23;27821:69;:120;;;;;27912:18;:29;27931:9;27912:29;;;;;;;;;;;;;;;;;;;;;;;;;27911:30;27821:120;27799:754;;;28016:13;;;;;;;;;;;28008:21;;:4;:21;;;:55;;;;;28047:15;;;;;;;;;;;28033:30;;:2;:30;;;;28008:55;28004:243;;;28132:15;;28122:6;:25;;28088:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;28004:243;28304:13;;;;;;;;;;;28298:19;;:2;:19;;;:55;;;;;28337:15;;;;;;;;;;;28321:32;;:4;:32;;;;28298:55;28294:244;;;28422:16;;28412:6;:26;;28378:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28294:244;27799:754;28592:18;:24;28611:4;28592:24;;;;;;;;;;;;;;;;;;;;;;;;;28591:25;:69;;;;;28638:18;:22;28657:2;28638:22;;;;;;;;;;;;;;;;;;;;;;;;;28637:23;28591:69;:120;;;;;28682:18;:29;28701:9;28682:29;;;;;;;;;;;;;;;;;;;;;;;;;28681:30;28591:120;:160;;;;;28738:13;;;;;;;;;;;28732:19;;:2;:19;;;;28591:160;28569:381;;;28841:14;;28832:6;28816:13;28826:2;28816:9;:13::i;:::-;:22;;;;:::i;:::-;:39;28786:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;28569:381;28966:28;28997:24;29015:4;28997:9;:24::i;:::-;28966:55;;29036:12;29075:19;;29051:20;:43;;29036:58;;29133:7;:35;;;;;29162:6;;;;;;;;;;;29161:7;29133:35;:77;;;;;29197:13;;;;;;;;;;;29189:21;;:4;:21;;;;29133:77;:109;;;;;29231:11;;;;;;;;;;;29133:109;:155;;;;;29264:18;:24;29283:4;29264:24;;;;;;;;;;;;;;;;;;;;;;;;;29263:25;29133:155;:199;;;;;29310:18;:22;29329:2;29310:22;;;;;;;;;;;;;;;;;;;;;;;;;29309:23;29133:199;29111:574;;;29380:13;;29371:6;:22;29367:108;;;29418:37;29435:19;;29418:16;:37::i;:::-;29367:108;29495:26;29524:21;29495:50;;29589:1;29568:18;:22;29564:106;;;29615:35;29628:21;29615:12;:35::i;:::-;29564:106;29348:337;29111:574;27226:2470;;27163:2533;29708:12;29723:4;29708:19;;29786:18;:24;29805:4;29786:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;29814:18;:22;29833:2;29814:22;;;;;;;;;;;;;;;;;;;;;;;;;29786:50;29785:115;;;;29863:13;;;;;;;;;;;29855:21;;:4;:21;;;;:44;;;;;29886:13;;;;;;;;;;;29880:19;;:2;:19;;;;29855:44;29785:115;29767:574;;;29937:5;29927:15;;29767:574;;;30000:13;;;;;;;;;;;29992:21;;:4;:21;;;:55;;;;;30031:15;;;;;;;;;;;30017:30;;:2;:30;;;;29992:55;29988:163;;;30080:14;;30068:9;:26;;;;30123:12;;30113:7;:22;;;;29988:163;30175:13;;;;;;;;;;;30169:19;;:2;:19;;;:55;;;;;30208:15;;;;;;;;;;;30192:32;;:4;:32;;;;30169:55;30165:165;;;30257:15;;30245:9;:27;;;;30301:13;;30291:7;:23;;;;30165:165;29767:574;30347:41;30362:4;30368:2;30372:6;30380:7;30347:14;:41::i;:::-;27075:3321;27006:3390;;;:::o;13493:240::-;13613:7;13671:1;13666;:6;;13674:12;13658:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;13713:1;13709;:5;13702:12;;13493:240;;;;;:::o;30960:224::-;31018:20;31052:17;;;;;;;;;;;31044:31;;31097:6;31044:74;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31017:101;;;31137:15;31129:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;31006:178;30960:224;:::o;25996:307::-;26080:7;26133;;26122;:18;;26100:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26221:19;26243:10;:8;:10::i;:::-;26221:32;;26271:24;26283:11;26271:7;:11;;:24;;;;:::i;:::-;26264:31;;;25996:307;;;:::o;18774:191::-;18848:16;18867:6;;;;;;;;;;;18848:25;;18893:8;18884:6;;:17;;;;;;;;;;;;;;;;;;18948:8;18917:40;;18938:8;18917:40;;;;;;;;;;;;18837:128;18774:191;:::o;30404:548::-;23650:4;23641:6;;:13;;;;;;;;;;;;;;;;;;30501:1:::1;30486:11;:16:::0;30482:55;30519:7:::1;30482:55;30547:21;30585:1;30571:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30547:40;;30616:4;30598;30603:1;30598:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;30642:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30632:4;30637:1;30632:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;30675:62;30692:4;30707:15;;;;;;;;;;;30725:11;30675:8;:62::i;:::-;30748:15;;;;;;;;;;;:66;;;30829:11;30855:1;30871:4;30898;30918:15;30748:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;30471:481;23665:1;23686:5:::0;23677:6;;:14;;;;;;;;;;;;;;;;;;30404:548;:::o;32462:282::-;32618:7;32613:28;;32627:14;:12;:14::i;:::-;32613:28;32652:44;32670:6;32678:9;32689:6;32652:17;:44::i;:::-;32712:7;32707:29;;32721:15;:13;:15::i;:::-;32707:29;32462:282;;;;:::o;35657:164::-;35699:7;35720:15;35737;35756:19;:17;:19::i;:::-;35719:56;;;;35793:20;35805:7;35793;:11;;:20;;;;:::i;:::-;35786:27;;;;35657:164;:::o;26311:219::-;26371:1;26358:9;;:14;:30;;;;;26387:1;26376:7;;:12;26358:30;26390:7;26354:43;26429:9;;26409:17;:29;;;;26467:7;;26449:15;:25;;;;26499:1;26487:9;:13;;;;26521:1;26511:7;:11;;;;26311:219;:::o;32752:637::-;32899:15;32929:23;32967:12;32994:23;33032:12;33059:13;33086:19;33097:7;33086:10;:19::i;:::-;32884:221;;;;;;;;;;;;33134:28;33154:7;33134;:15;33142:6;33134:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;33116:7;:15;33124:6;33116:15;;;;;;;;;;;;;;;:46;;;;33194:39;33217:15;33194:7;:18;33202:9;33194:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;33173:7;:18;33181:9;33173:18;;;;;;;;;;;;;;;:60;;;;33256:1;33248:5;:9;33244:44;;;33261:24;33271:5;33278:6;33261:9;:24::i;:::-;33244:44;33298:23;33310:4;33316;33298:11;:23::i;:::-;33354:9;33337:44;;33346:6;33337:44;;;33365:15;33337:44;;;;;;:::i;:::-;;;;;;;;32873:516;;;;;;32752:637;;;:::o;26538:117::-;26594:17;;26582:9;:29;;;;26632:15;;26622:7;:25;;;;26538:117::o;35829:257::-;35880:7;35889;35909:15;35927:7;;35909:25;;35945:15;22131:1;22425:2;:15;;;;:::i;:::-;22413:9;:27;;;;:::i;:::-;35945:25;;35995:20;22131:1;22425:2;:15;;;;:::i;:::-;22413:9;:27;;;;:::i;:::-;35995:7;;:11;;:20;;;;:::i;:::-;35985:7;:30;35981:61;;;36025:7;;22131:1;22425:2;:15;;;;:::i;:::-;22413:9;:27;;;;:::i;:::-;36017:25;;;;;;;;35981:61;36061:7;36070;36053:25;;;;;;35829:257;;;:::o;34165:629::-;34267:7;34276;34285;34294;34303;34312;34338:23;34363:12;34377:13;34394:90;34420:7;34442:9;;34466:7;;34394:11;:90::i;:::-;34337:147;;;;;;34495:19;34517:10;:8;:10::i;:::-;34495:32;;34539:15;34556:23;34581:12;34597:109;34623:7;34645:4;34664:5;34684:11;34597;:109::i;:::-;34538:168;;;;;;34725:7;34734:15;34751:4;34757:15;34774:4;34780:5;34717:69;;;;;;;;;;;;;;;;;;;34165:629;;;;;;;:::o;11595:98::-;11653:7;11684:1;11680;:5;;;;:::i;:::-;11673:12;;11595:98;;;;:::o;11214:::-;11272:7;11303:1;11299;:5;;;;:::i;:::-;11292:12;;11214:98;;;;:::o;33397:281::-;33466:19;33488:10;:8;:10::i;:::-;33466:32;;33509:13;33525:22;33535:11;33525:5;:9;;:22;;;;:::i;:::-;33509:38;;33583:33;33610:5;33583:7;:22;33599:4;33583:22;;;;;;;;;;;;;;;;:26;;:33;;;;:::i;:::-;33558:7;:22;33574:4;33558:22;;;;;;;;;;;;;;;:58;;;;33657:4;33632:38;;33641:6;33632:38;;;33664:5;33632:38;;;;;;:::i;:::-;;;;;;;;33455:223;;33397:281;;:::o;33686:147::-;33764:17;33776:4;33764:7;;:11;;:17;;;;:::i;:::-;33754:7;:27;;;;33805:20;33820:4;33805:10;;:14;;:20;;;;:::i;:::-;33792:10;:33;;;;33686:147;;:::o;34802:387::-;34930:7;34939;34948;34968:12;34983:30;35009:3;34983:21;34995:8;34983:7;:11;;:21;;;;:::i;:::-;:25;;:30;;;;:::i;:::-;34968:45;;35024:13;35040:28;35064:3;35040:19;35052:6;35040:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;35024:44;;35079:23;35105:28;35127:5;35105:17;35117:4;35105:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;35079:54;;35152:15;35169:4;35175:5;35144:37;;;;;;;;;34802:387;;;;;;;:::o;35197:452::-;35350:7;35359;35368;35388:15;35406:24;35418:11;35406:7;:11;;:24;;;;:::i;:::-;35388:42;;35441:12;35456:21;35465:11;35456:4;:8;;:21;;;;:::i;:::-;35441:36;;35488:13;35504:22;35514:11;35504:5;:9;;:22;;;;:::i;:::-;35488:38;;35537:23;35563:28;35585:5;35563:17;35575:4;35563:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;35537:54;;35610:7;35619:15;35636:4;35602:39;;;;;;;;;;35197:452;;;;;;;;:::o;11952:98::-;12010:7;12041:1;12037;:5;;;;:::i;:::-;12030:12;;11952:98;;;;:::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;1349:75::-;1382:6;1415:2;1409:9;1399:19;;1349:75;:::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:474::-;3514:6;3522;3571:2;3559:9;3550:7;3546:23;3542:32;3539:119;;;3577:79;;:::i;:::-;3539:119;3697:1;3722:53;3767:7;3758:6;3747:9;3743:22;3722:53;:::i;:::-;3712:63;;3668:117;3824:2;3850:53;3895:7;3886:6;3875:9;3871:22;3850:53;:::i;:::-;3840:63;;3795:118;3446:474;;;;;:::o;3926:60::-;3954:3;3975:5;3968:12;;3926:60;;;:::o;3992:142::-;4042:9;4075:53;4093:34;4102:24;4120:5;4102:24;:::i;:::-;4093:34;:::i;:::-;4075:53;:::i;:::-;4062:66;;3992:142;;;:::o;4140:126::-;4190:9;4223:37;4254:5;4223:37;:::i;:::-;4210:50;;4140:126;;;:::o;4272:152::-;4348:9;4381:37;4412:5;4381:37;:::i;:::-;4368:50;;4272:152;;;:::o;4430:183::-;4543:63;4600:5;4543:63;:::i;:::-;4538:3;4531:76;4430:183;;:::o;4619:274::-;4738:4;4776:2;4765:9;4761:18;4753:26;;4789:97;4883:1;4872:9;4868:17;4859:6;4789:97;:::i;:::-;4619:274;;;;:::o;4899:118::-;4986:24;5004:5;4986:24;:::i;:::-;4981:3;4974:37;4899:118;;:::o;5023:222::-;5116:4;5154:2;5143:9;5139:18;5131:26;;5167:71;5235:1;5224:9;5220:17;5211:6;5167:71;:::i;:::-;5023:222;;;;:::o;5251:619::-;5328:6;5336;5344;5393:2;5381:9;5372:7;5368:23;5364:32;5361:119;;;5399:79;;:::i;:::-;5361:119;5519:1;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5490:117;5646:2;5672:53;5717:7;5708:6;5697:9;5693:22;5672:53;:::i;:::-;5662:63;;5617:118;5774:2;5800:53;5845:7;5836:6;5825:9;5821:22;5800:53;:::i;:::-;5790:63;;5745:118;5251:619;;;;;:::o;5876:116::-;5946:21;5961:5;5946:21;:::i;:::-;5939:5;5936:32;5926:60;;5982:1;5979;5972:12;5926:60;5876:116;:::o;5998:133::-;6041:5;6079:6;6066:20;6057:29;;6095:30;6119:5;6095:30;:::i;:::-;5998:133;;;;:::o;6137:323::-;6193:6;6242:2;6230:9;6221:7;6217:23;6213:32;6210:119;;;6248:79;;:::i;:::-;6210:119;6368:1;6393:50;6435:7;6426:6;6415:9;6411:22;6393:50;:::i;:::-;6383:60;;6339:114;6137:323;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:118::-;6983:24;7001:5;6983:24;:::i;:::-;6978:3;6971:37;6896:118;;:::o;7020:222::-;7113:4;7151:2;7140:9;7136:18;7128:26;;7164:71;7232:1;7221:9;7217:17;7208:6;7164:71;:::i;:::-;7020:222;;;;:::o;7248:474::-;7316:6;7324;7373:2;7361:9;7352:7;7348:23;7344:32;7341:119;;;7379:79;;:::i;:::-;7341:119;7499:1;7524:53;7569:7;7560:6;7549:9;7545:22;7524:53;:::i;:::-;7514:63;;7470:117;7626:2;7652:53;7697:7;7688:6;7677:9;7673:22;7652:53;:::i;:::-;7642:63;;7597:118;7248:474;;;;;:::o;7728:329::-;7787:6;7836:2;7824:9;7815:7;7811:23;7807:32;7804:119;;;7842:79;;:::i;:::-;7804:119;7962:1;7987:53;8032:7;8023:6;8012:9;8008:22;7987:53;:::i;:::-;7977:63;;7933:117;7728:329;;;;:::o;8063:::-;8122:6;8171:2;8159:9;8150:7;8146:23;8142:32;8139:119;;;8177:79;;:::i;:::-;8139:119;8297:1;8322:53;8367:7;8358:6;8347:9;8343:22;8322:53;:::i;:::-;8312:63;;8268:117;8063:329;;;;:::o;8398:765::-;8484:6;8492;8500;8508;8557:3;8545:9;8536:7;8532:23;8528:33;8525:120;;;8564:79;;:::i;:::-;8525:120;8684:1;8709:53;8754:7;8745:6;8734:9;8730:22;8709:53;:::i;:::-;8699:63;;8655:117;8811:2;8837:53;8882:7;8873:6;8862:9;8858:22;8837:53;:::i;:::-;8827:63;;8782:118;8939:2;8965:53;9010:7;9001:6;8990:9;8986:22;8965:53;:::i;:::-;8955:63;;8910:118;9067:2;9093:53;9138:7;9129:6;9118:9;9114:22;9093:53;:::i;:::-;9083:63;;9038:118;8398:765;;;;;;;:::o;9169:117::-;9278:1;9275;9268:12;9292:117;9401:1;9398;9391:12;9415:117;9524:1;9521;9514:12;9555:568;9628:8;9638:6;9688:3;9681:4;9673:6;9669:17;9665:27;9655:122;;9696:79;;:::i;:::-;9655:122;9809:6;9796:20;9786:30;;9839:18;9831:6;9828:30;9825:117;;;9861:79;;:::i;:::-;9825:117;9975:4;9967:6;9963:17;9951:29;;10029:3;10021:4;10013:6;10009:17;9999:8;9995:32;9992:41;9989:128;;;10036:79;;:::i;:::-;9989:128;9555:568;;;;;:::o;10129:698::-;10221:6;10229;10237;10286:2;10274:9;10265:7;10261:23;10257:32;10254:119;;;10292:79;;:::i;:::-;10254:119;10440:1;10429:9;10425:17;10412:31;10470:18;10462:6;10459:30;10456:117;;;10492:79;;:::i;:::-;10456:117;10605:80;10677:7;10668:6;10657:9;10653:22;10605:80;:::i;:::-;10587:98;;;;10383:312;10734:2;10760:50;10802:7;10793:6;10782:9;10778:22;10760:50;:::i;:::-;10750:60;;10705:115;10129:698;;;;;:::o;10833:180::-;10881:77;10878:1;10871:88;10978:4;10975:1;10968:15;11002:4;10999:1;10992:15;11019:281;11102:27;11124:4;11102:27;:::i;:::-;11094:6;11090:40;11232:6;11220:10;11217:22;11196:18;11184:10;11181:34;11178:62;11175:88;;;11243:18;;:::i;:::-;11175:88;11283:10;11279:2;11272:22;11062:238;11019:281;;:::o;11306:129::-;11340:6;11367:20;;:::i;:::-;11357:30;;11396:33;11424:4;11416:6;11396:33;:::i;:::-;11306:129;;;:::o;11441:311::-;11518:4;11608:18;11600:6;11597:30;11594:56;;;11630:18;;:::i;:::-;11594:56;11680:4;11672:6;11668:17;11660:25;;11740:4;11734;11730:15;11722:23;;11441:311;;;:::o;11775:710::-;11871:5;11896:81;11912:64;11969:6;11912:64;:::i;:::-;11896:81;:::i;:::-;11887:90;;11997:5;12026:6;12019:5;12012:21;12060:4;12053:5;12049:16;12042:23;;12113:4;12105:6;12101:17;12093:6;12089:30;12142:3;12134:6;12131:15;12128:122;;;12161:79;;:::i;:::-;12128:122;12276:6;12259:220;12293:6;12288:3;12285:15;12259:220;;;12368:3;12397:37;12430:3;12418:10;12397:37;:::i;:::-;12392:3;12385:50;12464:4;12459:3;12455:14;12448:21;;12335:144;12319:4;12314:3;12310:14;12303:21;;12259:220;;;12263:21;11877:608;;11775:710;;;;;:::o;12508:370::-;12579:5;12628:3;12621:4;12613:6;12609:17;12605:27;12595:122;;12636:79;;:::i;:::-;12595:122;12753:6;12740:20;12778:94;12868:3;12860:6;12853:4;12845:6;12841:17;12778:94;:::i;:::-;12769:103;;12585:293;12508:370;;;;:::o;12884:539::-;12968:6;13017:2;13005:9;12996:7;12992:23;12988:32;12985:119;;;13023:79;;:::i;:::-;12985:119;13171:1;13160:9;13156:17;13143:31;13201:18;13193:6;13190:30;13187:117;;;13223:79;;:::i;:::-;13187:117;13328:78;13398:7;13389:6;13378:9;13374:22;13328:78;:::i;:::-;13318:88;;13114:302;12884:539;;;;:::o;13429:180::-;13477:77;13474:1;13467:88;13574:4;13571:1;13564:15;13598:4;13595:1;13588:15;13615:102;13657:8;13704:5;13701:1;13697:13;13676:34;;13615:102;;;:::o;13723:848::-;13784:5;13791:4;13815:6;13806:15;;13839:5;13830:14;;13853:712;13874:1;13864:8;13861:15;13853:712;;;13969:4;13964:3;13960:14;13954:4;13951:24;13948:50;;;13978:18;;:::i;:::-;13948:50;14028:1;14018:8;14014:16;14011:451;;;14443:4;14436:5;14432:16;14423:25;;14011:451;14493:4;14487;14483:15;14475:23;;14523:32;14546:8;14523:32;:::i;:::-;14511:44;;13853:712;;;13723:848;;;;;;;:::o;14577:1073::-;14631:5;14822:8;14812:40;;14843:1;14834:10;;14845:5;;14812:40;14871:4;14861:36;;14888:1;14879:10;;14890:5;;14861:36;14957:4;15005:1;15000:27;;;;15041:1;15036:191;;;;14950:277;;15000:27;15018:1;15009:10;;15020:5;;;15036:191;15081:3;15071:8;15068:17;15065:43;;;15088:18;;:::i;:::-;15065:43;15137:8;15134:1;15130:16;15121:25;;15172:3;15165:5;15162:14;15159:40;;;15179:18;;:::i;:::-;15159:40;15212:5;;;14950:277;;15336:2;15326:8;15323:16;15317:3;15311:4;15308:13;15304:36;15286:2;15276:8;15273:16;15268:2;15262:4;15259:12;15255:35;15239:111;15236:246;;;15392:8;15386:4;15382:19;15373:28;;15427:3;15420:5;15417:14;15414:40;;;15434:18;;:::i;:::-;15414:40;15467:5;;15236:246;15507:42;15545:3;15535:8;15529:4;15526:1;15507:42;:::i;:::-;15492:57;;;;15581:4;15576:3;15572:14;15565:5;15562:25;15559:51;;;15590:18;;:::i;:::-;15559:51;15639:4;15632:5;15628:16;15619:25;;14577:1073;;;;;;:::o;15656:281::-;15714:5;15738:23;15756:4;15738:23;:::i;:::-;15730:31;;15782:25;15798:8;15782:25;:::i;:::-;15770:37;;15826:104;15863:66;15853:8;15847:4;15826:104;:::i;:::-;15817:113;;15656:281;;;;:::o;15943:410::-;15983:7;16006:20;16024:1;16006:20;:::i;:::-;16001:25;;16040:20;16058:1;16040:20;:::i;:::-;16035:25;;16095:1;16092;16088:9;16117:30;16135:11;16117:30;:::i;:::-;16106:41;;16296:1;16287:7;16283:15;16280:1;16277:22;16257:1;16250:9;16230:83;16207:139;;16326:18;;:::i;:::-;16207:139;15991:362;15943:410;;;;:::o;16359:85::-;16404:7;16433:5;16422:16;;16359:85;;;:::o;16450:158::-;16508:9;16541:61;16559:42;16568:32;16594:5;16568:32;:::i;:::-;16559:42;:::i;:::-;16541:61;:::i;:::-;16528:74;;16450:158;;;:::o;16614:147::-;16709:45;16748:5;16709:45;:::i;:::-;16704:3;16697:58;16614:147;;:::o;16767:807::-;17016:4;17054:3;17043:9;17039:19;17031:27;;17068:71;17136:1;17125:9;17121:17;17112:6;17068:71;:::i;:::-;17149:72;17217:2;17206:9;17202:18;17193:6;17149:72;:::i;:::-;17231:80;17307:2;17296:9;17292:18;17283:6;17231:80;:::i;:::-;17321;17397:2;17386:9;17382:18;17373:6;17321:80;:::i;:::-;17411:73;17479:3;17468:9;17464:19;17455:6;17411:73;:::i;:::-;17494;17562:3;17551:9;17547:19;17538:6;17494:73;:::i;:::-;16767:807;;;;;;;;;:::o;17580:143::-;17637:5;17668:6;17662:13;17653:22;;17684:33;17711:5;17684:33;:::i;:::-;17580:143;;;;:::o;17729:663::-;17817:6;17825;17833;17882:2;17870:9;17861:7;17857:23;17853:32;17850:119;;;17888:79;;:::i;:::-;17850:119;18008:1;18033:64;18089:7;18080:6;18069:9;18065:22;18033:64;:::i;:::-;18023:74;;17979:128;18146:2;18172:64;18228:7;18219:6;18208:9;18204:22;18172:64;:::i;:::-;18162:74;;18117:129;18285:2;18311:64;18367:7;18358:6;18347:9;18343:22;18311:64;:::i;:::-;18301:74;;18256:129;17729:663;;;;;:::o;18398:351::-;18468:6;18517:2;18505:9;18496:7;18492:23;18488:32;18485:119;;;18523:79;;:::i;:::-;18485:119;18643:1;18668:64;18724:7;18715:6;18704:9;18700:22;18668:64;:::i;:::-;18658:74;;18614:128;18398:351;;;;:::o;18755:165::-;18895:17;18891:1;18883:6;18879:14;18872:41;18755:165;:::o;18926:366::-;19068:3;19089:67;19153:2;19148:3;19089:67;:::i;:::-;19082:74;;19165:93;19254:3;19165:93;:::i;:::-;19283:2;19278:3;19274:12;19267:19;;18926:366;;;:::o;19298:419::-;19464:4;19502:2;19491:9;19487:18;19479:26;;19551:9;19545:4;19541:20;19537:1;19526:9;19522:17;19515:47;19579:131;19705:4;19579:131;:::i;:::-;19571:139;;19298:419;;;:::o;19723:332::-;19844:4;19882:2;19871:9;19867:18;19859:26;;19895:71;19963:1;19952:9;19948:17;19939:6;19895:71;:::i;:::-;19976:72;20044:2;20033:9;20029:18;20020:6;19976:72;:::i;:::-;19723:332;;;;;:::o;20061:137::-;20115:5;20146:6;20140:13;20131:22;;20162:30;20186:5;20162:30;:::i;:::-;20061:137;;;;:::o;20204:345::-;20271:6;20320:2;20308:9;20299:7;20295:23;20291:32;20288:119;;;20326:79;;:::i;:::-;20288:119;20446:1;20471:61;20524:7;20515:6;20504:9;20500:22;20471:61;:::i;:::-;20461:71;;20417:125;20204:345;;;;:::o;20555:180::-;20603:77;20600:1;20593:88;20700:4;20697:1;20690:15;20724:4;20721:1;20714:15;20741:233;20780:3;20803:24;20821:5;20803:24;:::i;:::-;20794:33;;20849:66;20842:5;20839:77;20836:103;;20919:18;;:::i;:::-;20836:103;20966:1;20959:5;20955:13;20948:20;;20741:233;;;:::o;20980:225::-;21120:34;21116:1;21108:6;21104:14;21097:58;21189:8;21184:2;21176:6;21172:15;21165:33;20980:225;:::o;21211:366::-;21353:3;21374:67;21438:2;21433:3;21374:67;:::i;:::-;21367:74;;21450:93;21539:3;21450:93;:::i;:::-;21568:2;21563:3;21559:12;21552:19;;21211:366;;;:::o;21583:419::-;21749:4;21787:2;21776:9;21772:18;21764:26;;21836:9;21830:4;21826:20;21822:1;21811:9;21807:17;21800:47;21864:131;21990:4;21864:131;:::i;:::-;21856:139;;21583:419;;;:::o;22008:180::-;22056:77;22053:1;22046:88;22153:4;22150:1;22143:15;22177:4;22174:1;22167:15;22194:185;22234:1;22251:20;22269:1;22251:20;:::i;:::-;22246:25;;22285:20;22303:1;22285:20;:::i;:::-;22280:25;;22324:1;22314:35;;22329:18;;:::i;:::-;22314:35;22371:1;22368;22364:9;22359:14;;22194:185;;;;:::o;22385:223::-;22525:34;22521:1;22513:6;22509:14;22502:58;22594:6;22589:2;22581:6;22577:15;22570:31;22385:223;:::o;22614:366::-;22756:3;22777:67;22841:2;22836:3;22777:67;:::i;:::-;22770:74;;22853:93;22942:3;22853:93;:::i;:::-;22971:2;22966:3;22962:12;22955:19;;22614:366;;;:::o;22986:419::-;23152:4;23190:2;23179:9;23175:18;23167:26;;23239:9;23233:4;23229:20;23225:1;23214:9;23210:17;23203:47;23267:131;23393:4;23267:131;:::i;:::-;23259:139;;22986:419;;;:::o;23411:221::-;23551:34;23547:1;23539:6;23535:14;23528:58;23620:4;23615:2;23607:6;23603:15;23596:29;23411:221;:::o;23638:366::-;23780:3;23801:67;23865:2;23860:3;23801:67;:::i;:::-;23794:74;;23877:93;23966:3;23877:93;:::i;:::-;23995:2;23990:3;23986:12;23979:19;;23638:366;;;:::o;24010:419::-;24176:4;24214:2;24203:9;24199:18;24191:26;;24263:9;24257:4;24253:20;24249:1;24238:9;24234:17;24227:47;24291:131;24417:4;24291:131;:::i;:::-;24283:139;;24010:419;;;:::o;24435:182::-;24575:34;24571:1;24563:6;24559:14;24552:58;24435:182;:::o;24623:366::-;24765:3;24786:67;24850:2;24845:3;24786:67;:::i;:::-;24779:74;;24862:93;24951:3;24862:93;:::i;:::-;24980:2;24975:3;24971:12;24964:19;;24623:366;;;:::o;24995:419::-;25161:4;25199:2;25188:9;25184:18;25176:26;;25248:9;25242:4;25238:20;25234:1;25223:9;25219:17;25212:47;25276:131;25402:4;25276:131;:::i;:::-;25268:139;;24995:419;;;:::o;25420:228::-;25560:34;25556:1;25548:6;25544:14;25537:58;25629:11;25624:2;25616:6;25612:15;25605:36;25420:228;:::o;25654:366::-;25796:3;25817:67;25881:2;25876:3;25817:67;:::i;:::-;25810:74;;25893:93;25982:3;25893:93;:::i;:::-;26011:2;26006:3;26002:12;25995:19;;25654:366;;;:::o;26026:419::-;26192:4;26230:2;26219:9;26215:18;26207:26;;26279:9;26273:4;26269:20;26265:1;26254:9;26250:17;26243:47;26307:131;26433:4;26307:131;:::i;:::-;26299:139;;26026:419;;;:::o;26451:250::-;26591:34;26587:1;26579:6;26575:14;26568:58;26660:33;26655:2;26647:6;26643:15;26636:58;26451:250;:::o;26707:366::-;26849:3;26870:67;26934:2;26929:3;26870:67;:::i;:::-;26863:74;;26946:93;27035:3;26946:93;:::i;:::-;27064:2;27059:3;27055:12;27048:19;;26707:366;;;:::o;27079:419::-;27245:4;27283:2;27272:9;27268:18;27260:26;;27332:9;27326:4;27322:20;27318:1;27307:9;27303:17;27296:47;27360:131;27486:4;27360:131;:::i;:::-;27352:139;;27079:419;;;:::o;27504:222::-;27644:34;27640:1;27632:6;27628:14;27621:58;27713:5;27708:2;27700:6;27696:15;27689:30;27504:222;:::o;27732:366::-;27874:3;27895:67;27959:2;27954:3;27895:67;:::i;:::-;27888:74;;27971:93;28060:3;27971:93;:::i;:::-;28089:2;28084:3;28080:12;28073:19;;27732:366;;;:::o;28104:419::-;28270:4;28308:2;28297:9;28293:18;28285:26;;28357:9;28351:4;28347:20;28343:1;28332:9;28328:17;28321:47;28385:131;28511:4;28385:131;:::i;:::-;28377:139;;28104:419;;;:::o;28529:178::-;28669:30;28665:1;28657:6;28653:14;28646:54;28529:178;:::o;28713:366::-;28855:3;28876:67;28940:2;28935:3;28876:67;:::i;:::-;28869:74;;28952:93;29041:3;28952:93;:::i;:::-;29070:2;29065:3;29061:12;29054:19;;28713:366;;;:::o;29085:419::-;29251:4;29289:2;29278:9;29274:18;29266:26;;29338:9;29332:4;29328:20;29324:1;29313:9;29309:17;29302:47;29366:131;29492:4;29366:131;:::i;:::-;29358:139;;29085:419;;;:::o;29510:191::-;29550:3;29569:20;29587:1;29569:20;:::i;:::-;29564:25;;29603:20;29621:1;29603:20;:::i;:::-;29598:25;;29646:1;29643;29639:9;29632:16;;29667:3;29664:1;29661:10;29658:36;;;29674:18;;:::i;:::-;29658:36;29510:191;;;;:::o;29707:222::-;29847:34;29843:1;29835:6;29831:14;29824:58;29916:5;29911:2;29903:6;29899:15;29892:30;29707:222;:::o;29935:366::-;30077:3;30098:67;30162:2;30157:3;30098:67;:::i;:::-;30091:74;;30174:93;30263:3;30174:93;:::i;:::-;30292:2;30287:3;30283:12;30276:19;;29935:366;;;:::o;30307:419::-;30473:4;30511:2;30500:9;30496:18;30488:26;;30560:9;30554:4;30550:20;30546:1;30535:9;30531:17;30524:47;30588:131;30714:4;30588:131;:::i;:::-;30580:139;;30307:419;;;:::o;30732:147::-;30833:11;30870:3;30855:18;;30732:147;;;;:::o;30885:114::-;;:::o;31005:398::-;31164:3;31185:83;31266:1;31261:3;31185:83;:::i;:::-;31178:90;;31277:93;31366:3;31277:93;:::i;:::-;31395:1;31390:3;31386:11;31379:18;;31005:398;;;:::o;31409:379::-;31593:3;31615:147;31758:3;31615:147;:::i;:::-;31608:154;;31779:3;31772:10;;31409:379;;;:::o;31794:169::-;31934:21;31930:1;31922:6;31918:14;31911:45;31794:169;:::o;31969:366::-;32111:3;32132:67;32196:2;32191:3;32132:67;:::i;:::-;32125:74;;32208:93;32297:3;32208:93;:::i;:::-;32326:2;32321:3;32317:12;32310:19;;31969:366;;;:::o;32341:419::-;32507:4;32545:2;32534:9;32530:18;32522:26;;32594:9;32588:4;32584:20;32580:1;32569:9;32565:17;32558:47;32622:131;32748:4;32622:131;:::i;:::-;32614:139;;32341:419;;;:::o;32766:229::-;32906:34;32902:1;32894:6;32890:14;32883:58;32975:12;32970:2;32962:6;32958:15;32951:37;32766:229;:::o;33001:366::-;33143:3;33164:67;33228:2;33223:3;33164:67;:::i;:::-;33157:74;;33240:93;33329:3;33240:93;:::i;:::-;33358:2;33353:3;33349:12;33342:19;;33001:366;;;:::o;33373:419::-;33539:4;33577:2;33566:9;33562:18;33554:26;;33626:9;33620:4;33616:20;33612:1;33601:9;33597:17;33590:47;33654:131;33780:4;33654:131;:::i;:::-;33646:139;;33373:419;;;:::o;33798:143::-;33855:5;33886:6;33880:13;33871:22;;33902:33;33929:5;33902:33;:::i;:::-;33798:143;;;;:::o;33947:351::-;34017:6;34066:2;34054:9;34045:7;34041:23;34037:32;34034:119;;;34072:79;;:::i;:::-;34034:119;34192:1;34217:64;34273:7;34264:6;34253:9;34249:22;34217:64;:::i;:::-;34207:74;;34163:128;33947:351;;;;:::o;34304:114::-;34371:6;34405:5;34399:12;34389:22;;34304:114;;;:::o;34424:184::-;34523:11;34557:6;34552:3;34545:19;34597:4;34592:3;34588:14;34573:29;;34424:184;;;;:::o;34614:132::-;34681:4;34704:3;34696:11;;34734:4;34729:3;34725:14;34717:22;;34614:132;;;:::o;34752:108::-;34829:24;34847:5;34829:24;:::i;:::-;34824:3;34817:37;34752:108;;:::o;34866:179::-;34935:10;34956:46;34998:3;34990:6;34956:46;:::i;:::-;35034:4;35029:3;35025:14;35011:28;;34866:179;;;;:::o;35051:113::-;35121:4;35153;35148:3;35144:14;35136:22;;35051:113;;;:::o;35200:732::-;35319:3;35348:54;35396:5;35348:54;:::i;:::-;35418:86;35497:6;35492:3;35418:86;:::i;:::-;35411:93;;35528:56;35578:5;35528:56;:::i;:::-;35607:7;35638:1;35623:284;35648:6;35645:1;35642:13;35623:284;;;35724:6;35718:13;35751:63;35810:3;35795:13;35751:63;:::i;:::-;35744:70;;35837:60;35890:6;35837:60;:::i;:::-;35827:70;;35683:224;35670:1;35667;35663:9;35658:14;;35623:284;;;35627:14;35923:3;35916:10;;35324:608;;;35200:732;;;;:::o;35938:831::-;36201:4;36239:3;36228:9;36224:19;36216:27;;36253:71;36321:1;36310:9;36306:17;36297:6;36253:71;:::i;:::-;36334:80;36410:2;36399:9;36395:18;36386:6;36334:80;:::i;:::-;36461:9;36455:4;36451:20;36446:2;36435:9;36431:18;36424:48;36489:108;36592:4;36583:6;36489:108;:::i;:::-;36481:116;;36607:72;36675:2;36664:9;36660:18;36651:6;36607:72;:::i;:::-;36689:73;36757:3;36746:9;36742:19;36733:6;36689:73;:::i;:::-;35938:831;;;;;;;;:::o;36775:194::-;36815:4;36835:20;36853:1;36835:20;:::i;:::-;36830:25;;36869:20;36887:1;36869:20;:::i;:::-;36864:25;;36913:1;36910;36906:9;36898:17;;36937:1;36931:4;36928:11;36925:37;;;36942:18;;:::i;:::-;36925:37;36775:194;;;;:::o

Swarm Source

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