ETH Price: $2,559.84 (+6.49%)
 

Overview

Max Total Supply

20,000,000,000 WRBT

Holders

315

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.289625790510366175 WRBT

Value
$0.00
0xe84152d321b397bf81cb4a988a5842460f3c644f
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:
WRBT

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// Do exactly what is needed to stay in wonderland.

// Living in our world, the believers are the chosen ones to create a new philosophy for the future.

// Only the ones true to themselves and the awakened shall see the light amongst every other in the circle.

// Harbor the truth and follow the way paved for all, for this shall lead to eternal trinity.

//        (\_/)
//        ( •_•)
//        / >🚀

// SPDX-License-Identifier: MIT
pragma solidity 0.8.9;
 


interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
}

interface IERC20 {
    /**
     * @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 `recipient`.
    *
    * Returns a boolean value indicating whether the operation succeeded.
    *
    * Emits a {Transfer} event.
    */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns(bool);

        /**
        * @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);
}

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns(string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns(string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns(uint8);
}

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

}

 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

        mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns(string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns(string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns(uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns(uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns(uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns(bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns(uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns(bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns(bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns(bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased cannot be below zero"));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        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);
    }

    
}
 
library SafeMath {
   
    function add(uint256 a, uint256 b) internal pure returns(uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

   
    function sub(uint256 a, uint256 b) internal pure returns(uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

   
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns(uint256) {
    
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

 
    function div(uint256 a, uint256 b) internal pure returns(uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

  
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns(uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    
}
 
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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns(int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns(int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns(int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }


    function toUint256Safe(int256 a) internal pure returns(uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns(int256) {
    int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}


interface IUniswapV2Router01 {
    function factory() external pure returns(address);
    function WETH() external pure returns(address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns(uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns(uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns(uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns(uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns(uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns(uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns(uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns(uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns(uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns(uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns(uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract WRBT is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;


    // addresses
    address private marketingWallet;

    // limits 
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;   
    uint256 private maxWalletAmount;
 
    uint256 private thresholdSwapAmount;

    // status flags
    bool private isTrading = false;
    bool public swapEnabled = false;
    bool public isSwapping;


    // Blacklist Map
    mapping(address => bool) private _blacklist;


    struct Fees {
        uint256 buyTotalFees;
        uint256 buyMarketingFee;
        uint256 buyLiquidityFee;

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellLiquidityFee;
    }  

    Fees public _fees = Fees({
        buyTotalFees: 0,
        buyMarketingFee: 0,
        buyLiquidityFee: 0,

        sellTotalFees: 0,
        sellMarketingFee: 0,
        sellLiquidityFee: 0
    });
    
    

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;


    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public marketPair;
 
  
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived
    );


    constructor() ERC20("The White Rabbit", "WRBT") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);


        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;


        marketPair[address(uniswapV2Pair)] = true;

        approve(address(router), type(uint256).max);
        uint256 totalSupply = 20 * 1e9 * 1e18;

        maxBuyAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxWalletAmount = totalSupply * 3 / 100; // 3% maxWallet
        thresholdSwapAmount = totalSupply * 1 / 10000; // 0.01% swap wallet

        _fees.buyMarketingFee = 0;
        _fees.buyLiquidityFee = 0;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee;

        _fees.sellMarketingFee = 4;
        _fees.sellLiquidityFee = 2;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee;


        marketingWallet = address(0x744c24955CDAE54e505B7BBe2680AD56A169f321); // set as marketing wallet

        // exclude from paying fees or having max transaction amount




        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {

    }

    // once enabled, can never be turned off
    function swapTrading() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
    }



    // change the minimum amount of tokens to sell from fees
    function updateThresholdSwapAmount(uint256 newAmount) external onlyOwner returns(bool){
        thresholdSwapAmount = newAmount;
        return true;
    }


    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) external onlyOwner {
        require(((totalSupply() * newMaxBuy) / 1000) >= (totalSupply() / 100), "Cannot set maxTransactionAmounts lower than 1%");
        require(((totalSupply() * newMaxSell) / 1000) >= (totalSupply() / 100), "Cannot set maxTransactionAmounts lower than 1%");
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }


    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require(((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 100), "Cannot set maxWallet lower than 1%");
        maxWalletAmount = (totalSupply() * newPercentage) / 1000;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function toggleSwapEnabled(bool enabled) external onlyOwner(){
        swapEnabled = enabled;
    }

    function updateFees(uint256 _marketingFeeBuy, uint256 _liquidityFeeBuy,uint256 _marketingFeeSell, uint256 _liquidityFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee;
        require(_fees.buyTotalFees <= 9, "Must keep fees at 9% or less");   
        require(_fees.sellTotalFees <= 9, "Must keep fees at 9% or less");
     
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }
    function excludeFromWalletLimit(address account, bool excluded) public onlyOwner {
        _isExcludedMaxWalletAmount[account] = excluded;
    }
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }


    function setMarketPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from marketPair");
        marketPair[pair] = value;
    }


    function setMarketingWallet(address _marketingWallet) external onlyOwner{
        marketingWallet = _marketingWallet;
    }

    function isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        
        require(!_blacklist[recipient] && !_blacklist[sender], "You have been blacklisted from transfering tokens");
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

        if (
            sender != owner() &&
            recipient != owner() &&
            !isSwapping
        ) {

            if (!isTrading) {
                require(_isExcludedFromFees[sender] || _isExcludedFromFees[recipient], "Trading is not active.");
            }
            if (marketPair[sender] && !_isExcludedMaxTransactionAmount[recipient]) {
                require(amount <= maxBuyAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
            } 
            else if (marketPair[recipient] && !_isExcludedMaxTransactionAmount[sender]) {
                require(amount <= maxSellAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
            }

            if (!_isExcludedMaxWalletAmount[recipient]) {
                require(amount + balanceOf(recipient) <= maxWalletAmount, "Max wallet exceeded");
            }

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

        if (
            canSwap &&
            swapEnabled &&
            !isSwapping &&
            marketPair[recipient] &&
            !_isExcludedFromFees[sender] &&
            !_isExcludedFromFees[recipient]
        ) {
            isSwapping = true;
            swapBack();
            isSwapping = false;
        }
 
        bool takeFee = !isSwapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[sender] || _isExcludedFromFees[recipient]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            
            // on sell
            if (marketPair[recipient] && _fees.sellTotalFees > 0) {
                fees = amount.mul(_fees.sellTotalFees).div(100);
                tokensForLiquidity += fees * _fees.sellLiquidityFee / _fees.sellTotalFees;
                tokensForMarketing += fees * _fees.sellMarketingFee / _fees.sellTotalFees;
            }
            // on buy
            else if (marketPair[sender] && _fees.buyTotalFees > 0) {
                fees = amount.mul(_fees.buyTotalFees).div(100);
                tokensForLiquidity += fees * _fees.buyLiquidityFee / _fees.buyTotalFees;
                tokensForMarketing += fees * _fees.buyMarketingFee / _fees.buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(sender, address(this), fees);
            }

            amount -= fees;

        }

        super._transfer(sender, recipient, amount);
    }

    function swapTokensForEth(uint256 tAmount) private {

        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

        _approve(address(this), address(router), tAmount);

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );

    }

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

        // add the liquidity
        router.addLiquidityETH{ value: ethAmount } (address(this), tAmount, 0, 0 , address(this), block.timestamp);
    }

    function swapBack() private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing ;
        bool success;

        if (contractTokenBalance == 0 || toSwap == 0) { return; }

        if (contractTokenBalance > thresholdSwapAmount * 20) {
            contractTokenBalance = thresholdSwapAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = contractTokenBalance * tokensForLiquidity / toSwap / 2;
        uint256 amountToSwapForETH = contractTokenBalance.sub(liquidityTokens);
 
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForLiquidity = newBalance - ethForMarketing;


        tokensForLiquidity = 0;
        tokensForMarketing = 0;


        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity);
        }

        (success,) = address(marketingWallet).call{ value: address(this).balance } ("");
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_fees","outputs":[{"internalType":"uint256","name":"buyTotalFees","type":"uint256"},{"internalType":"uint256","name":"buyMarketingFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellLiquidityFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"marketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setMarketPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuy","type":"uint256"},{"internalType":"uint256","name":"newMaxSell","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateThresholdSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506040518060c0016040528060008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015181600501555050348015620000ba57600080fd5b506040518060400160405280601081526020017f54686520576869746520526162626974000000000000000000000000000000008152506040518060400160405280600481526020017f575242540000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013f92919062000d89565b5080600490805190602001906200015892919062000d89565b50505060006200016d6200095860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200029d57600080fd5b505afa158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d8919062000ea3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033d57600080fd5b505afa15801562000352573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000378919062000ea3565b6040518363ffffffff1660e01b81526004016200039792919062000ee6565b602060405180830381600087803b158015620003b257600080fd5b505af1158015620003c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ed919062000ea3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016016600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016016600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160166000620004ea6200096060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000620005a96200096060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000620006686200096060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016017600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016018600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007f96080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200098a60201b60201c565b5060006b409f9cbc7c4a04c22000000090506064816200081a919062000f7b565b6007819055506064816200082f919062000f7b565b600881905550606460038262000846919062000fb3565b62000852919062000f7b565b6009819055506127106001826200086a919062000fb3565b62000876919062000f7b565b600a819055506000600d600101819055506000600d60020181905550600d60020154600d60010154620008aa919062001014565b600d600001819055506004600d600401819055506002600d60050181905550600d60050154600d60040154620008e1919062001014565b600d6003018190555073744c24955cdae54e505b7bbe2680ad56a169f321600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620009513382620009b860201b60201c565b5062001329565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000620009ae620009a06200095860201b60201c565b848462000b5360201b60201c565b6001905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a2b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a2290620010d2565b60405180910390fd5b62000a478160025462000d2660201b62001e031790919060201c565b60028190555062000aa5816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d2660201b62001e031790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b47919062001105565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bbd9062001198565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c309062001230565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000d19919062001105565b60405180910390a3505050565b600080828462000d37919062001014565b90508381101562000d7f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d7690620012a2565b60405180910390fd5b8091505092915050565b82805462000d9790620012f3565b90600052602060002090601f01602090048101928262000dbb576000855562000e07565b82601f1062000dd657805160ff191683800117855562000e07565b8280016001018555821562000e07579182015b8281111562000e0657825182559160200191906001019062000de9565b5b50905062000e16919062000e1a565b5090565b5b8082111562000e3557600081600090555060010162000e1b565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e6b8262000e3e565b9050919050565b62000e7d8162000e5e565b811462000e8957600080fd5b50565b60008151905062000e9d8162000e72565b92915050565b60006020828403121562000ebc5762000ebb62000e39565b5b600062000ecc8482850162000e8c565b91505092915050565b62000ee08162000e5e565b82525050565b600060408201905062000efd600083018562000ed5565b62000f0c602083018462000ed5565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f888262000f13565b915062000f958362000f13565b92508262000fa85762000fa762000f1d565b5b828204905092915050565b600062000fc08262000f13565b915062000fcd8362000f13565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562001009576200100862000f4c565b5b828202905092915050565b6000620010218262000f13565b91506200102e8362000f13565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562001066576200106562000f4c565b5b828201905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010ba601f8362001071565b9150620010c78262001082565b602082019050919050565b60006020820190508181036000830152620010ed81620010ab565b9050919050565b620010ff8162000f13565b82525050565b60006020820190506200111c6000830184620010f4565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200118060248362001071565b91506200118d8262001122565b604082019050919050565b60006020820190508181036000830152620011b38162001171565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006200121860228362001071565b91506200122582620011ba565b604082019050919050565b600060208201905081810360008301526200124b8162001209565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200128a601b8362001071565b9150620012978262001252565b602082019050919050565b60006020820190508181036000830152620012bd816200127b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200130c57607f821691505b60208210811415620013235762001322620012c4565b5b50919050565b60805160a0516148576200137960003960008181610dce01526116a3015260008181611de101528181613165015281816132550152818161327c01528181613318015261333f01526148576000f3fe6080604052600436106102135760003560e01c80637571336a11610118578063c16dd4a4116100a0578063dd62ed3e1161006f578063dd62ed3e146107d5578063e16830a814610812578063f2fde38b1461083b578063f5b3c3bf14610864578063f887ea40146108a15761021a565b8063c16dd4a41461072a578063c18bc19514610753578063c6616ba11461077c578063d212a69a146107a55761021a565b8063a457c2d7116100e7578063a457c2d714610645578063a9059cbb14610682578063b8863115146106bf578063b9e418e7146106ea578063c0246668146107015761021a565b80637571336a146105895780638da5cb5b146105b257806395d89b41146105dd57806396880b17146106085761021a565b8063313ce5671161019b578063555467a11161016a578063555467a1146104a45780635d098b38146104e15780636ddd17131461050a57806370a0823114610535578063715018a6146105725761021a565b8063313ce567146103d457806339509351146103ff57806349bd5a5e1461043c5780634fbee193146104675761021a565b806318160ddd116101e257806318160ddd146102ed5780631a8145bb146103185780631c6e8a75146103435780631f3fed8f1461036c57806323b872dd146103975761021a565b806306fdde031461021f578063095ea7b31461024a57806310d5de531461028757806311a582c3146102c45761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108cc565b60405161024191906134f7565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c91906135b2565b61095e565b60405161027e919061360d565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613628565b61097c565b6040516102bb919061360d565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613655565b61099c565b005b3480156102f957600080fd5b50610302610b6d565b60405161030f91906136a4565b60405180910390f35b34801561032457600080fd5b5061032d610b77565b60405161033a91906136a4565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906136eb565b610b7d565b005b34801561037857600080fd5b50610381610c31565b60405161038e91906136a4565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613718565b610c37565b6040516103cb919061360d565b60405180910390f35b3480156103e057600080fd5b506103e9610d10565b6040516103f69190613787565b60405180910390f35b34801561040b57600080fd5b50610426600480360381019061042191906135b2565b610d19565b604051610433919061360d565b60405180910390f35b34801561044857600080fd5b50610451610dcc565b60405161045e91906137b1565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613628565b610df0565b60405161049b919061360d565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906137cc565b610e46565b6040516104d8919061360d565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613628565b610eef565b005b34801561051657600080fd5b5061051f610fca565b60405161052c919061360d565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190613628565b610fdd565b60405161056991906136a4565b60405180910390f35b34801561057e57600080fd5b50610587611025565b005b34801561059557600080fd5b506105b060048036038101906105ab91906137f9565b61117d565b005b3480156105be57600080fd5b506105c761126f565b6040516105d491906137b1565b60405180910390f35b3480156105e957600080fd5b506105f2611299565b6040516105ff91906134f7565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613628565b61132b565b60405161063c919061360d565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906135b2565b61134b565b604051610679919061360d565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906135b2565b611418565b6040516106b6919061360d565b60405180910390f35b3480156106cb57600080fd5b506106d4611436565b6040516106e1919061360d565b60405180910390f35b3480156106f657600080fd5b506106ff611449565b005b34801561070d57600080fd5b50610728600480360381019061072391906137f9565b611518565b005b34801561073657600080fd5b50610751600480360381019061074c91906137f9565b61160a565b005b34801561075f57600080fd5b5061077a600480360381019061077591906137cc565b61178b565b005b34801561078857600080fd5b506107a3600480360381019061079e9190613839565b6118c0565b005b3480156107b157600080fd5b506107ba611a55565b6040516107cc969594939291906138a0565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613901565b611a7f565b60405161080991906136a4565b60405180910390f35b34801561081e57600080fd5b50610839600480360381019061083491906137f9565b611b06565b005b34801561084757600080fd5b50610862600480360381019061085d9190613628565b611bf8565b005b34801561087057600080fd5b5061088b60048036038101906108869190613628565b611dbf565b604051610898919061360d565b60405180910390f35b3480156108ad57600080fd5b506108b6611ddf565b6040516108c391906139a0565b60405180910390f35b6060600380546108db906139ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610907906139ea565b80156109545780601f1061092957610100808354040283529160200191610954565b820191906000526020600020905b81548152906001019060200180831161093757829003601f168201915b5050505050905090565b600061097261096b611e61565b8484611e69565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b6109a4611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a90613a68565b60405180910390fd5b6064610a3d610b6d565b610a479190613ae6565b6103e883610a53610b6d565b610a5d9190613b17565b610a679190613ae6565b1015610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613be3565b60405180910390fd5b6064610ab2610b6d565b610abc9190613ae6565b6103e882610ac8610b6d565b610ad29190613b17565b610adc9190613ae6565b1015610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613be3565b60405180910390fd5b6103e882610b29610b6d565b610b339190613b17565b610b3d9190613ae6565b6007819055506103e881610b4f610b6d565b610b599190613b17565b610b639190613ae6565b6008819055505050565b6000600254905090565b60145481565b610b85611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90613a68565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60135481565b6000610c44848484612034565b610d0584610c50611e61565b610d00856040518060600160405280602881526020016147fa60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb6611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b611e69565b600190509392505050565b60006012905090565b6000610dc2610d26611e61565b84610dbd8560016000610d37611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0390919063ffffffff16565b611e69565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e50611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690613a68565b60405180910390fd5b81600a8190555060019050919050565b610ef7611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613a68565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102d611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390613a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611185611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90613a68565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112a8906139ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112d4906139ea565b80156113215780601f106112f657610100808354040283529160200191611321565b820191906000526020600020905b81548152906001019060200180831161130457829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b600061140e611358611e61565b84611409856040518060600160405280602581526020016147af6025913960016000611382611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b611e69565b6001905092915050565b600061142c611425611e61565b8484612034565b6001905092915050565b600b60029054906101000a900460ff1681565b611451611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613a68565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b611520611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613a68565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611612611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890613a68565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613c75565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611793611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990613a68565b60405180910390fd5b606461182c610b6d565b6118369190613ae6565b6103e882611842610b6d565b61184c9190613b17565b6118569190613ae6565b1015611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e90613d07565b60405180910390fd5b6103e8816118a3610b6d565b6118ad9190613b17565b6118b79190613ae6565b60098190555050565b6118c8611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90613a68565b60405180910390fd5b83600d6001018190555082600d60020181905550600d60020154600d600101546119819190613d27565b600d6000018190555081600d6004018190555080600d60050181905550600d60050154600d600401546119b49190613d27565b600d600301819055506009600d600001541115611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613dc9565b60405180910390fd5b6009600d600301541115611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613dc9565b60405180910390fd5b50505050565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0e611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490613a68565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c00611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690613e5b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611e129190613d27565b905083811015611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613ec7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613feb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202791906136a4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061410f565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121b85750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee906141a1565b60405180910390fd5b60008114156122115761220c83836000612b24565b612abb565b61221961126f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612287575061225761126f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a05750600b60029054906101000a900460ff16155b1561262657600b60009054906101000a900460ff1661239a57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061235a5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123909061420d565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561243d5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561248c57600754811115612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e9061429f565b60405180910390fd5b61257b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561252f5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561257a57600854811115612579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257090614331565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612625576009546125d883610fdd565b826125e39190613d27565b1115612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b9061439d565b60405180910390fd5b5b5b600061263130610fdd565b90506000600a5482101590508080156126565750600b60019054906101000a900460ff165b801561266f5750600b60029054906101000a900460ff16155b80156126c45750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561271a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127705750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b4576001600b60026101000a81548160ff021916908315150217905550612798612dae565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061286a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561287457600090505b60008115612aab57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128da57506000600d60030154115b156129835761290a60646128fc600d6003015488612fb790919063ffffffff16565b61303290919063ffffffff16565b9050600d60030154600d60050154826129239190613b17565b61292d9190613ae6565b6014600082825461293e9190613d27565b92505081905550600d60030154600d600401548261295c9190613b17565b6129669190613ae6565b601360008282546129779190613d27565b92505081905550612a87565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129e157506000600d60000154115b15612a8657612a116064612a03600d6000015488612fb790919063ffffffff16565b61303290919063ffffffff16565b9050600d60000154600d6002015482612a2a9190613b17565b612a349190613ae6565b60146000828254612a459190613d27565b92505081905550600d60000154600d6001015482612a639190613b17565b612a6d9190613ae6565b60136000828254612a7e9190613d27565b925050819055505b5b6000811115612a9c57612a9b873083612b24565b5b8085612aa891906143bd565b94505b612ab6878787612b24565b505050505b505050565b6000838311158290612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff91906134f7565b60405180910390fd5b5060008385612b1791906143bd565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfb9061410f565b60405180910390fd5b612c6f816040518060600160405280602681526020016147d4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d02816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612da191906136a4565b60405180910390a3505050565b6000612db930610fdd565b90506000601354601454612dcd9190613d27565b9050600080831480612ddf5750600082145b15612dec57505050612fb5565b6014600a54612dfb9190613b17565b831115612e14576014600a54612e119190613b17565b92505b600060028360145486612e279190613b17565b612e319190613ae6565b612e3b9190613ae6565b90506000612e52828661307c90919063ffffffff16565b90506000479050612e62826130c6565b6000612e77824761307c90919063ffffffff16565b90506000612ea287612e9460135485612fb790919063ffffffff16565b61303290919063ffffffff16565b905060008183612eb291906143bd565b905060006014819055506000601381905550600086118015612ed45750600081115b15612f1d57612ee38682613312565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868582604051612f149291906143f1565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f639061444b565b60006040518083038185875af1925050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b5050809750505050505050505050505b565b600080831415612fca576000905061302c565b60008284612fd89190613b17565b9050828482612fe79190613ae6565b14613027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301e906144d2565b60405180910390fd5b809150505b92915050565b600061307483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133fb565b905092915050565b60006130be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ac0565b905092915050565b6000600267ffffffffffffffff8111156130e3576130e26144f2565b5b6040519080825280602002602001820160405280156131115781602001602082028036833780820191505090505b509050308160008151811061312957613128614521565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c957600080fd5b505afa1580156131dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132019190614565565b8160018151811061321557613214614521565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061327a307f000000000000000000000000000000000000000000000000000000000000000084611e69565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132dc95949392919061468b565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505050565b61333d307f000000000000000000000000000000000000000000000000000000000000000084611e69565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016133a2969594939291906146e5565b6060604051808303818588803b1580156133bb57600080fd5b505af11580156133cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133f4919061475b565b5050505050565b60008083118290613442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343991906134f7565b60405180910390fd5b50600083856134519190613ae6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561349857808201518184015260208101905061347d565b838111156134a7576000848401525b50505050565b6000601f19601f8301169050919050565b60006134c98261345e565b6134d38185613469565b93506134e381856020860161347a565b6134ec816134ad565b840191505092915050565b6000602082019050818103600083015261351181846134be565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135498261351e565b9050919050565b6135598161353e565b811461356457600080fd5b50565b60008135905061357681613550565b92915050565b6000819050919050565b61358f8161357c565b811461359a57600080fd5b50565b6000813590506135ac81613586565b92915050565b600080604083850312156135c9576135c8613519565b5b60006135d785828601613567565b92505060206135e88582860161359d565b9150509250929050565b60008115159050919050565b613607816135f2565b82525050565b600060208201905061362260008301846135fe565b92915050565b60006020828403121561363e5761363d613519565b5b600061364c84828501613567565b91505092915050565b6000806040838503121561366c5761366b613519565b5b600061367a8582860161359d565b925050602061368b8582860161359d565b9150509250929050565b61369e8161357c565b82525050565b60006020820190506136b96000830184613695565b92915050565b6136c8816135f2565b81146136d357600080fd5b50565b6000813590506136e5816136bf565b92915050565b60006020828403121561370157613700613519565b5b600061370f848285016136d6565b91505092915050565b60008060006060848603121561373157613730613519565b5b600061373f86828701613567565b935050602061375086828701613567565b92505060406137618682870161359d565b9150509250925092565b600060ff82169050919050565b6137818161376b565b82525050565b600060208201905061379c6000830184613778565b92915050565b6137ab8161353e565b82525050565b60006020820190506137c660008301846137a2565b92915050565b6000602082840312156137e2576137e1613519565b5b60006137f08482850161359d565b91505092915050565b600080604083850312156138105761380f613519565b5b600061381e85828601613567565b925050602061382f858286016136d6565b9150509250929050565b6000806000806080858703121561385357613852613519565b5b60006138618782880161359d565b94505060206138728782880161359d565b93505060406138838782880161359d565b92505060606138948782880161359d565b91505092959194509250565b600060c0820190506138b56000830189613695565b6138c26020830188613695565b6138cf6040830187613695565b6138dc6060830186613695565b6138e96080830185613695565b6138f660a0830184613695565b979650505050505050565b6000806040838503121561391857613917613519565b5b600061392685828601613567565b925050602061393785828601613567565b9150509250929050565b6000819050919050565b600061396661396161395c8461351e565b613941565b61351e565b9050919050565b60006139788261394b565b9050919050565b600061398a8261396d565b9050919050565b61399a8161397f565b82525050565b60006020820190506139b56000830184613991565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a0257607f821691505b60208210811415613a1657613a156139bb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a52602083613469565b9150613a5d82613a1c565b602082019050919050565b60006020820190508181036000830152613a8181613a45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613af18261357c565b9150613afc8361357c565b925082613b0c57613b0b613a88565b5b828204905092915050565b6000613b228261357c565b9150613b2d8361357c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6657613b65613ab7565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e203125000000000000000000000000000000000000602082015250565b6000613bcd602e83613469565b9150613bd882613b71565b604082019050919050565b60006020820190508181036000830152613bfc81613bc0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613c5f602a83613469565b9150613c6a82613c03565b604082019050919050565b60006020820190508181036000830152613c8e81613c52565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf1602283613469565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b6000613d328261357c565b9150613d3d8361357c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7257613d71613ab7565b5b828201905092915050565b7f4d757374206b6565702066656573206174203925206f72206c65737300000000600082015250565b6000613db3601c83613469565b9150613dbe82613d7d565b602082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e45602683613469565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613eb1601b83613469565b9150613ebc82613e7b565b602082019050919050565b60006020820190508181036000830152613ee081613ea4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f43602483613469565b9150613f4e82613ee7565b604082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd5602283613469565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614067602583613469565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140f9602383613469565b91506141048261409d565b604082019050919050565b60006020820190508181036000830152614128816140ec565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061418b603183613469565b91506141968261412f565b604082019050919050565b600060208201905081810360008301526141ba8161417e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141f7601683613469565b9150614202826141c1565b602082019050919050565b60006020820190508181036000830152614226816141ea565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614289603583613469565b91506142948261422d565b604082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061431b603683613469565b9150614326826142bf565b604082019050919050565b6000602082019050818103600083015261434a8161430e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614387601383613469565b915061439282614351565b602082019050919050565b600060208201905081810360008301526143b68161437a565b9050919050565b60006143c88261357c565b91506143d38361357c565b9250828210156143e6576143e5613ab7565b5b828203905092915050565b60006040820190506144066000830185613695565b6144136020830184613695565b9392505050565b600081905092915050565b50565b600061443560008361441a565b915061444082614425565b600082019050919050565b600061445682614428565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144bc602183613469565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061455f81613550565b92915050565b60006020828403121561457b5761457a613519565b5b600061458984828501614550565b91505092915050565b6000819050919050565b60006145b76145b26145ad84614592565b613941565b61357c565b9050919050565b6145c78161459c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146028161353e565b82525050565b600061461483836145f9565b60208301905092915050565b6000602082019050919050565b6000614638826145cd565b61464281856145d8565b935061464d836145e9565b8060005b8381101561467e5781516146658882614608565b975061467083614620565b925050600181019050614651565b5085935050505092915050565b600060a0820190506146a06000830188613695565b6146ad60208301876145be565b81810360408301526146bf818661462d565b90506146ce60608301856137a2565b6146db6080830184613695565b9695505050505050565b600060c0820190506146fa60008301896137a2565b6147076020830188613695565b61471460408301876145be565b61472160608301866145be565b61472e60808301856137a2565b61473b60a0830184613695565b979650505050505050565b60008151905061475581613586565b92915050565b60008060006060848603121561477457614773613519565b5b600061478286828701614746565b935050602061479386828701614746565b92505060406147a486828701614746565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209d2f49aa38ce5d52e122bd3ff4fcc16e9491a418bd481ffe4bff1c1509ccf55164736f6c63430008090033

Deployed Bytecode

0x6080604052600436106102135760003560e01c80637571336a11610118578063c16dd4a4116100a0578063dd62ed3e1161006f578063dd62ed3e146107d5578063e16830a814610812578063f2fde38b1461083b578063f5b3c3bf14610864578063f887ea40146108a15761021a565b8063c16dd4a41461072a578063c18bc19514610753578063c6616ba11461077c578063d212a69a146107a55761021a565b8063a457c2d7116100e7578063a457c2d714610645578063a9059cbb14610682578063b8863115146106bf578063b9e418e7146106ea578063c0246668146107015761021a565b80637571336a146105895780638da5cb5b146105b257806395d89b41146105dd57806396880b17146106085761021a565b8063313ce5671161019b578063555467a11161016a578063555467a1146104a45780635d098b38146104e15780636ddd17131461050a57806370a0823114610535578063715018a6146105725761021a565b8063313ce567146103d457806339509351146103ff57806349bd5a5e1461043c5780634fbee193146104675761021a565b806318160ddd116101e257806318160ddd146102ed5780631a8145bb146103185780631c6e8a75146103435780631f3fed8f1461036c57806323b872dd146103975761021a565b806306fdde031461021f578063095ea7b31461024a57806310d5de531461028757806311a582c3146102c45761021a565b3661021a57005b600080fd5b34801561022b57600080fd5b506102346108cc565b60405161024191906134f7565b60405180910390f35b34801561025657600080fd5b50610271600480360381019061026c91906135b2565b61095e565b60405161027e919061360d565b60405180910390f35b34801561029357600080fd5b506102ae60048036038101906102a99190613628565b61097c565b6040516102bb919061360d565b60405180910390f35b3480156102d057600080fd5b506102eb60048036038101906102e69190613655565b61099c565b005b3480156102f957600080fd5b50610302610b6d565b60405161030f91906136a4565b60405180910390f35b34801561032457600080fd5b5061032d610b77565b60405161033a91906136a4565b60405180910390f35b34801561034f57600080fd5b5061036a600480360381019061036591906136eb565b610b7d565b005b34801561037857600080fd5b50610381610c31565b60405161038e91906136a4565b60405180910390f35b3480156103a357600080fd5b506103be60048036038101906103b99190613718565b610c37565b6040516103cb919061360d565b60405180910390f35b3480156103e057600080fd5b506103e9610d10565b6040516103f69190613787565b60405180910390f35b34801561040b57600080fd5b50610426600480360381019061042191906135b2565b610d19565b604051610433919061360d565b60405180910390f35b34801561044857600080fd5b50610451610dcc565b60405161045e91906137b1565b60405180910390f35b34801561047357600080fd5b5061048e60048036038101906104899190613628565b610df0565b60405161049b919061360d565b60405180910390f35b3480156104b057600080fd5b506104cb60048036038101906104c691906137cc565b610e46565b6040516104d8919061360d565b60405180910390f35b3480156104ed57600080fd5b5061050860048036038101906105039190613628565b610eef565b005b34801561051657600080fd5b5061051f610fca565b60405161052c919061360d565b60405180910390f35b34801561054157600080fd5b5061055c60048036038101906105579190613628565b610fdd565b60405161056991906136a4565b60405180910390f35b34801561057e57600080fd5b50610587611025565b005b34801561059557600080fd5b506105b060048036038101906105ab91906137f9565b61117d565b005b3480156105be57600080fd5b506105c761126f565b6040516105d491906137b1565b60405180910390f35b3480156105e957600080fd5b506105f2611299565b6040516105ff91906134f7565b60405180910390f35b34801561061457600080fd5b5061062f600480360381019061062a9190613628565b61132b565b60405161063c919061360d565b60405180910390f35b34801561065157600080fd5b5061066c600480360381019061066791906135b2565b61134b565b604051610679919061360d565b60405180910390f35b34801561068e57600080fd5b506106a960048036038101906106a491906135b2565b611418565b6040516106b6919061360d565b60405180910390f35b3480156106cb57600080fd5b506106d4611436565b6040516106e1919061360d565b60405180910390f35b3480156106f657600080fd5b506106ff611449565b005b34801561070d57600080fd5b50610728600480360381019061072391906137f9565b611518565b005b34801561073657600080fd5b50610751600480360381019061074c91906137f9565b61160a565b005b34801561075f57600080fd5b5061077a600480360381019061077591906137cc565b61178b565b005b34801561078857600080fd5b506107a3600480360381019061079e9190613839565b6118c0565b005b3480156107b157600080fd5b506107ba611a55565b6040516107cc969594939291906138a0565b60405180910390f35b3480156107e157600080fd5b506107fc60048036038101906107f79190613901565b611a7f565b60405161080991906136a4565b60405180910390f35b34801561081e57600080fd5b50610839600480360381019061083491906137f9565b611b06565b005b34801561084757600080fd5b50610862600480360381019061085d9190613628565b611bf8565b005b34801561087057600080fd5b5061088b60048036038101906108869190613628565b611dbf565b604051610898919061360d565b60405180910390f35b3480156108ad57600080fd5b506108b6611ddf565b6040516108c391906139a0565b60405180910390f35b6060600380546108db906139ea565b80601f0160208091040260200160405190810160405280929190818152602001828054610907906139ea565b80156109545780601f1061092957610100808354040283529160200191610954565b820191906000526020600020905b81548152906001019060200180831161093757829003601f168201915b5050505050905090565b600061097261096b611e61565b8484611e69565b6001905092915050565b60166020528060005260406000206000915054906101000a900460ff1681565b6109a4611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a2a90613a68565b60405180910390fd5b6064610a3d610b6d565b610a479190613ae6565b6103e883610a53610b6d565b610a5d9190613b17565b610a679190613ae6565b1015610aa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9f90613be3565b60405180910390fd5b6064610ab2610b6d565b610abc9190613ae6565b6103e882610ac8610b6d565b610ad29190613b17565b610adc9190613ae6565b1015610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613be3565b60405180910390fd5b6103e882610b29610b6d565b610b339190613b17565b610b3d9190613ae6565b6007819055506103e881610b4f610b6d565b610b599190613b17565b610b639190613ae6565b6008819055505050565b6000600254905090565b60145481565b610b85611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0b90613a68565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b60135481565b6000610c44848484612034565b610d0584610c50611e61565b610d00856040518060600160405280602881526020016147fa60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb6611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b611e69565b600190509392505050565b60006012905090565b6000610dc2610d26611e61565b84610dbd8560016000610d37611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0390919063ffffffff16565b611e69565b6001905092915050565b7f000000000000000000000000d71b0f74790fe3bc15acc1125c075c59990c376e81565b6000601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e50611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610edf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed690613a68565b60405180910390fd5b81600a8190555060019050919050565b610ef7611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7d90613a68565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61102d611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b390613a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611185611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b90613a68565b60405180910390fd5b80601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112a8906139ea565b80601f01602080910402602001604051908101604052809291908181526020018280546112d4906139ea565b80156113215780601f106112f657610100808354040283529160200191611321565b820191906000526020600020905b81548152906001019060200180831161130457829003601f168201915b5050505050905090565b60176020528060005260406000206000915054906101000a900460ff1681565b600061140e611358611e61565b84611409856040518060600160405280602581526020016147af6025913960016000611382611e61565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b611e69565b6001905092915050565b600061142c611425611e61565b8484612034565b6001905092915050565b600b60029054906101000a900460ff1681565b611451611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d790613a68565b60405180910390fd5b6001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff021916908315150217905550565b611520611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a690613a68565b60405180910390fd5b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611612611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169890613a68565b60405180910390fd5b7f000000000000000000000000d71b0f74790fe3bc15acc1125c075c59990c376e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611730576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172790613c75565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611793611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181990613a68565b60405180910390fd5b606461182c610b6d565b6118369190613ae6565b6103e882611842610b6d565b61184c9190613b17565b6118569190613ae6565b1015611897576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188e90613d07565b60405180910390fd5b6103e8816118a3610b6d565b6118ad9190613b17565b6118b79190613ae6565b60098190555050565b6118c8611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194e90613a68565b60405180910390fd5b83600d6001018190555082600d60020181905550600d60020154600d600101546119819190613d27565b600d6000018190555081600d6004018190555080600d60050181905550600d60050154600d600401546119b49190613d27565b600d600301819055506009600d600001541115611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd90613dc9565b60405180910390fd5b6009600d600301541115611a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4690613dc9565b60405180910390fd5b50505050565b600d8060000154908060010154908060020154908060030154908060040154908060050154905086565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611b0e611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9490613a68565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611c00611e61565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613a68565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611cff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf690613e5b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60186020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611e129190613d27565b905083811015611e57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4e90613ec7565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed090613f59565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4090613feb565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161202791906136a4565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209b9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061410f565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121b85750600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6121f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ee906141a1565b60405180910390fd5b60008114156122115761220c83836000612b24565b612abb565b61221961126f565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612287575061225761126f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122a05750600b60029054906101000a900460ff16155b1561262657600b60009054906101000a900460ff1661239a57601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061235a5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612399576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123909061420d565b60405180910390fd5b5b601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561243d5750601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561248c57600754811115612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e9061429f565b60405180910390fd5b61257b565b601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561252f5750601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561257a57600854811115612579576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257090614331565b60405180910390fd5b5b5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612625576009546125d883610fdd565b826125e39190613d27565b1115612624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261b9061439d565b60405180910390fd5b5b5b600061263130610fdd565b90506000600a5482101590508080156126565750600b60019054906101000a900460ff165b801561266f5750600b60029054906101000a900460ff16155b80156126c45750601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561271a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127705750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127b4576001600b60026101000a81548160ff021916908315150217905550612798612dae565b6000600b60026101000a81548160ff0219169083151502179055505b6000600b60029054906101000a900460ff16159050601560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061286a5750601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561287457600090505b60008115612aab57601860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128da57506000600d60030154115b156129835761290a60646128fc600d6003015488612fb790919063ffffffff16565b61303290919063ffffffff16565b9050600d60030154600d60050154826129239190613b17565b61292d9190613ae6565b6014600082825461293e9190613d27565b92505081905550600d60030154600d600401548261295c9190613b17565b6129669190613ae6565b601360008282546129779190613d27565b92505081905550612a87565b601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156129e157506000600d60000154115b15612a8657612a116064612a03600d6000015488612fb790919063ffffffff16565b61303290919063ffffffff16565b9050600d60000154600d6002015482612a2a9190613b17565b612a349190613ae6565b60146000828254612a459190613d27565b92505081905550600d60000154600d6001015482612a639190613b17565b612a6d9190613ae6565b60136000828254612a7e9190613d27565b925050819055505b5b6000811115612a9c57612a9b873083612b24565b5b8085612aa891906143bd565b94505b612ab6878787612b24565b505050505b505050565b6000838311158290612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff91906134f7565b60405180910390fd5b5060008385612b1791906143bd565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b8b9061407d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bfb9061410f565b60405180910390fd5b612c6f816040518060600160405280602681526020016147d4602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ac09092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d02816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611e0390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612da191906136a4565b60405180910390a3505050565b6000612db930610fdd565b90506000601354601454612dcd9190613d27565b9050600080831480612ddf5750600082145b15612dec57505050612fb5565b6014600a54612dfb9190613b17565b831115612e14576014600a54612e119190613b17565b92505b600060028360145486612e279190613b17565b612e319190613ae6565b612e3b9190613ae6565b90506000612e52828661307c90919063ffffffff16565b90506000479050612e62826130c6565b6000612e77824761307c90919063ffffffff16565b90506000612ea287612e9460135485612fb790919063ffffffff16565b61303290919063ffffffff16565b905060008183612eb291906143bd565b905060006014819055506000601381905550600086118015612ed45750600081115b15612f1d57612ee38682613312565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868582604051612f149291906143f1565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051612f639061444b565b60006040518083038185875af1925050503d8060008114612fa0576040519150601f19603f3d011682016040523d82523d6000602084013e612fa5565b606091505b5050809750505050505050505050505b565b600080831415612fca576000905061302c565b60008284612fd89190613b17565b9050828482612fe79190613ae6565b14613027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301e906144d2565b60405180910390fd5b809150505b92915050565b600061307483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506133fb565b905092915050565b60006130be83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ac0565b905092915050565b6000600267ffffffffffffffff8111156130e3576130e26144f2565b5b6040519080825280602002602001820160405280156131115781602001602082028036833780820191505090505b509050308160008151811061312957613128614521565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156131c957600080fd5b505afa1580156131dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132019190614565565b8160018151811061321557613214614521565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061327a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e69565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016132dc95949392919061468b565b600060405180830381600087803b1580156132f657600080fd5b505af115801561330a573d6000803e3d6000fd5b505050505050565b61333d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e69565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016133a2969594939291906146e5565b6060604051808303818588803b1580156133bb57600080fd5b505af11580156133cf573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906133f4919061475b565b5050505050565b60008083118290613442576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161343991906134f7565b60405180910390fd5b50600083856134519190613ae6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561349857808201518184015260208101905061347d565b838111156134a7576000848401525b50505050565b6000601f19601f8301169050919050565b60006134c98261345e565b6134d38185613469565b93506134e381856020860161347a565b6134ec816134ad565b840191505092915050565b6000602082019050818103600083015261351181846134be565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006135498261351e565b9050919050565b6135598161353e565b811461356457600080fd5b50565b60008135905061357681613550565b92915050565b6000819050919050565b61358f8161357c565b811461359a57600080fd5b50565b6000813590506135ac81613586565b92915050565b600080604083850312156135c9576135c8613519565b5b60006135d785828601613567565b92505060206135e88582860161359d565b9150509250929050565b60008115159050919050565b613607816135f2565b82525050565b600060208201905061362260008301846135fe565b92915050565b60006020828403121561363e5761363d613519565b5b600061364c84828501613567565b91505092915050565b6000806040838503121561366c5761366b613519565b5b600061367a8582860161359d565b925050602061368b8582860161359d565b9150509250929050565b61369e8161357c565b82525050565b60006020820190506136b96000830184613695565b92915050565b6136c8816135f2565b81146136d357600080fd5b50565b6000813590506136e5816136bf565b92915050565b60006020828403121561370157613700613519565b5b600061370f848285016136d6565b91505092915050565b60008060006060848603121561373157613730613519565b5b600061373f86828701613567565b935050602061375086828701613567565b92505060406137618682870161359d565b9150509250925092565b600060ff82169050919050565b6137818161376b565b82525050565b600060208201905061379c6000830184613778565b92915050565b6137ab8161353e565b82525050565b60006020820190506137c660008301846137a2565b92915050565b6000602082840312156137e2576137e1613519565b5b60006137f08482850161359d565b91505092915050565b600080604083850312156138105761380f613519565b5b600061381e85828601613567565b925050602061382f858286016136d6565b9150509250929050565b6000806000806080858703121561385357613852613519565b5b60006138618782880161359d565b94505060206138728782880161359d565b93505060406138838782880161359d565b92505060606138948782880161359d565b91505092959194509250565b600060c0820190506138b56000830189613695565b6138c26020830188613695565b6138cf6040830187613695565b6138dc6060830186613695565b6138e96080830185613695565b6138f660a0830184613695565b979650505050505050565b6000806040838503121561391857613917613519565b5b600061392685828601613567565b925050602061393785828601613567565b9150509250929050565b6000819050919050565b600061396661396161395c8461351e565b613941565b61351e565b9050919050565b60006139788261394b565b9050919050565b600061398a8261396d565b9050919050565b61399a8161397f565b82525050565b60006020820190506139b56000830184613991565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613a0257607f821691505b60208210811415613a1657613a156139bb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a52602083613469565b9150613a5d82613a1c565b602082019050919050565b60006020820190508181036000830152613a8181613a45565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613af18261357c565b9150613afc8361357c565b925082613b0c57613b0b613a88565b5b828204905092915050565b6000613b228261357c565b9150613b2d8361357c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613b6657613b65613ab7565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e203125000000000000000000000000000000000000602082015250565b6000613bcd602e83613469565b9150613bd882613b71565b604082019050919050565b60006020820190508181036000830152613bfc81613bc0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613c5f602a83613469565b9150613c6a82613c03565b604082019050919050565b60006020820190508181036000830152613c8e81613c52565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cf1602283613469565b9150613cfc82613c95565b604082019050919050565b60006020820190508181036000830152613d2081613ce4565b9050919050565b6000613d328261357c565b9150613d3d8361357c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613d7257613d71613ab7565b5b828201905092915050565b7f4d757374206b6565702066656573206174203925206f72206c65737300000000600082015250565b6000613db3601c83613469565b9150613dbe82613d7d565b602082019050919050565b60006020820190508181036000830152613de281613da6565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613e45602683613469565b9150613e5082613de9565b604082019050919050565b60006020820190508181036000830152613e7481613e38565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613eb1601b83613469565b9150613ebc82613e7b565b602082019050919050565b60006020820190508181036000830152613ee081613ea4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613f43602483613469565b9150613f4e82613ee7565b604082019050919050565b60006020820190508181036000830152613f7281613f36565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fd5602283613469565b9150613fe082613f79565b604082019050919050565b6000602082019050818103600083015261400481613fc8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614067602583613469565b91506140728261400b565b604082019050919050565b600060208201905081810360008301526140968161405a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006140f9602383613469565b91506141048261409d565b604082019050919050565b60006020820190508181036000830152614128816140ec565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b600061418b603183613469565b91506141968261412f565b604082019050919050565b600060208201905081810360008301526141ba8161417e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006141f7601683613469565b9150614202826141c1565b602082019050919050565b60006020820190508181036000830152614226816141ea565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614289603583613469565b91506142948261422d565b604082019050919050565b600060208201905081810360008301526142b88161427c565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061431b603683613469565b9150614326826142bf565b604082019050919050565b6000602082019050818103600083015261434a8161430e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614387601383613469565b915061439282614351565b602082019050919050565b600060208201905081810360008301526143b68161437a565b9050919050565b60006143c88261357c565b91506143d38361357c565b9250828210156143e6576143e5613ab7565b5b828203905092915050565b60006040820190506144066000830185613695565b6144136020830184613695565b9392505050565b600081905092915050565b50565b600061443560008361441a565b915061444082614425565b600082019050919050565b600061445682614428565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006144bc602183613469565b91506144c782614460565b604082019050919050565b600060208201905081810360008301526144eb816144af565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061455f81613550565b92915050565b60006020828403121561457b5761457a613519565b5b600061458984828501614550565b91505092915050565b6000819050919050565b60006145b76145b26145ad84614592565b613941565b61357c565b9050919050565b6145c78161459c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6146028161353e565b82525050565b600061461483836145f9565b60208301905092915050565b6000602082019050919050565b6000614638826145cd565b61464281856145d8565b935061464d836145e9565b8060005b8381101561467e5781516146658882614608565b975061467083614620565b925050600181019050614651565b5085935050505092915050565b600060a0820190506146a06000830188613695565b6146ad60208301876145be565b81810360408301526146bf818661462d565b90506146ce60608301856137a2565b6146db6080830184613695565b9695505050505050565b600060c0820190506146fa60008301896137a2565b6147076020830188613695565b61471460408301876145be565b61472160608301866145be565b61472e60808301856137a2565b61473b60a0830184613695565b979650505050505050565b60008151905061475581613586565b92915050565b60008060006060848603121561477457614773613519565b5b600061478286828701614746565b935050602061479386828701614746565b92505060406147a486828701614746565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212209d2f49aa38ce5d52e122bd3ff4fcc16e9491a418bd481ffe4bff1c1509ccf55164736f6c63430008090033

Deployed Bytecode Sourcemap

21422:12180:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4672:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6832:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22688:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25520:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5789:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22532:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26376:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22492:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7482:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5632:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8245:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21545:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27959:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25352:158;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27826:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21885:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5959:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14094:148;;;;;;;;;;;;;:::i;:::-;;27466:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13453:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4890:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22758:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8965:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6298:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21923:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25172:106;;;;;;;;;;;;;:::i;:::-;;27176:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27620:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26009:271;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26485:679;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22265:206;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;6535:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27314:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14397:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22974:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21496;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4672:99;4725:13;4758:5;4751:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4672:99;:::o;6832:168::-;6914:4;6931:39;6940:12;:10;:12::i;:::-;6954:7;6963:6;6931:8;:39::i;:::-;6988:4;6981:11;;6832:168;;;;:::o;22688:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25520:479::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25682:3:::1;25666:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25656:4;25643:9;25627:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25626:34;;;;:::i;:::-;25625:61;;25617:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;25814:3;25798:13;:11;:13::i;:::-;:19;;;;:::i;:::-;25788:4;25774:10;25758:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25757:35;;;;:::i;:::-;25756:62;;25748:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;25925:4;25912:9;25896:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25895:34;;;;:::i;:::-;25880:12;:49;;;;25987:4;25973:10;25957:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25956:35;;;;:::i;:::-;25940:13;:51;;;;25520:479:::0;;:::o;5789:107::-;5849:7;5876:12;;5869:19;;5789:107;:::o;22532:33::-;;;;:::o;26376:101::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26462:7:::1;26448:11;;:21;;;;;;;;;;;;;;;;;;26376:101:::0;:::o;22492:33::-;;;;:::o;7482:354::-;7621:4;7638:36;7648:6;7656:9;7667:6;7638:9;:36::i;:::-;7685:121;7694:6;7702:12;:10;:12::i;:::-;7716:89;7754:6;7716:89;;;;;;;;;;;;;;;;;:11;:19;7728:6;7716:19;;;;;;;;;;;;;;;:33;7736:12;:10;:12::i;:::-;7716:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7685:8;:121::i;:::-;7824:4;7817:11;;7482:354;;;;;:::o;5632:92::-;5689:5;5714:2;5707:9;;5632:92;:::o;8245:217::-;8332:4;8349:83;8358:12;:10;:12::i;:::-;8372:7;8381:50;8420:10;8381:11;:25;8393:12;:10;:12::i;:::-;8381:25;;;;;;;;;;;;;;;:34;8407:7;8381:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8349:8;:83::i;:::-;8450:4;8443:11;;8245:217;;;;:::o;21545:38::-;;;:::o;27959:125::-;28024:4;28048:19;:28;28068:7;28048:28;;;;;;;;;;;;;;;;;;;;;;;;;28041:35;;27959:125;;;:::o;25352:158::-;25433:4;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25471:9:::1;25449:19;:31;;;;25498:4;25491:11;;25352:158:::0;;;:::o;27826:125::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27927:16:::1;27909:15;;:34;;;;;;;;;;;;;;;;;;27826:125:::0;:::o;21885:31::-;;;;;;;;;;;;;:::o;5959:126::-;6032:7;6059:9;:18;6069:7;6059:18;;;;;;;;;;;;;;;;6052:25;;5959:126;;;:::o;14094:148::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14201:1:::1;14164:40;;14185:6;;;;;;;;;;;14164:40;;;;;;;;;;;;14232:1;14215:6;;:19;;;;;;;;;;;;;;;;;;14094:148::o:0;27466:144::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27598:4:::1;27556:31;:39;27588:6;27556:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27466:144:::0;;:::o;13453:78::-;13490:7;13517:6;;;;;;;;;;;13510:13;;13453:78;:::o;4890:103::-;4945:13;4978:7;4971:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4890:103;:::o;22758:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;8965:268::-;9057:4;9074:129;9083:12;:10;:12::i;:::-;9097:7;9106:96;9145:15;9106:96;;;;;;;;;;;;;;;;;:11;:25;9118:12;:10;:12::i;:::-;9106:25;;;;;;;;;;;;;;;:34;9132:7;9106:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;9074:8;:129::i;:::-;9221:4;9214:11;;8965:268;;;;:::o;6298:174::-;6383:4;6400:42;6410:12;:10;:12::i;:::-;6424:9;6435:6;6400:9;:42::i;:::-;6460:4;6453:11;;6298:174;;;;:::o;21923:22::-;;;;;;;;;;;;;:::o;25172:106::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25237:4:::1;25225:9;;:16;;;;;;;;;;;;;;;;;;25266:4;25252:11;;:18;;;;;;;;;;;;;;;;;;25172:106::o:0;27176:132::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27292:8:::1;27261:19;:28;27281:7;27261:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;27176:132:::0;;:::o;27620:196::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27713:13:::1;27705:21;;:4;:21;;;;27697:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;27803:5;27784:10;:16;27795:4;27784:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;27620:196:::0;;:::o;26009:271::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26162:3:::1;26146:13;:11;:13::i;:::-;:19;;;;:::i;:::-;26136:4;26119:13;26103;:11;:13::i;:::-;:29;;;;:::i;:::-;26102:38;;;;:::i;:::-;26101:65;;26093:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;26268:4;26251:13;26235;:11;:13::i;:::-;:29;;;;:::i;:::-;26234:38;;;;:::i;:::-;26216:15;:56;;;;26009:271:::0;:::o;26485:679::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26663:16:::1;26639:5;:21;;:40;;;;26714:16;26690:5;:21;;:40;;;;26786:5;:21;;;26762:5;:21;;;:45;;;;:::i;:::-;26741:5;:18;;:66;;;;26845:17;26820:5;:22;;:42;;;;26898:17;26873:5;:22;;:42;;;;26973:5;:22;;;26948:5;:22;;;:47;;;;:::i;:::-;26926:5;:19;;:69;;;;27036:1;27014:5;:18;;;:23;;27006:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;27115:1;27092:5;:19;;;:24;;27084:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26485:679:::0;;;;:::o;22265:206::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6535:150::-;6623:7;6650:11;:18;6662:5;6650:18;;;;;;;;;;;;;;;:27;6669:7;6650:27;;;;;;;;;;;;;;;;6643:34;;6535:150;;;;:::o;27314:146::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27444:8:::1;27406:26;:35;27433:7;27406:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27314:146:::0;;:::o;14397:244::-;13674:12;:10;:12::i;:::-;13664:22;;:6;;;;;;;;;;;:22;;;13656:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;14506:1:::1;14486:22;;:8;:22;;;;14478:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;14596:8;14567:38;;14588:6;;;;;;;;;;;14567:38;;;;;;;;;;;;14625:8;14616:6;;:17;;;;;;;;;;;;;;;;;;14397:244:::0;:::o;22974:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;21496:::-;;;:::o;11718:180::-;11775:7;11795:9;11811:1;11807;:5;;;;:::i;:::-;11795:17;;11836:1;11831;:6;;11823:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11889:1;11882:8;;;11718:180;;;;:::o;3742:97::-;3794:7;3821:10;3814:17;;3742:97;:::o;11291:382::-;11444:1;11427:19;;:5;:19;;;;11419:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11525:1;11506:21;;:7;:21;;;;11498:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11611:6;11581:11;:18;11593:5;11581:18;;;;;;;;;;;;;;;:27;11600:7;11581:27;;;;;;;;;;;;;;;:36;;;;11649:7;11633:32;;11642:5;11633:32;;;11658:6;11633:32;;;;;;:::i;:::-;;;;;;;;11291:382;;;:::o;28092:3242::-;28251:1;28233:20;;:6;:20;;;;28225:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;28335:1;28314:23;;:9;:23;;;;28306:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;28407:10;:21;28418:9;28407:21;;;;;;;;;;;;;;;;;;;;;;;;;28406:22;:45;;;;;28433:10;:18;28444:6;28433:18;;;;;;;;;;;;;;;;;;;;;;;;;28432:19;28406:45;28398:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;28540:1;28530:6;:11;28526:102;;;28558:37;28574:6;28582:9;28593:1;28558:15;:37::i;:::-;28610:7;;28526:102;28668:7;:5;:7::i;:::-;28658:17;;:6;:17;;;;:54;;;;;28705:7;:5;:7::i;:::-;28692:20;;:9;:20;;;;28658:54;:82;;;;;28730:10;;;;;;;;;;;28729:11;28658:82;28640:888;;;28774:9;;;;;;;;;;;28769:147;;28812:19;:27;28832:6;28812:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;28843:19;:30;28863:9;28843:30;;;;;;;;;;;;;;;;;;;;;;;;;28812:61;28804:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;28769:147;28934:10;:18;28945:6;28934:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28957:31;:42;28989:9;28957:42;;;;;;;;;;;;;;;;;;;;;;;;;28956:43;28934:65;28930:410;;;29038:12;;29028:6;:22;;29020:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28930:410;;;29148:10;:21;29159:9;29148:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;29174:31;:39;29206:6;29174:39;;;;;;;;;;;;;;;;;;;;;;;;;29173:40;29148:65;29144:196;;;29252:13;;29242:6;:23;;29234:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;29144:196;28930:410;29361:26;:37;29388:9;29361:37;;;;;;;;;;;;;;;;;;;;;;;;;29356:159;;29460:15;;29436:20;29446:9;29436;:20::i;:::-;29427:6;:29;;;;:::i;:::-;:48;;29419:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29356:159;28640:888;29554:28;29585:24;29603:4;29585:9;:24::i;:::-;29554:55;;29623:12;29662:19;;29638:20;:43;;29623:58;;29712:7;:35;;;;;29736:11;;;;;;;;;;;29712:35;:63;;;;;29765:10;;;;;;;;;;;29764:11;29712:63;:101;;;;;29792:10;:21;29803:9;29792:21;;;;;;;;;;;;;;;;;;;;;;;;;29712:101;:146;;;;;29831:19;:27;29851:6;29831:27;;;;;;;;;;;;;;;;;;;;;;;;;29830:28;29712:146;:194;;;;;29876:19;:30;29896:9;29876:30;;;;;;;;;;;;;;;;;;;;;;;;;29875:31;29712:194;29694:326;;;29946:4;29933:10;;:17;;;;;;;;;;;;;;;;;;29965:10;:8;:10::i;:::-;30003:5;29990:10;;:18;;;;;;;;;;;;;;;;;;29694:326;30033:12;30049:10;;;;;;;;;;;30048:11;30033:26;;30161:19;:27;30181:6;30161:27;;;;;;;;;;;;;;;;;;;;;;;;;:61;;;;30192:19;:30;30212:9;30192:30;;;;;;;;;;;;;;;;;;;;;;;;;30161:61;30157:109;;;30249:5;30239:15;;30157:109;30279:12;30384:7;30380:892;;;30450:10;:21;30461:9;30450:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;30497:1;30475:5;:19;;;:23;30450:48;30446:673;;;30526:40;30562:3;30526:31;30537:5;:19;;;30526:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30519:47;;30639:5;:19;;;30614:5;:22;;;30607:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30585:18;;:73;;;;;;;:::i;:::-;;;;;;;;30731:5;:19;;;30706:5;:22;;;30699:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30677:18;;:73;;;;;;;:::i;:::-;;;;;;;;30446:673;;;30812:10;:18;30823:6;30812:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;30855:1;30834:5;:18;;;:22;30812:44;30808:311;;;30884:39;30919:3;30884:30;30895:5;:18;;;30884:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30877:46;;30995:5;:18;;;30971:5;:21;;;30964:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30942:18;;:71;;;;;;;:::i;:::-;;;;;;;;31085:5;:18;;;31061:5;:21;;;31054:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;31032:18;;:71;;;;;;;:::i;:::-;;;;;;;;30808:311;30446:673;31146:1;31139:4;:8;31135:93;;;31168:44;31184:6;31200:4;31207;31168:15;:44::i;:::-;31135:93;31254:4;31244:14;;;;;:::i;:::-;;;30380:892;31284:42;31300:6;31308:9;31319:6;31284:15;:42::i;:::-;28214:3120;;;;28092:3242;;;;:::o;12059:191::-;12144:7;12177:1;12172;:6;;12180:12;12164:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12204:9;12220:1;12216;:5;;;;:::i;:::-;12204:17;;12241:1;12234:8;;;12059:191;;;;;:::o;9723:521::-;9881:1;9863:20;;:6;:20;;;;9855:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;9965:1;9944:23;;:9;:23;;;;9936:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10048;10070:6;10048:71;;;;;;;;;;;;;;;;;:9;:17;10058:6;10048:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;10028:9;:17;10038:6;10028:17;;;;;;;;;;;;;;;:91;;;;10153:32;10178:6;10153:9;:20;10163:9;10153:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;10130:9;:20;10140:9;10130:20;;;;;;;;;;;;;;;:55;;;;10218:9;10201:35;;10210:6;10201:35;;;10229:6;10201:35;;;;;;:::i;:::-;;;;;;;;9723:521;;;:::o;32262:1335::-;32301:28;32332:24;32350:4;32332:9;:24::i;:::-;32301:55;;32367:14;32405:18;;32384;;:39;;;;:::i;:::-;32367:56;;32435:12;32488:1;32464:20;:25;:40;;;;32503:1;32493:6;:11;32464:40;32460:57;;;32508:7;;;;;32460:57;32578:2;32556:19;;:24;;;;:::i;:::-;32533:20;:47;32529:127;;;32642:2;32620:19;;:24;;;;:::i;:::-;32597:47;;32529:127;32717:23;32796:1;32787:6;32766:18;;32743:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32717:80;;32808:26;32837:41;32862:15;32837:20;:24;;:41;;;;:::i;:::-;32808:70;;32892:25;32920:21;32892:49;;32954:36;32971:18;32954:16;:36::i;:::-;33005:18;33026:44;33052:17;33026:21;:25;;:44;;;;:::i;:::-;33005:65;;33084:23;33110:46;33149:6;33110:34;33125:18;;33110:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;33084:72;;33167:23;33206:15;33193:10;:28;;;;:::i;:::-;33167:54;;33257:1;33236:18;:22;;;;33290:1;33269:18;:22;;;;33328:1;33310:15;:19;:42;;;;;33351:1;33333:15;:19;33310:42;33306:192;;;33369:46;33382:15;33399;33369:12;:46::i;:::-;33435:51;33450:18;33470:15;33435:51;;;;;;;:::i;:::-;;;;;;;;33306:192;33531:15;;;;;;;;;;;33523:29;;33561:21;33523:66;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33510:79;;;;;32290:1307;;;;;;;;;32262:1335;:::o;12258:256::-;12315:7;12350:1;12345;:6;12341:47;;;12375:1;12368:8;;;;12341:47;12401:9;12417:1;12413;:5;;;;:::i;:::-;12401:17;;12446:1;12441;12437;:5;;;;:::i;:::-;:10;12429:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;12505:1;12498:8;;;12258:256;;;;;:::o;12525:131::-;12582:7;12609:39;12613:1;12616;12609:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12602:46;;12525:131;;;;:::o;11911:135::-;11968:7;11995:43;11999:1;12002;11995:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11988:50;;11911:135;;;;:::o;31342:554::-;31466:21;31504:1;31490:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31466:40;;31535:4;31517;31522:1;31517:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31561:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31551:4;31556:1;31551:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31587:49;31604:4;31619:6;31628:7;31587:8;:49::i;:::-;31675:6;:57;;;31747:7;31769:1;31813:4;31840;31860:15;31675:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31393:503;31342:554;:::o;31904:350::-;32048:49;32065:4;32080:6;32089:7;32048:8;:49::i;:::-;32140:6;:22;;;32171:9;32192:4;32199:7;32208:1;32211;32223:4;32230:15;32140:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31904:350;;:::o;12668:277::-;12753:7;12785:1;12781;:5;12788:12;12773:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12812:9;12828:1;12824;:5;;;;:::i;:::-;12812:17;;12936:1;12929:8;;;12668:277;;;;;:::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:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:118::-;4396:24;4414:5;4396:24;:::i;:::-;4391:3;4384:37;4309:118;;:::o;4433:222::-;4526:4;4564:2;4553:9;4549:18;4541:26;;4577:71;4645:1;4634:9;4630:17;4621:6;4577:71;:::i;:::-;4433:222;;;;:::o;4661:116::-;4731:21;4746:5;4731:21;:::i;:::-;4724:5;4721:32;4711:60;;4767:1;4764;4757:12;4711:60;4661:116;:::o;4783:133::-;4826:5;4864:6;4851:20;4842:29;;4880:30;4904:5;4880:30;:::i;:::-;4783:133;;;;:::o;4922:323::-;4978:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:119;;;5033:79;;:::i;:::-;4995:119;5153:1;5178:50;5220:7;5211:6;5200:9;5196:22;5178:50;:::i;:::-;5168:60;;5124:114;4922:323;;;;:::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:86::-;5911:7;5951:4;5944:5;5940:16;5929:27;;5876:86;;;:::o;5968:112::-;6051:22;6067:5;6051:22;:::i;:::-;6046:3;6039:35;5968:112;;:::o;6086:214::-;6175:4;6213:2;6202:9;6198:18;6190:26;;6226:67;6290:1;6279:9;6275:17;6266:6;6226:67;:::i;:::-;6086:214;;;;:::o;6306:118::-;6393:24;6411:5;6393:24;:::i;:::-;6388:3;6381:37;6306:118;;:::o;6430:222::-;6523:4;6561:2;6550:9;6546:18;6538:26;;6574:71;6642:1;6631:9;6627:17;6618:6;6574:71;:::i;:::-;6430:222;;;;:::o;6658:329::-;6717:6;6766:2;6754:9;6745:7;6741:23;6737:32;6734:119;;;6772:79;;:::i;:::-;6734:119;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;6658:329;;;;:::o;6993:468::-;7058:6;7066;7115:2;7103:9;7094:7;7090:23;7086:32;7083:119;;;7121:79;;:::i;:::-;7083:119;7241:1;7266:53;7311:7;7302:6;7291:9;7287:22;7266:53;:::i;:::-;7256:63;;7212:117;7368:2;7394:50;7436:7;7427:6;7416:9;7412:22;7394:50;:::i;:::-;7384:60;;7339:115;6993:468;;;;;:::o;7467:765::-;7553:6;7561;7569;7577;7626:3;7614:9;7605:7;7601:23;7597:33;7594:120;;;7633:79;;:::i;:::-;7594:120;7753:1;7778:53;7823:7;7814:6;7803:9;7799:22;7778:53;:::i;:::-;7768:63;;7724:117;7880:2;7906:53;7951:7;7942:6;7931:9;7927:22;7906:53;:::i;:::-;7896:63;;7851:118;8008:2;8034:53;8079:7;8070:6;8059:9;8055:22;8034:53;:::i;:::-;8024:63;;7979:118;8136:2;8162:53;8207:7;8198:6;8187:9;8183:22;8162:53;:::i;:::-;8152:63;;8107:118;7467:765;;;;;;;:::o;8238:775::-;8471:4;8509:3;8498:9;8494:19;8486:27;;8523:71;8591:1;8580:9;8576:17;8567:6;8523:71;:::i;:::-;8604:72;8672:2;8661:9;8657:18;8648:6;8604:72;:::i;:::-;8686;8754:2;8743:9;8739:18;8730:6;8686:72;:::i;:::-;8768;8836:2;8825:9;8821:18;8812:6;8768:72;:::i;:::-;8850:73;8918:3;8907:9;8903:19;8894:6;8850:73;:::i;:::-;8933;9001:3;8990:9;8986:19;8977:6;8933:73;:::i;:::-;8238:775;;;;;;;;;:::o;9019:474::-;9087:6;9095;9144:2;9132:9;9123:7;9119:23;9115:32;9112:119;;;9150:79;;:::i;:::-;9112:119;9270:1;9295:53;9340:7;9331:6;9320:9;9316:22;9295:53;:::i;:::-;9285:63;;9241:117;9397:2;9423:53;9468:7;9459:6;9448:9;9444:22;9423:53;:::i;:::-;9413:63;;9368:118;9019:474;;;;;:::o;9499:60::-;9527:3;9548:5;9541:12;;9499:60;;;:::o;9565:142::-;9615:9;9648:53;9666:34;9675:24;9693:5;9675:24;:::i;:::-;9666:34;:::i;:::-;9648:53;:::i;:::-;9635:66;;9565:142;;;:::o;9713:126::-;9763:9;9796:37;9827:5;9796:37;:::i;:::-;9783:50;;9713:126;;;:::o;9845:153::-;9922:9;9955:37;9986:5;9955:37;:::i;:::-;9942:50;;9845:153;;;:::o;10004:185::-;10118:64;10176:5;10118:64;:::i;:::-;10113:3;10106:77;10004:185;;:::o;10195:276::-;10315:4;10353:2;10342:9;10338:18;10330:26;;10366:98;10461:1;10450:9;10446:17;10437:6;10366:98;:::i;:::-;10195:276;;;;:::o;10477:180::-;10525:77;10522:1;10515:88;10622:4;10619:1;10612:15;10646:4;10643:1;10636:15;10663:320;10707:6;10744:1;10738:4;10734:12;10724:22;;10791:1;10785:4;10781:12;10812:18;10802:81;;10868:4;10860:6;10856:17;10846:27;;10802:81;10930:2;10922:6;10919:14;10899:18;10896:38;10893:84;;;10949:18;;:::i;:::-;10893:84;10714:269;10663:320;;;:::o;10989:182::-;11129:34;11125:1;11117:6;11113:14;11106:58;10989:182;:::o;11177:366::-;11319:3;11340:67;11404:2;11399:3;11340:67;:::i;:::-;11333:74;;11416:93;11505:3;11416:93;:::i;:::-;11534:2;11529:3;11525:12;11518:19;;11177:366;;;:::o;11549:419::-;11715:4;11753:2;11742:9;11738:18;11730:26;;11802:9;11796:4;11792:20;11788:1;11777:9;11773:17;11766:47;11830:131;11956:4;11830:131;:::i;:::-;11822:139;;11549:419;;;:::o;11974:180::-;12022:77;12019:1;12012:88;12119:4;12116:1;12109:15;12143:4;12140:1;12133:15;12160:180;12208:77;12205:1;12198:88;12305:4;12302:1;12295:15;12329:4;12326:1;12319:15;12346:185;12386:1;12403:20;12421:1;12403:20;:::i;:::-;12398:25;;12437:20;12455:1;12437:20;:::i;:::-;12432:25;;12476:1;12466:35;;12481:18;;:::i;:::-;12466:35;12523:1;12520;12516:9;12511:14;;12346:185;;;;:::o;12537:348::-;12577:7;12600:20;12618:1;12600:20;:::i;:::-;12595:25;;12634:20;12652:1;12634:20;:::i;:::-;12629:25;;12822:1;12754:66;12750:74;12747:1;12744:81;12739:1;12732:9;12725:17;12721:105;12718:131;;;12829:18;;:::i;:::-;12718:131;12877:1;12874;12870:9;12859:20;;12537:348;;;;:::o;12891:233::-;13031:34;13027:1;13019:6;13015:14;13008:58;13100:16;13095:2;13087:6;13083:15;13076:41;12891:233;:::o;13130:366::-;13272:3;13293:67;13357:2;13352:3;13293:67;:::i;:::-;13286:74;;13369:93;13458:3;13369:93;:::i;:::-;13487:2;13482:3;13478:12;13471:19;;13130:366;;;:::o;13502:419::-;13668:4;13706:2;13695:9;13691:18;13683:26;;13755:9;13749:4;13745:20;13741:1;13730:9;13726:17;13719:47;13783:131;13909:4;13783:131;:::i;:::-;13775:139;;13502:419;;;:::o;13927:229::-;14067:34;14063:1;14055:6;14051:14;14044:58;14136:12;14131:2;14123:6;14119:15;14112:37;13927:229;:::o;14162:366::-;14304:3;14325:67;14389:2;14384:3;14325:67;:::i;:::-;14318:74;;14401:93;14490:3;14401:93;:::i;:::-;14519:2;14514:3;14510:12;14503:19;;14162:366;;;:::o;14534:419::-;14700:4;14738:2;14727:9;14723:18;14715:26;;14787:9;14781:4;14777:20;14773:1;14762:9;14758:17;14751:47;14815:131;14941:4;14815:131;:::i;:::-;14807:139;;14534:419;;;:::o;14959:221::-;15099:34;15095:1;15087:6;15083:14;15076:58;15168:4;15163:2;15155:6;15151:15;15144:29;14959:221;:::o;15186:366::-;15328:3;15349:67;15413:2;15408:3;15349:67;:::i;:::-;15342:74;;15425:93;15514:3;15425:93;:::i;:::-;15543:2;15538:3;15534:12;15527:19;;15186:366;;;:::o;15558:419::-;15724:4;15762:2;15751:9;15747:18;15739:26;;15811:9;15805:4;15801:20;15797:1;15786:9;15782:17;15775:47;15839:131;15965:4;15839:131;:::i;:::-;15831:139;;15558:419;;;:::o;15983:305::-;16023:3;16042:20;16060:1;16042:20;:::i;:::-;16037:25;;16076:20;16094:1;16076:20;:::i;:::-;16071:25;;16230:1;16162:66;16158:74;16155:1;16152:81;16149:107;;;16236:18;;:::i;:::-;16149:107;16280:1;16277;16273:9;16266:16;;15983:305;;;;:::o;16294:178::-;16434:30;16430:1;16422:6;16418:14;16411:54;16294:178;:::o;16478:366::-;16620:3;16641:67;16705:2;16700:3;16641:67;:::i;:::-;16634:74;;16717:93;16806:3;16717:93;:::i;:::-;16835:2;16830:3;16826:12;16819:19;;16478:366;;;:::o;16850:419::-;17016:4;17054:2;17043:9;17039:18;17031:26;;17103:9;17097:4;17093:20;17089:1;17078:9;17074:17;17067:47;17131:131;17257:4;17131:131;:::i;:::-;17123:139;;16850:419;;;:::o;17275:225::-;17415:34;17411:1;17403:6;17399:14;17392:58;17484:8;17479:2;17471:6;17467:15;17460:33;17275:225;:::o;17506:366::-;17648:3;17669:67;17733:2;17728:3;17669:67;:::i;:::-;17662:74;;17745:93;17834:3;17745:93;:::i;:::-;17863:2;17858:3;17854:12;17847:19;;17506:366;;;:::o;17878:419::-;18044:4;18082:2;18071:9;18067:18;18059:26;;18131:9;18125:4;18121:20;18117:1;18106:9;18102:17;18095:47;18159:131;18285:4;18159:131;:::i;:::-;18151:139;;17878:419;;;:::o;18303:177::-;18443:29;18439:1;18431:6;18427:14;18420:53;18303:177;:::o;18486:366::-;18628:3;18649:67;18713:2;18708:3;18649:67;:::i;:::-;18642:74;;18725:93;18814:3;18725:93;:::i;:::-;18843:2;18838:3;18834:12;18827:19;;18486:366;;;:::o;18858:419::-;19024:4;19062:2;19051:9;19047:18;19039:26;;19111:9;19105:4;19101:20;19097:1;19086:9;19082:17;19075:47;19139:131;19265:4;19139:131;:::i;:::-;19131:139;;18858:419;;;:::o;19283:223::-;19423:34;19419:1;19411:6;19407:14;19400:58;19492:6;19487:2;19479:6;19475:15;19468:31;19283:223;:::o;19512:366::-;19654:3;19675:67;19739:2;19734:3;19675:67;:::i;:::-;19668:74;;19751:93;19840:3;19751:93;:::i;:::-;19869:2;19864:3;19860:12;19853:19;;19512:366;;;:::o;19884:419::-;20050:4;20088:2;20077:9;20073:18;20065:26;;20137:9;20131:4;20127:20;20123:1;20112:9;20108:17;20101:47;20165:131;20291:4;20165:131;:::i;:::-;20157:139;;19884:419;;;:::o;20309:221::-;20449:34;20445:1;20437:6;20433:14;20426:58;20518:4;20513:2;20505:6;20501:15;20494:29;20309:221;:::o;20536:366::-;20678:3;20699:67;20763:2;20758:3;20699:67;:::i;:::-;20692:74;;20775:93;20864:3;20775:93;:::i;:::-;20893:2;20888:3;20884:12;20877:19;;20536:366;;;:::o;20908:419::-;21074:4;21112:2;21101:9;21097:18;21089:26;;21161:9;21155:4;21151:20;21147:1;21136:9;21132:17;21125:47;21189:131;21315:4;21189:131;:::i;:::-;21181:139;;20908:419;;;:::o;21333:224::-;21473:34;21469:1;21461:6;21457:14;21450:58;21542:7;21537:2;21529:6;21525:15;21518:32;21333:224;:::o;21563:366::-;21705:3;21726:67;21790:2;21785:3;21726:67;:::i;:::-;21719:74;;21802:93;21891:3;21802:93;:::i;:::-;21920:2;21915:3;21911:12;21904:19;;21563:366;;;:::o;21935:419::-;22101:4;22139:2;22128:9;22124:18;22116:26;;22188:9;22182:4;22178:20;22174:1;22163:9;22159:17;22152:47;22216:131;22342:4;22216:131;:::i;:::-;22208:139;;21935:419;;;:::o;22360:222::-;22500:34;22496:1;22488:6;22484:14;22477:58;22569:5;22564:2;22556:6;22552:15;22545:30;22360:222;:::o;22588:366::-;22730:3;22751:67;22815:2;22810:3;22751:67;:::i;:::-;22744:74;;22827:93;22916:3;22827:93;:::i;:::-;22945:2;22940:3;22936:12;22929:19;;22588:366;;;:::o;22960:419::-;23126:4;23164:2;23153:9;23149:18;23141:26;;23213:9;23207:4;23203:20;23199:1;23188:9;23184:17;23177:47;23241:131;23367:4;23241:131;:::i;:::-;23233:139;;22960:419;;;:::o;23385:236::-;23525:34;23521:1;23513:6;23509:14;23502:58;23594:19;23589:2;23581:6;23577:15;23570:44;23385:236;:::o;23627:366::-;23769:3;23790:67;23854:2;23849:3;23790:67;:::i;:::-;23783:74;;23866:93;23955:3;23866:93;:::i;:::-;23984:2;23979:3;23975:12;23968:19;;23627:366;;;:::o;23999:419::-;24165:4;24203:2;24192:9;24188:18;24180:26;;24252:9;24246:4;24242:20;24238:1;24227:9;24223:17;24216:47;24280:131;24406:4;24280:131;:::i;:::-;24272:139;;23999:419;;;:::o;24424:172::-;24564:24;24560:1;24552:6;24548:14;24541:48;24424:172;:::o;24602:366::-;24744:3;24765:67;24829:2;24824:3;24765:67;:::i;:::-;24758:74;;24841:93;24930:3;24841:93;:::i;:::-;24959:2;24954:3;24950:12;24943:19;;24602:366;;;:::o;24974:419::-;25140:4;25178:2;25167:9;25163:18;25155:26;;25227:9;25221:4;25217:20;25213:1;25202:9;25198:17;25191:47;25255:131;25381:4;25255:131;:::i;:::-;25247:139;;24974:419;;;:::o;25399:240::-;25539:34;25535:1;25527:6;25523:14;25516:58;25608:23;25603:2;25595:6;25591:15;25584:48;25399:240;:::o;25645:366::-;25787:3;25808:67;25872:2;25867:3;25808:67;:::i;:::-;25801:74;;25884:93;25973:3;25884:93;:::i;:::-;26002:2;25997:3;25993:12;25986:19;;25645:366;;;:::o;26017:419::-;26183:4;26221:2;26210:9;26206:18;26198:26;;26270:9;26264:4;26260:20;26256:1;26245:9;26241:17;26234:47;26298:131;26424:4;26298:131;:::i;:::-;26290:139;;26017:419;;;:::o;26442:241::-;26582:34;26578:1;26570:6;26566:14;26559:58;26651:24;26646:2;26638:6;26634:15;26627:49;26442:241;:::o;26689:366::-;26831:3;26852:67;26916:2;26911:3;26852:67;:::i;:::-;26845:74;;26928:93;27017:3;26928:93;:::i;:::-;27046:2;27041:3;27037:12;27030:19;;26689:366;;;:::o;27061:419::-;27227:4;27265:2;27254:9;27250:18;27242:26;;27314:9;27308:4;27304:20;27300:1;27289:9;27285:17;27278:47;27342:131;27468:4;27342:131;:::i;:::-;27334:139;;27061:419;;;:::o;27486:169::-;27626:21;27622:1;27614:6;27610:14;27603:45;27486:169;:::o;27661:366::-;27803:3;27824:67;27888:2;27883:3;27824:67;:::i;:::-;27817:74;;27900:93;27989:3;27900:93;:::i;:::-;28018:2;28013:3;28009:12;28002:19;;27661:366;;;:::o;28033:419::-;28199:4;28237:2;28226:9;28222:18;28214:26;;28286:9;28280:4;28276:20;28272:1;28261:9;28257:17;28250:47;28314:131;28440:4;28314:131;:::i;:::-;28306:139;;28033:419;;;:::o;28458:191::-;28498:4;28518:20;28536:1;28518:20;:::i;:::-;28513:25;;28552:20;28570:1;28552:20;:::i;:::-;28547:25;;28591:1;28588;28585:8;28582:34;;;28596:18;;:::i;:::-;28582:34;28641:1;28638;28634:9;28626:17;;28458:191;;;;:::o;28655:332::-;28776:4;28814:2;28803:9;28799:18;28791:26;;28827:71;28895:1;28884:9;28880:17;28871:6;28827:71;:::i;:::-;28908:72;28976:2;28965:9;28961:18;28952:6;28908:72;:::i;:::-;28655:332;;;;;:::o;28993:147::-;29094:11;29131:3;29116:18;;28993:147;;;;:::o;29146:114::-;;:::o;29266:398::-;29425:3;29446:83;29527:1;29522:3;29446:83;:::i;:::-;29439:90;;29538:93;29627:3;29538:93;:::i;:::-;29656:1;29651:3;29647:11;29640:18;;29266:398;;;:::o;29670:379::-;29854:3;29876:147;30019:3;29876:147;:::i;:::-;29869:154;;30040:3;30033:10;;29670:379;;;:::o;30055:220::-;30195:34;30191:1;30183:6;30179:14;30172:58;30264:3;30259:2;30251:6;30247:15;30240:28;30055:220;:::o;30281:366::-;30423:3;30444:67;30508:2;30503:3;30444:67;:::i;:::-;30437:74;;30520:93;30609:3;30520:93;:::i;:::-;30638:2;30633:3;30629:12;30622:19;;30281:366;;;:::o;30653:419::-;30819:4;30857:2;30846:9;30842:18;30834:26;;30906:9;30900:4;30896:20;30892:1;30881:9;30877:17;30870:47;30934:131;31060:4;30934:131;:::i;:::-;30926:139;;30653:419;;;:::o;31078:180::-;31126:77;31123:1;31116:88;31223:4;31220:1;31213:15;31247:4;31244:1;31237:15;31264:180;31312:77;31309:1;31302:88;31409:4;31406:1;31399:15;31433:4;31430:1;31423:15;31450:143;31507:5;31538:6;31532:13;31523:22;;31554:33;31581:5;31554:33;:::i;:::-;31450:143;;;;:::o;31599:351::-;31669:6;31718:2;31706:9;31697:7;31693:23;31689:32;31686:119;;;31724:79;;:::i;:::-;31686:119;31844:1;31869:64;31925:7;31916:6;31905:9;31901:22;31869:64;:::i;:::-;31859:74;;31815:128;31599:351;;;;:::o;31956:85::-;32001:7;32030:5;32019:16;;31956:85;;;:::o;32047:158::-;32105:9;32138:61;32156:42;32165:32;32191:5;32165:32;:::i;:::-;32156:42;:::i;:::-;32138:61;:::i;:::-;32125:74;;32047:158;;;:::o;32211:147::-;32306:45;32345:5;32306:45;:::i;:::-;32301:3;32294:58;32211:147;;:::o;32364:114::-;32431:6;32465:5;32459:12;32449:22;;32364:114;;;:::o;32484:184::-;32583:11;32617:6;32612:3;32605:19;32657:4;32652:3;32648:14;32633:29;;32484:184;;;;:::o;32674:132::-;32741:4;32764:3;32756:11;;32794:4;32789:3;32785:14;32777:22;;32674:132;;;:::o;32812:108::-;32889:24;32907:5;32889:24;:::i;:::-;32884:3;32877:37;32812:108;;:::o;32926:179::-;32995:10;33016:46;33058:3;33050:6;33016:46;:::i;:::-;33094:4;33089:3;33085:14;33071:28;;32926:179;;;;:::o;33111:113::-;33181:4;33213;33208:3;33204:14;33196:22;;33111:113;;;:::o;33260:732::-;33379:3;33408:54;33456:5;33408:54;:::i;:::-;33478:86;33557:6;33552:3;33478:86;:::i;:::-;33471:93;;33588:56;33638:5;33588:56;:::i;:::-;33667:7;33698:1;33683:284;33708:6;33705:1;33702:13;33683:284;;;33784:6;33778:13;33811:63;33870:3;33855:13;33811:63;:::i;:::-;33804:70;;33897:60;33950:6;33897:60;:::i;:::-;33887:70;;33743:224;33730:1;33727;33723:9;33718:14;;33683:284;;;33687:14;33983:3;33976:10;;33384:608;;;33260:732;;;;:::o;33998:831::-;34261:4;34299:3;34288:9;34284:19;34276:27;;34313:71;34381:1;34370:9;34366:17;34357:6;34313:71;:::i;:::-;34394:80;34470:2;34459:9;34455:18;34446:6;34394:80;:::i;:::-;34521:9;34515:4;34511:20;34506:2;34495:9;34491:18;34484:48;34549:108;34652:4;34643:6;34549:108;:::i;:::-;34541:116;;34667:72;34735:2;34724:9;34720:18;34711:6;34667:72;:::i;:::-;34749:73;34817:3;34806:9;34802:19;34793:6;34749:73;:::i;:::-;33998:831;;;;;;;;:::o;34835:807::-;35084:4;35122:3;35111:9;35107:19;35099:27;;35136:71;35204:1;35193:9;35189:17;35180:6;35136:71;:::i;:::-;35217:72;35285:2;35274:9;35270:18;35261:6;35217:72;:::i;:::-;35299:80;35375:2;35364:9;35360:18;35351:6;35299:80;:::i;:::-;35389;35465:2;35454:9;35450:18;35441:6;35389:80;:::i;:::-;35479:73;35547:3;35536:9;35532:19;35523:6;35479:73;:::i;:::-;35562;35630:3;35619:9;35615:19;35606:6;35562:73;:::i;:::-;34835:807;;;;;;;;;:::o;35648:143::-;35705:5;35736:6;35730:13;35721:22;;35752:33;35779:5;35752:33;:::i;:::-;35648:143;;;;:::o;35797:663::-;35885:6;35893;35901;35950:2;35938:9;35929:7;35925:23;35921:32;35918:119;;;35956:79;;:::i;:::-;35918:119;36076:1;36101:64;36157:7;36148:6;36137:9;36133:22;36101:64;:::i;:::-;36091:74;;36047:128;36214:2;36240:64;36296:7;36287:6;36276:9;36272:22;36240:64;:::i;:::-;36230:74;;36185:129;36353:2;36379:64;36435:7;36426:6;36415:9;36411:22;36379:64;:::i;:::-;36369:74;;36324:129;35797:663;;;;;:::o

Swarm Source

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