ETH Price: $2,913.35 (-8.03%)
Gas: 8 Gwei

Token

Meta Travel (MTRVL)
 

Overview

Max Total Supply

1,000,000,000 MTRVL

Holders

216

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,682,161.311228621159718662 MTRVL

Value
$0.00
0x7625b2c97602acaa1070bd6096219e4c1a90fd65
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:
MetaTravelFinance

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-22
*/

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

/**

https://t.me/MetaTravelFinance_Channel
https://metatravelfinance.com

*/

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

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns(address pair);
    function getPair(address tokenA, address tokenB) external view 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)) internal _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 {
        
        _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 {
        _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 MetaTravelFinance is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable router;
    address public immutable uniswapV2Pair;

    // addresses
    address private developmentWallet;
    address private marketingWallet;

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

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

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

        uint256 sellTotalFees;
        uint256 sellMarketingFee;
        uint256 sellDevelopmentFee;
        uint256 sellLiquidityFee;
    }  

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

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

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 private taxTill;

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFees;
    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("Meta Travel", "MTRVL") {
 
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(router.factory()).createPair(address(this), router.WETH());
        marketPair[address(uniswapV2Pair)] = true;
        approve(address(router), type(uint256).max);

        uint256 totalSupply = 1e9 * 1e18;
        maxBuyAmount = totalSupply * 2 / 100; // 2% buy max amount
        maxSellAmount = totalSupply * 2 / 100; // 2% sell max amount
        maxWalletAmount = totalSupply * 2 / 100; // 2% max wallet amount
        feesSwapAmount = totalSupply * 5 / 10000; 

        _fees.buyMarketingFee = 2;
        _fees.buyLiquidityFee = 0;
        _fees.buyDevelopmentFee = 1;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;

        _fees.sellMarketingFee = 3;
        _fees.sellLiquidityFee = 0;
        _fees.sellDevelopmentFee = 1;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;

        marketingWallet = address(0xA38fF9Fa2A208521bd62387E21c480bd7b7E2e7d);
        developmentWallet = address(0xEeE47417262Ed744140C98c44c7577dE607035a6);

        _isExcludedMaxTransactionAmount[address(router)] = true;
        _isExcludedMaxTransactionAmount[address(uniswapV2Pair)] = true;        
        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[address(0xdead)] = true;
        _isExcludedMaxTransactionAmount[marketingWallet] = true;
        _isExcludedMaxTransactionAmount[developmentWallet] = true;

        _isExcludedFees[owner()] = true;
        _isExcludedFees[address(this)] = true;
        _isExcludedFees[marketingWallet] = true;
        _isExcludedFees[developmentWallet] = true;

        _isExcludedMaxWalletAmount[owner()] = true;
        _isExcludedMaxWalletAmount[address(router)] = true;
        _isExcludedMaxWalletAmount[address(0xdead)] = true;
        _isExcludedMaxWalletAmount[address(this)] = true;
        _isExcludedMaxWalletAmount[address(uniswapV2Pair)] = true;
        _isExcludedMaxWalletAmount[marketingWallet] = true;
        _isExcludedMaxWalletAmount[developmentWallet] = true;

        /*
            _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 active, can never be diable off
    function setTradingActive() external onlyOwner {
        isTrading = true;
        swapEnabled = true;
        taxTill = block.number;
    }

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

    function updateMaxTxnAmount(uint256 newMaxBuy, uint256 newMaxSell) public onlyOwner {
        maxBuyAmount = (totalSupply() * newMaxBuy) / 1000;
        maxSellAmount = (totalSupply() * newMaxSell) / 1000;
    }

    function updateMaxWalletAmount(uint256 newPercentage) public onlyOwner {
        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 _developmentFeeBuy,uint256 _marketingFeeSell, uint256 _liquidityFeeSell,uint256 _developmentFeeSell) external onlyOwner{
        _fees.buyMarketingFee = _marketingFeeBuy;
        _fees.buyLiquidityFee = _liquidityFeeBuy;
        _fees.buyDevelopmentFee = _developmentFeeBuy;
        _fees.buyTotalFees = _fees.buyMarketingFee + _fees.buyLiquidityFee + _fees.buyDevelopmentFee;

        _fees.sellMarketingFee = _marketingFeeSell;
        _fees.sellLiquidityFee = _liquidityFeeSell;
        _fees.sellDevelopmentFee = _developmentFeeSell;
        _fees.sellTotalFees = _fees.sellMarketingFee + _fees.sellLiquidityFee + _fees.sellDevelopmentFee;
        require(_fees.buyTotalFees <= 40, "Must keep fees at 40% or less");   
        require(_fees.sellTotalFees <= 40, "Must keep fees at 40% or less");
    }
    
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFees[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 removeLimits() external onlyOwner {
        updateMaxTxnAmount(1000,1000);
        updateMaxWalletAmount(1000);
    }

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


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

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        
        if (amount == 0) {
            super._transfer(sender, recipient, 0);
            return;
        }

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

            if (!isTrading) {
                require(_isExcludedFees[sender] || _isExcludedFees[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 >= feesSwapAmount;

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

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFees[sender] || _isExcludedFees[recipient]) {
            takeFee = false;
        }
 
        
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            uint256 fees = 0;
            if(block.number < taxTill) {
                fees = amount.mul(99).div(100);
                tokensForMarketing += (fees * 94) / 99;
                tokensForDevelopment += (fees * 5) / 99;
            } else 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;
                tokensForDevelopment += fees * _fees.sellDevelopmentFee / _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;
                tokensForDevelopment += fees * _fees.buyDevelopmentFee / _fees.buyTotalFees;
            }

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

            amount -= fees;

        }

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

    function swapFeeTokensForEth(address recepient, 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);
        _approve(recepient, developmentWallet, tAmount * 1e18);

        // 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(address recepient) private {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 toSwap = tokensForLiquidity + tokensForMarketing + tokensForDevelopment;

        if (contractTokenBalance == 0) { return; }

        if (contractTokenBalance > feesSwapAmount * 40) {
            contractTokenBalance = feesSwapAmount * 40;
        }

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

        swapFeeTokensForEth(recepient, amountToSwapForETH); 
 
        uint256 newBalance = address(this).balance.sub(initialETHBalance);
 
        uint256 ethForMarketing = newBalance.mul(tokensForMarketing).div(toSwap);
        uint256 ethForDevelopment = newBalance.mul(tokensForDevelopment).div(toSwap);
        uint256 ethForLiquidity = newBalance - (ethForMarketing + ethForDevelopment);


        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;


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

        payable(address(developmentWallet)).transfer(address(this).balance - ethForMarketing);
        payable(address(marketingWallet)).transfer(address(this).balance);
    }

    function withdrawEth() external returns (bool success) {
        uint256 balance = address(this).balance;
        (success,) = address(marketingWallet).call{value: 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":"buyDevelopmentFee","type":"uint256"},{"internalType":"uint256","name":"buyLiquidityFee","type":"uint256"},{"internalType":"uint256","name":"sellTotalFees","type":"uint256"},{"internalType":"uint256","name":"sellMarketingFee","type":"uint256"},{"internalType":"uint256","name":"sellDevelopmentFee","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":"removeLimits","outputs":[],"stateMutability":"nonpayable","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":[],"name":"setTradingActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"toggleSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"_developmentFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_developmentFeeSell","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateFeesSwapAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"withdrawEth","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff021916908315150217905550604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815250600d600082015181600001556020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c0820151816006015560e082015181600701555050348015620000dd57600080fd5b506040518060400160405280600b81526020017f4d6574612054726176656c0000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d5452564c00000000000000000000000000000000000000000000000000000081525081600390816200015b919062001396565b5080600490816200016d919062001396565b50505060006200018262000dd260201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002dd9190620014e7565b73ffffffffffffffffffffffffffffffffffffffff1663c9c653963060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000347573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036d9190620014e7565b6040518363ffffffff1660e01b81526004016200038c9291906200152a565b6020604051808303816000875af1158015620003ac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003d29190620014e7565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506001601c600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620004936080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff62000dda60201b60201c565b5060006b033b2e3c9fd0803ce800000090506064600282620004b6919062001586565b620004c2919062001600565b6008819055506064600282620004d9919062001586565b620004e5919062001600565b6009819055506064600282620004fc919062001586565b62000508919062001600565b600a8190555061271060058262000520919062001586565b6200052c919062001600565b600b819055506002600d600101819055506000600d600301819055506001600d60020181905550600d60020154600d60030154600d6001015462000571919062001638565b6200057d919062001638565b600d600001819055506003600d600501819055506000600d600701819055506001600d60060181905550600d60060154600d60070154600d60050154620005c5919062001638565b620005d1919062001638565b600d6004018190555073a38ff9fa2a208521bd62387e21c480bd7b7e2e7d600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073eee47417262ed744140c98c44c7577de607035a6600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60006200074e62000e0860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960006200095b62000e0860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160196000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600062000b0e62000e0860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000dcb338262000e3260201b60201c565b5062001796565b600033905090565b600062000dfe62000df062000dd260201b60201c565b848462000fcc60201b60201c565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ea4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e9b90620016d4565b60405180910390fd5b62000ec081600254620010b960201b62001dba1790919060201c565b60028190555062000f1e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620010b960201b62001dba1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000fc0919062001707565b60405180910390a35050565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620010ac919062001707565b60405180910390a3505050565b6000808284620010ca919062001638565b90508381101562001112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620011099062001774565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200119e57607f821691505b602082108103620011b457620011b362001156565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200121e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620011df565b6200122a8683620011df565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062001277620012716200126b8462001242565b6200124c565b62001242565b9050919050565b6000819050919050565b620012938362001256565b620012ab620012a2826200127e565b848454620011ec565b825550505050565b600090565b620012c2620012b3565b620012cf81848462001288565b505050565b5b81811015620012f757620012eb600082620012b8565b600181019050620012d5565b5050565b601f82111562001346576200131081620011ba565b6200131b84620011cf565b810160208510156200132b578190505b620013436200133a85620011cf565b830182620012d4565b50505b505050565b600082821c905092915050565b60006200136b600019846008026200134b565b1980831691505092915050565b600062001386838362001358565b9150826002028217905092915050565b620013a1826200111c565b67ffffffffffffffff811115620013bd57620013bc62001127565b5b620013c9825462001185565b620013d6828285620012fb565b600060209050601f8311600181146200140e5760008415620013f9578287015190505b62001405858262001378565b86555062001475565b601f1984166200141e86620011ba565b60005b82811015620014485784890151825560018201915060208501945060208101905062001421565b8683101562001468578489015162001464601f89168262001358565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620014af8262001482565b9050919050565b620014c181620014a2565b8114620014cd57600080fd5b50565b600081519050620014e181620014b6565b92915050565b6000602082840312156200150057620014ff6200147d565b5b60006200151084828501620014d0565b91505092915050565b6200152481620014a2565b82525050565b600060408201905062001541600083018562001519565b62001550602083018462001519565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620015938262001242565b9150620015a08362001242565b9250828202620015b08162001242565b91508282048414831517620015ca57620015c962001557565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200160d8262001242565b91506200161a8362001242565b9250826200162d576200162c620015d1565b5b828204905092915050565b6000620016458262001242565b9150620016528362001242565b92508282019050808211156200166d576200166c62001557565b5b92915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620016bc601f8362001673565b9150620016c98262001684565b602082019050919050565b60006020820190508181036000830152620016ef81620016ad565b9050919050565b620017018162001242565b82525050565b60006020820190506200171e6000830184620016f6565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200175c601b8362001673565b9150620017698262001724565b602082019050919050565b600060208201905081810360008301526200178f816200174d565b9050919050565b60805160a051614249620017e660003960008181610e160152611854015260008181611d9801528181612f33015281816130140152818161307b01528181613118015261313f01526142496000f3fe6080604052600436106102295760003560e01c80637571336a11610123578063c0246668116100ab578063e16830a81161006f578063e16830a814610843578063ef8700e51461086c578063f2fde38b14610897578063f5b3c3bf146108c0578063f887ea40146108fd57610230565b8063c024666814610759578063c16dd4a414610782578063c18bc195146107ab578063d212a69a146107d4578063dd62ed3e1461080657610230565b8063992c58e4116100f2578063992c58e414610660578063a0ef91df14610689578063a457c2d7146106b4578063a9059cbb146106f1578063b88631151461072e57610230565b80637571336a146105a45780638da5cb5b146105cd57806395d89b41146105f857806396880b171461062357610230565b806323b872dd116101b1578063689729071161017557806368972907146104d15780636ddd17131461050e57806370a0823114610539578063715018a614610576578063751039fc1461058d57610230565b806323b872dd146103c4578063313ce56714610401578063395093511461042c57806349bd5a5e146104695780634fbee1931461049457610230565b806313554854116101f8578063135548541461030357806318160ddd1461031a5780631a8145bb146103455780631c6e8a75146103705780631f3fed8f1461039957610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610928565b60405161025791906132df565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061339a565b6109ba565b60405161029491906133f5565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613410565b6109d8565b6040516102d191906133f5565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061343d565b6109f8565b005b34801561030f57600080fd5b50610318610adf565b005b34801561032657600080fd5b5061032f610bb5565b60405161033c919061348c565b60405180910390f35b34801561035157600080fd5b5061035a610bbf565b604051610367919061348c565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906134d3565b610bc5565b005b3480156103a557600080fd5b506103ae610c79565b6040516103bb919061348c565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613500565b610c7f565b6040516103f891906133f5565b60405180910390f35b34801561040d57600080fd5b50610416610d58565b604051610423919061356f565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e919061339a565b610d61565b60405161046091906133f5565b60405180910390f35b34801561047557600080fd5b5061047e610e14565b60405161048b9190613599565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190613410565b610e38565b6040516104c891906133f5565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906135b4565b610e8e565b60405161050591906133f5565b60405180910390f35b34801561051a57600080fd5b50610523610f37565b60405161053091906133f5565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190613410565b610f4a565b60405161056d919061348c565b60405180910390f35b34801561058257600080fd5b5061058b610f92565b005b34801561059957600080fd5b506105a26110ea565b005b3480156105b057600080fd5b506105cb60048036038101906105c691906135e1565b61119a565b005b3480156105d957600080fd5b506105e261128c565b6040516105ef9190613599565b60405180910390f35b34801561060457600080fd5b5061060d6112b6565b60405161061a91906132df565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190613410565b611348565b60405161065791906133f5565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190613621565b611368565b005b34801561069557600080fd5b5061069e611533565b6040516106ab91906133f5565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061339a565b6115cb565b6040516106e891906133f5565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061339a565b611698565b60405161072591906133f5565b60405180910390f35b34801561073a57600080fd5b506107436116b6565b60405161075091906133f5565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906135e1565b6116c9565b005b34801561078e57600080fd5b506107a960048036038101906107a491906135e1565b6117bb565b005b3480156107b757600080fd5b506107d260048036038101906107cd91906135b4565b61193b565b005b3480156107e057600080fd5b506107e96119fb565b6040516107fd9897969594939291906136ae565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061372c565b611a31565b60405161083a919061348c565b60405180910390f35b34801561084f57600080fd5b5061086a600480360381019061086591906135e1565b611ab8565b005b34801561087857600080fd5b50610881611baa565b60405161088e919061348c565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b99190613410565b611bb0565b005b3480156108cc57600080fd5b506108e760048036038101906108e29190613410565b611d76565b6040516108f491906133f5565b60405180910390f35b34801561090957600080fd5b50610912611d96565b60405161091f91906137cb565b60405180910390f35b60606003805461093790613815565b80601f016020809104026020016040519081016040528092919081815260200182805461096390613815565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b60006109ce6109c7611e18565b8484611e20565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610a00611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8690613892565b60405180910390fd5b6103e882610a9b610bb5565b610aa591906138e1565b610aaf9190613952565b6008819055506103e881610ac1610bb5565b610acb91906138e1565b610ad59190613952565b6009819055505050565b610ae7611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d90613892565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555043601881905550565b6000600254905090565b60165481565b610bcd611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613892565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60155481565b6000610c8c848484611f0b565b610d4d84610c98611e18565b610d48856040518060600160405280602881526020016141ec60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cfe611e18565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e19092919063ffffffff16565b611e20565b600190509392505050565b60006012905090565b6000610e0a610d6e611e18565b84610e058560016000610d7f611e18565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dba90919063ffffffff16565b611e20565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e98611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613892565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f9a611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090613892565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110f2611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890613892565b60405180910390fd5b61118d6103e8806109f8565b6111986103e861193b565b565b6111a2611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890613892565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c590613815565b80601f01602080910402602001604051908101604052809291908181526020018280546112f190613815565b801561133e5780601f106113135761010080835404028352916020019161133e565b820191906000526020600020905b81548152906001019060200180831161132157829003601f168201915b5050505050905090565b601b6020528060005260406000206000915054906101000a900460ff1681565b611370611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613892565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d600101546114399190613983565b6114439190613983565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d600501546114869190613983565b6114909190613983565b600d600401819055506028600d6000015411156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990613a03565b60405180910390fd5b6028600d60040154111561152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290613a03565b60405180910390fd5b505050505050565b600080479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161157f90613a54565b60006040518083038185875af1925050503d80600081146115bc576040519150601f19603f3d011682016040523d82523d6000602084013e6115c1565b606091505b5050809250505090565b600061168e6115d8611e18565b84611689856040518060600160405280602581526020016141a16025913960016000611602611e18565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e19092919063ffffffff16565b611e20565b6001905092915050565b60006116ac6116a5611e18565b8484611f0b565b6001905092915050565b600c60029054906101000a900460ff1681565b6116d1611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613892565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117c3611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990613892565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613adb565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611943611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990613892565b60405180910390fd5b6103e8816119de610bb5565b6119e891906138e1565b6119f29190613952565b600a8190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac0611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690613892565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611bb8611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613892565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90613b6d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000808284611dc99190613983565b905083811015611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590613bd9565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611efe919061348c565b60405180910390a3505050565b60008103611f2457611f1f83836000612945565b6128dc565b611f2c61128c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f9a5750611f6a61128c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fb35750600c60029054906101000a900460ff16155b1561233957600c60009054906101000a900460ff166120ad57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061206d5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390613c45565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121505750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561219f5760085481111561219a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219190613cd7565b60405180910390fd5b61228e565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122425750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561228d5760095481111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390613d69565b60405180910390fd5b5b5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661233857600a546122eb83610f4a565b826122f69190613983565b1115612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232e90613dd5565b60405180910390fd5b5b5b600061234430610f4a565b90506000600b5482101590508080156123695750600c60019054906101000a900460ff165b80156123825750600c60029054906101000a900460ff16155b80156123d75750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561242d5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124835750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124c8576001600c60026101000a81548160ff0219169083151502179055506124ac84612aef565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061257e5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561258857600090505b80156128cd57600060185443101561262a576125c160646125b3606388612d8690919063ffffffff16565b612e0090919063ffffffff16565b90506063605e826125d291906138e1565b6125dc9190613952565b601560008282546125ed9190613983565b92505081905550606360058261260391906138e1565b61260d9190613952565b6017600082825461261e9190613983565b925050819055506128a8565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561268857506000600d60040154115b1561276a576126b860646126aa600d6004015488612d8690919063ffffffff16565b612e0090919063ffffffff16565b9050600d60040154600d60070154826126d191906138e1565b6126db9190613952565b601660008282546126ec9190613983565b92505081905550600d60040154600d600501548261270a91906138e1565b6127149190613952565b601560008282546127259190613983565b92505081905550600d60040154600d600601548261274391906138e1565b61274d9190613952565b6017600082825461275e9190613983565b925050819055506128a7565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127c857506000600d60000154115b156128a6576127f860646127ea600d6000015488612d8690919063ffffffff16565b612e0090919063ffffffff16565b9050600d60000154600d600301548261281191906138e1565b61281b9190613952565b6016600082825461282c9190613983565b92505081905550600d60000154600d600101548261284a91906138e1565b6128549190613952565b601560008282546128659190613983565b92505081905550600d60000154600d600201548261288391906138e1565b61288d9190613952565b6017600082825461289e9190613983565b925050819055505b5b5b60008111156128bd576128bc873083612945565b5b80856128c99190613df5565b9450505b6128d8868686612945565b5050505b505050565b6000838311158290612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292091906132df565b60405180910390fd5b50600083856129389190613df5565b9050809150509392505050565b6129b0816040518060600160405280602681526020016141c6602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e19092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a43816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dba90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ae2919061348c565b60405180910390a3505050565b6000612afa30610f4a565b90506000601754601554601654612b119190613983565b612b1b9190613983565b905060008203612b2c575050612d83565b6028600b54612b3b91906138e1565b821115612b54576028600b54612b5191906138e1565b91505b600060028260165485612b6791906138e1565b612b719190613952565b612b7b9190613952565b90506000612b928285612e4a90919063ffffffff16565b90506000479050612ba38683612e94565b6000612bb88247612e4a90919063ffffffff16565b90506000612be386612bd560155485612d8690919063ffffffff16565b612e0090919063ffffffff16565b90506000612c0e87612c0060175486612d8690919063ffffffff16565b612e0090919063ffffffff16565b905060008183612c1e9190613983565b84612c299190613df5565b9050600060168190555060006015819055506000601781905550600087118015612c535750600081115b15612c9c57612c628782613112565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612c93929190613e29565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8447612ce49190613df5565b9081150290604051600060405180830381858888f19350505050158015612d0f573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612d78573d6000803e3d6000fd5b505050505050505050505b50565b6000808303612d985760009050612dfa565b60008284612da691906138e1565b9050828482612db59190613952565b14612df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dec90613ec4565b60405180910390fd5b809150505b92915050565b6000612e4283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131ec565b905092915050565b6000612e8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128e1565b905092915050565b6000600267ffffffffffffffff811115612eb157612eb0613ee4565b5b604051908082528060200260200182016040528015612edf5781602001602082028036833780820191505090505b5090503081600081518110612ef757612ef6613f13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc09190613f57565b81600181518110612fd457612fd3613f13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613039307f000000000000000000000000000000000000000000000000000000000000000084611e20565b61307983600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a76400008561307491906138e1565b611e20565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130db95949392919061407d565b600060405180830381600087803b1580156130f557600080fd5b505af1158015613109573d6000803e3d6000fd5b50505050505050565b61313d307f000000000000000000000000000000000000000000000000000000000000000084611e20565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016131a2969594939291906140d7565b60606040518083038185885af11580156131c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e5919061414d565b5050505050565b60008083118290613233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322a91906132df565b60405180910390fd5b50600083856132429190613952565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561328957808201518184015260208101905061326e565b60008484015250505050565b6000601f19601f8301169050919050565b60006132b18261324f565b6132bb818561325a565b93506132cb81856020860161326b565b6132d481613295565b840191505092915050565b600060208201905081810360008301526132f981846132a6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061333182613306565b9050919050565b61334181613326565b811461334c57600080fd5b50565b60008135905061335e81613338565b92915050565b6000819050919050565b61337781613364565b811461338257600080fd5b50565b6000813590506133948161336e565b92915050565b600080604083850312156133b1576133b0613301565b5b60006133bf8582860161334f565b92505060206133d085828601613385565b9150509250929050565b60008115159050919050565b6133ef816133da565b82525050565b600060208201905061340a60008301846133e6565b92915050565b60006020828403121561342657613425613301565b5b60006134348482850161334f565b91505092915050565b6000806040838503121561345457613453613301565b5b600061346285828601613385565b925050602061347385828601613385565b9150509250929050565b61348681613364565b82525050565b60006020820190506134a1600083018461347d565b92915050565b6134b0816133da565b81146134bb57600080fd5b50565b6000813590506134cd816134a7565b92915050565b6000602082840312156134e9576134e8613301565b5b60006134f7848285016134be565b91505092915050565b60008060006060848603121561351957613518613301565b5b60006135278682870161334f565b93505060206135388682870161334f565b925050604061354986828701613385565b9150509250925092565b600060ff82169050919050565b61356981613553565b82525050565b60006020820190506135846000830184613560565b92915050565b61359381613326565b82525050565b60006020820190506135ae600083018461358a565b92915050565b6000602082840312156135ca576135c9613301565b5b60006135d884828501613385565b91505092915050565b600080604083850312156135f8576135f7613301565b5b60006136068582860161334f565b9250506020613617858286016134be565b9150509250929050565b60008060008060008060c0878903121561363e5761363d613301565b5b600061364c89828a01613385565b965050602061365d89828a01613385565b955050604061366e89828a01613385565b945050606061367f89828a01613385565b935050608061369089828a01613385565b92505060a06136a189828a01613385565b9150509295509295509295565b6000610100820190506136c4600083018b61347d565b6136d1602083018a61347d565b6136de604083018961347d565b6136eb606083018861347d565b6136f8608083018761347d565b61370560a083018661347d565b61371260c083018561347d565b61371f60e083018461347d565b9998505050505050505050565b6000806040838503121561374357613742613301565b5b60006137518582860161334f565b92505060206137628582860161334f565b9150509250929050565b6000819050919050565b600061379161378c61378784613306565b61376c565b613306565b9050919050565b60006137a382613776565b9050919050565b60006137b582613798565b9050919050565b6137c5816137aa565b82525050565b60006020820190506137e060008301846137bc565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061382d57607f821691505b6020821081036138405761383f6137e6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061387c60208361325a565b915061388782613846565b602082019050919050565b600060208201905081810360008301526138ab8161386f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138ec82613364565b91506138f783613364565b925082820261390581613364565b9150828204841483151761391c5761391b6138b2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061395d82613364565b915061396883613364565b92508261397857613977613923565b5b828204905092915050565b600061398e82613364565b915061399983613364565b92508282019050808211156139b1576139b06138b2565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b60006139ed601d8361325a565b91506139f8826139b7565b602082019050919050565b60006020820190508181036000830152613a1c816139e0565b9050919050565b600081905092915050565b50565b6000613a3e600083613a23565b9150613a4982613a2e565b600082019050919050565b6000613a5f82613a31565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613ac5602a8361325a565b9150613ad082613a69565b604082019050919050565b60006020820190508181036000830152613af481613ab8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b5760268361325a565b9150613b6282613afb565b604082019050919050565b60006020820190508181036000830152613b8681613b4a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613bc3601b8361325a565b9150613bce82613b8d565b602082019050919050565b60006020820190508181036000830152613bf281613bb6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613c2f60168361325a565b9150613c3a82613bf9565b602082019050919050565b60006020820190508181036000830152613c5e81613c22565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613cc160358361325a565b9150613ccc82613c65565b604082019050919050565b60006020820190508181036000830152613cf081613cb4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613d5360368361325a565b9150613d5e82613cf7565b604082019050919050565b60006020820190508181036000830152613d8281613d46565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613dbf60138361325a565b9150613dca82613d89565b602082019050919050565b60006020820190508181036000830152613dee81613db2565b9050919050565b6000613e0082613364565b9150613e0b83613364565b9250828203905081811115613e2357613e226138b2565b5b92915050565b6000604082019050613e3e600083018561347d565b613e4b602083018461347d565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613eae60218361325a565b9150613eb982613e52565b604082019050919050565b60006020820190508181036000830152613edd81613ea1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613f5181613338565b92915050565b600060208284031215613f6d57613f6c613301565b5b6000613f7b84828501613f42565b91505092915050565b6000819050919050565b6000613fa9613fa4613f9f84613f84565b61376c565b613364565b9050919050565b613fb981613f8e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ff481613326565b82525050565b60006140068383613feb565b60208301905092915050565b6000602082019050919050565b600061402a82613fbf565b6140348185613fca565b935061403f83613fdb565b8060005b838110156140705781516140578882613ffa565b975061406283614012565b925050600181019050614043565b5085935050505092915050565b600060a082019050614092600083018861347d565b61409f6020830187613fb0565b81810360408301526140b1818661401f565b90506140c0606083018561358a565b6140cd608083018461347d565b9695505050505050565b600060c0820190506140ec600083018961358a565b6140f9602083018861347d565b6141066040830187613fb0565b6141136060830186613fb0565b614120608083018561358a565b61412d60a083018461347d565b979650505050505050565b6000815190506141478161336e565b92915050565b60008060006060848603121561416657614165613301565b5b600061417486828701614138565b935050602061418586828701614138565b925050604061419686828701614138565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122003157a91dcc1456342f59026f54b67418f851465b089cf9324e260ce6f502ea664736f6c63430008120033

Deployed Bytecode

0x6080604052600436106102295760003560e01c80637571336a11610123578063c0246668116100ab578063e16830a81161006f578063e16830a814610843578063ef8700e51461086c578063f2fde38b14610897578063f5b3c3bf146108c0578063f887ea40146108fd57610230565b8063c024666814610759578063c16dd4a414610782578063c18bc195146107ab578063d212a69a146107d4578063dd62ed3e1461080657610230565b8063992c58e4116100f2578063992c58e414610660578063a0ef91df14610689578063a457c2d7146106b4578063a9059cbb146106f1578063b88631151461072e57610230565b80637571336a146105a45780638da5cb5b146105cd57806395d89b41146105f857806396880b171461062357610230565b806323b872dd116101b1578063689729071161017557806368972907146104d15780636ddd17131461050e57806370a0823114610539578063715018a614610576578063751039fc1461058d57610230565b806323b872dd146103c4578063313ce56714610401578063395093511461042c57806349bd5a5e146104695780634fbee1931461049457610230565b806313554854116101f8578063135548541461030357806318160ddd1461031a5780631a8145bb146103455780631c6e8a75146103705780631f3fed8f1461039957610230565b806306fdde0314610235578063095ea7b31461026057806310d5de531461029d57806311a582c3146102da57610230565b3661023057005b600080fd5b34801561024157600080fd5b5061024a610928565b60405161025791906132df565b60405180910390f35b34801561026c57600080fd5b506102876004803603810190610282919061339a565b6109ba565b60405161029491906133f5565b60405180910390f35b3480156102a957600080fd5b506102c460048036038101906102bf9190613410565b6109d8565b6040516102d191906133f5565b60405180910390f35b3480156102e657600080fd5b5061030160048036038101906102fc919061343d565b6109f8565b005b34801561030f57600080fd5b50610318610adf565b005b34801561032657600080fd5b5061032f610bb5565b60405161033c919061348c565b60405180910390f35b34801561035157600080fd5b5061035a610bbf565b604051610367919061348c565b60405180910390f35b34801561037c57600080fd5b50610397600480360381019061039291906134d3565b610bc5565b005b3480156103a557600080fd5b506103ae610c79565b6040516103bb919061348c565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613500565b610c7f565b6040516103f891906133f5565b60405180910390f35b34801561040d57600080fd5b50610416610d58565b604051610423919061356f565b60405180910390f35b34801561043857600080fd5b50610453600480360381019061044e919061339a565b610d61565b60405161046091906133f5565b60405180910390f35b34801561047557600080fd5b5061047e610e14565b60405161048b9190613599565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b69190613410565b610e38565b6040516104c891906133f5565b60405180910390f35b3480156104dd57600080fd5b506104f860048036038101906104f391906135b4565b610e8e565b60405161050591906133f5565b60405180910390f35b34801561051a57600080fd5b50610523610f37565b60405161053091906133f5565b60405180910390f35b34801561054557600080fd5b50610560600480360381019061055b9190613410565b610f4a565b60405161056d919061348c565b60405180910390f35b34801561058257600080fd5b5061058b610f92565b005b34801561059957600080fd5b506105a26110ea565b005b3480156105b057600080fd5b506105cb60048036038101906105c691906135e1565b61119a565b005b3480156105d957600080fd5b506105e261128c565b6040516105ef9190613599565b60405180910390f35b34801561060457600080fd5b5061060d6112b6565b60405161061a91906132df565b60405180910390f35b34801561062f57600080fd5b5061064a60048036038101906106459190613410565b611348565b60405161065791906133f5565b60405180910390f35b34801561066c57600080fd5b5061068760048036038101906106829190613621565b611368565b005b34801561069557600080fd5b5061069e611533565b6040516106ab91906133f5565b60405180910390f35b3480156106c057600080fd5b506106db60048036038101906106d6919061339a565b6115cb565b6040516106e891906133f5565b60405180910390f35b3480156106fd57600080fd5b506107186004803603810190610713919061339a565b611698565b60405161072591906133f5565b60405180910390f35b34801561073a57600080fd5b506107436116b6565b60405161075091906133f5565b60405180910390f35b34801561076557600080fd5b50610780600480360381019061077b91906135e1565b6116c9565b005b34801561078e57600080fd5b506107a960048036038101906107a491906135e1565b6117bb565b005b3480156107b757600080fd5b506107d260048036038101906107cd91906135b4565b61193b565b005b3480156107e057600080fd5b506107e96119fb565b6040516107fd9897969594939291906136ae565b60405180910390f35b34801561081257600080fd5b5061082d6004803603810190610828919061372c565b611a31565b60405161083a919061348c565b60405180910390f35b34801561084f57600080fd5b5061086a600480360381019061086591906135e1565b611ab8565b005b34801561087857600080fd5b50610881611baa565b60405161088e919061348c565b60405180910390f35b3480156108a357600080fd5b506108be60048036038101906108b99190613410565b611bb0565b005b3480156108cc57600080fd5b506108e760048036038101906108e29190613410565b611d76565b6040516108f491906133f5565b60405180910390f35b34801561090957600080fd5b50610912611d96565b60405161091f91906137cb565b60405180910390f35b60606003805461093790613815565b80601f016020809104026020016040519081016040528092919081815260200182805461096390613815565b80156109b05780601f10610985576101008083540402835291602001916109b0565b820191906000526020600020905b81548152906001019060200180831161099357829003601f168201915b5050505050905090565b60006109ce6109c7611e18565b8484611e20565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b610a00611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8690613892565b60405180910390fd5b6103e882610a9b610bb5565b610aa591906138e1565b610aaf9190613952565b6008819055506103e881610ac1610bb5565b610acb91906138e1565b610ad59190613952565b6009819055505050565b610ae7611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d90613892565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff02191690831515021790555043601881905550565b6000600254905090565b60165481565b610bcd611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5390613892565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b60155481565b6000610c8c848484611f0b565b610d4d84610c98611e18565b610d48856040518060600160405280602881526020016141ec60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cfe611e18565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e19092919063ffffffff16565b611e20565b600190509392505050565b60006012905090565b6000610e0a610d6e611e18565b84610e058560016000610d7f611e18565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dba90919063ffffffff16565b611e20565b6001905092915050565b7f00000000000000000000000046ecb8b7955bc0c688b545296e255680d8307b4981565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000610e98611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90613892565b60405180910390fd5b81600b8190555060019050919050565b600c60019054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f9a611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611029576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102090613892565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6110f2611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611181576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117890613892565b60405180910390fd5b61118d6103e8806109f8565b6111986103e861193b565b565b6111a2611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890613892565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546112c590613815565b80601f01602080910402602001604051908101604052809291908181526020018280546112f190613815565b801561133e5780601f106113135761010080835404028352916020019161133e565b820191906000526020600020905b81548152906001019060200180831161132157829003601f168201915b5050505050905090565b601b6020528060005260406000206000915054906101000a900460ff1681565b611370611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f690613892565b60405180910390fd5b85600d6001018190555084600d6003018190555083600d60020181905550600d60020154600d60030154600d600101546114399190613983565b6114439190613983565b600d6000018190555082600d6005018190555081600d6007018190555080600d60060181905550600d60060154600d60070154600d600501546114869190613983565b6114909190613983565b600d600401819055506028600d6000015411156114e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d990613a03565b60405180910390fd5b6028600d60040154111561152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290613a03565b60405180910390fd5b505050505050565b600080479050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161157f90613a54565b60006040518083038185875af1925050503d80600081146115bc576040519150601f19603f3d011682016040523d82523d6000602084013e6115c1565b606091505b5050809250505090565b600061168e6115d8611e18565b84611689856040518060600160405280602581526020016141a16025913960016000611602611e18565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e19092919063ffffffff16565b611e20565b6001905092915050565b60006116ac6116a5611e18565b8484611f0b565b6001905092915050565b600c60029054906101000a900460ff1681565b6116d1611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175790613892565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117c3611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990613892565b60405180910390fd5b7f00000000000000000000000046ecb8b7955bc0c688b545296e255680d8307b4973ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118d790613adb565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611943611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c990613892565b60405180910390fd5b6103e8816119de610bb5565b6119e891906138e1565b6119f29190613952565b600a8190555050565b600d8060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ac0611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4690613892565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60175481565b611bb8611e18565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3e90613892565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90613b6d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601c6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000808284611dc99190613983565b905083811015611e0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0590613bd9565b60405180910390fd5b8091505092915050565b600033905090565b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611efe919061348c565b60405180910390a3505050565b60008103611f2457611f1f83836000612945565b6128dc565b611f2c61128c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611f9a5750611f6a61128c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611fb35750600c60029054906101000a900460ff16155b1561233957600c60009054906101000a900460ff166120ad57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061206d5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6120ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a390613c45565b60405180910390fd5b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121505750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561219f5760085481111561219a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219190613cd7565b60405180910390fd5b61228e565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156122425750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561228d5760095481111561228c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228390613d69565b60405180910390fd5b5b5b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661233857600a546122eb83610f4a565b826122f69190613983565b1115612337576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232e90613dd5565b60405180910390fd5b5b5b600061234430610f4a565b90506000600b5482101590508080156123695750600c60019054906101000a900460ff165b80156123825750600c60029054906101000a900460ff16155b80156123d75750601c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b801561242d5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156124835750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156124c8576001600c60026101000a81548160ff0219169083151502179055506124ac84612aef565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061257e5750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561258857600090505b80156128cd57600060185443101561262a576125c160646125b3606388612d8690919063ffffffff16565b612e0090919063ffffffff16565b90506063605e826125d291906138e1565b6125dc9190613952565b601560008282546125ed9190613983565b92505081905550606360058261260391906138e1565b61260d9190613952565b6017600082825461261e9190613983565b925050819055506128a8565b601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561268857506000600d60040154115b1561276a576126b860646126aa600d6004015488612d8690919063ffffffff16565b612e0090919063ffffffff16565b9050600d60040154600d60070154826126d191906138e1565b6126db9190613952565b601660008282546126ec9190613983565b92505081905550600d60040154600d600501548261270a91906138e1565b6127149190613952565b601560008282546127259190613983565b92505081905550600d60040154600d600601548261274391906138e1565b61274d9190613952565b6017600082825461275e9190613983565b925050819055506128a7565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156127c857506000600d60000154115b156128a6576127f860646127ea600d6000015488612d8690919063ffffffff16565b612e0090919063ffffffff16565b9050600d60000154600d600301548261281191906138e1565b61281b9190613952565b6016600082825461282c9190613983565b92505081905550600d60000154600d600101548261284a91906138e1565b6128549190613952565b601560008282546128659190613983565b92505081905550600d60000154600d600201548261288391906138e1565b61288d9190613952565b6017600082825461289e9190613983565b925050819055505b5b5b60008111156128bd576128bc873083612945565b5b80856128c99190613df5565b9450505b6128d8868686612945565b5050505b505050565b6000838311158290612929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292091906132df565b60405180910390fd5b50600083856129389190613df5565b9050809150509392505050565b6129b0816040518060600160405280602681526020016141c6602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e19092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a43816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611dba90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612ae2919061348c565b60405180910390a3505050565b6000612afa30610f4a565b90506000601754601554601654612b119190613983565b612b1b9190613983565b905060008203612b2c575050612d83565b6028600b54612b3b91906138e1565b821115612b54576028600b54612b5191906138e1565b91505b600060028260165485612b6791906138e1565b612b719190613952565b612b7b9190613952565b90506000612b928285612e4a90919063ffffffff16565b90506000479050612ba38683612e94565b6000612bb88247612e4a90919063ffffffff16565b90506000612be386612bd560155485612d8690919063ffffffff16565b612e0090919063ffffffff16565b90506000612c0e87612c0060175486612d8690919063ffffffff16565b612e0090919063ffffffff16565b905060008183612c1e9190613983565b84612c299190613df5565b9050600060168190555060006015819055506000601781905550600087118015612c535750600081115b15612c9c57612c628782613112565b7f28fc98272ce761178794ad6768050fea1648e07f1e2ffe15afd3a290f83814868682604051612c93929190613e29565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8447612ce49190613df5565b9081150290604051600060405180830381858888f19350505050158015612d0f573d6000803e3d6000fd5b50600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612d78573d6000803e3d6000fd5b505050505050505050505b50565b6000808303612d985760009050612dfa565b60008284612da691906138e1565b9050828482612db59190613952565b14612df5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dec90613ec4565b60405180910390fd5b809150505b92915050565b6000612e4283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506131ec565b905092915050565b6000612e8c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506128e1565b905092915050565b6000600267ffffffffffffffff811115612eb157612eb0613ee4565b5b604051908082528060200260200182016040528015612edf5781602001602082028036833780820191505090505b5090503081600081518110612ef757612ef6613f13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc09190613f57565b81600181518110612fd457612fd3613f13565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613039307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e20565b61307983600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16670de0b6b3a76400008561307491906138e1565b611e20565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016130db95949392919061407d565b600060405180830381600087803b1580156130f557600080fd5b505af1158015613109573d6000803e3d6000fd5b50505050505050565b61313d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611e20565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b81526004016131a2969594939291906140d7565b60606040518083038185885af11580156131c0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131e5919061414d565b5050505050565b60008083118290613233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161322a91906132df565b60405180910390fd5b50600083856132429190613952565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561328957808201518184015260208101905061326e565b60008484015250505050565b6000601f19601f8301169050919050565b60006132b18261324f565b6132bb818561325a565b93506132cb81856020860161326b565b6132d481613295565b840191505092915050565b600060208201905081810360008301526132f981846132a6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061333182613306565b9050919050565b61334181613326565b811461334c57600080fd5b50565b60008135905061335e81613338565b92915050565b6000819050919050565b61337781613364565b811461338257600080fd5b50565b6000813590506133948161336e565b92915050565b600080604083850312156133b1576133b0613301565b5b60006133bf8582860161334f565b92505060206133d085828601613385565b9150509250929050565b60008115159050919050565b6133ef816133da565b82525050565b600060208201905061340a60008301846133e6565b92915050565b60006020828403121561342657613425613301565b5b60006134348482850161334f565b91505092915050565b6000806040838503121561345457613453613301565b5b600061346285828601613385565b925050602061347385828601613385565b9150509250929050565b61348681613364565b82525050565b60006020820190506134a1600083018461347d565b92915050565b6134b0816133da565b81146134bb57600080fd5b50565b6000813590506134cd816134a7565b92915050565b6000602082840312156134e9576134e8613301565b5b60006134f7848285016134be565b91505092915050565b60008060006060848603121561351957613518613301565b5b60006135278682870161334f565b93505060206135388682870161334f565b925050604061354986828701613385565b9150509250925092565b600060ff82169050919050565b61356981613553565b82525050565b60006020820190506135846000830184613560565b92915050565b61359381613326565b82525050565b60006020820190506135ae600083018461358a565b92915050565b6000602082840312156135ca576135c9613301565b5b60006135d884828501613385565b91505092915050565b600080604083850312156135f8576135f7613301565b5b60006136068582860161334f565b9250506020613617858286016134be565b9150509250929050565b60008060008060008060c0878903121561363e5761363d613301565b5b600061364c89828a01613385565b965050602061365d89828a01613385565b955050604061366e89828a01613385565b945050606061367f89828a01613385565b935050608061369089828a01613385565b92505060a06136a189828a01613385565b9150509295509295509295565b6000610100820190506136c4600083018b61347d565b6136d1602083018a61347d565b6136de604083018961347d565b6136eb606083018861347d565b6136f8608083018761347d565b61370560a083018661347d565b61371260c083018561347d565b61371f60e083018461347d565b9998505050505050505050565b6000806040838503121561374357613742613301565b5b60006137518582860161334f565b92505060206137628582860161334f565b9150509250929050565b6000819050919050565b600061379161378c61378784613306565b61376c565b613306565b9050919050565b60006137a382613776565b9050919050565b60006137b582613798565b9050919050565b6137c5816137aa565b82525050565b60006020820190506137e060008301846137bc565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061382d57607f821691505b6020821081036138405761383f6137e6565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061387c60208361325a565b915061388782613846565b602082019050919050565b600060208201905081810360008301526138ab8161386f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006138ec82613364565b91506138f783613364565b925082820261390581613364565b9150828204841483151761391c5761391b6138b2565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061395d82613364565b915061396883613364565b92508261397857613977613923565b5b828204905092915050565b600061398e82613364565b915061399983613364565b92508282019050808211156139b1576139b06138b2565b5b92915050565b7f4d757374206b656570206665657320617420343025206f72206c657373000000600082015250565b60006139ed601d8361325a565b91506139f8826139b7565b602082019050919050565b60006020820190508181036000830152613a1c816139e0565b9050919050565b600081905092915050565b50565b6000613a3e600083613a23565b9150613a4982613a2e565b600082019050919050565b6000613a5f82613a31565b9150819050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d61726b65745061697200000000000000000000000000000000000000000000602082015250565b6000613ac5602a8361325a565b9150613ad082613a69565b604082019050919050565b60006020820190508181036000830152613af481613ab8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b5760268361325a565b9150613b6282613afb565b604082019050919050565b60006020820190508181036000830152613b8681613b4a565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613bc3601b8361325a565b9150613bce82613b8d565b602082019050919050565b60006020820190508181036000830152613bf281613bb6565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613c2f60168361325a565b9150613c3a82613bf9565b602082019050919050565b60006020820190508181036000830152613c5e81613c22565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613cc160358361325a565b9150613ccc82613c65565b604082019050919050565b60006020820190508181036000830152613cf081613cb4565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000613d5360368361325a565b9150613d5e82613cf7565b604082019050919050565b60006020820190508181036000830152613d8281613d46565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000613dbf60138361325a565b9150613dca82613d89565b602082019050919050565b60006020820190508181036000830152613dee81613db2565b9050919050565b6000613e0082613364565b9150613e0b83613364565b9250828203905081811115613e2357613e226138b2565b5b92915050565b6000604082019050613e3e600083018561347d565b613e4b602083018461347d565b9392505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000613eae60218361325a565b9150613eb982613e52565b604082019050919050565b60006020820190508181036000830152613edd81613ea1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050613f5181613338565b92915050565b600060208284031215613f6d57613f6c613301565b5b6000613f7b84828501613f42565b91505092915050565b6000819050919050565b6000613fa9613fa4613f9f84613f84565b61376c565b613364565b9050919050565b613fb981613f8e565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613ff481613326565b82525050565b60006140068383613feb565b60208301905092915050565b6000602082019050919050565b600061402a82613fbf565b6140348185613fca565b935061403f83613fdb565b8060005b838110156140705781516140578882613ffa565b975061406283614012565b925050600181019050614043565b5085935050505092915050565b600060a082019050614092600083018861347d565b61409f6020830187613fb0565b81810360408301526140b1818661401f565b90506140c0606083018561358a565b6140cd608083018461347d565b9695505050505050565b600060c0820190506140ec600083018961358a565b6140f9602083018861347d565b6141066040830187613fb0565b6141136060830186613fb0565b614120608083018561358a565b61412d60a083018461347d565b979650505050505050565b6000815190506141478161336e565b92915050565b60008060006060848603121561416657614165613301565b5b600061417486828701614138565b935050602061418586828701614138565b925050604061419686828701614138565b915050925092509256fe45524332303a206465637265617365642063616e6e6f742062652062656c6f77207a65726f45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122003157a91dcc1456342f59026f54b67418f851465b089cf9324e260ce6f502ea664736f6c63430008120033

Deployed Bytecode Sourcemap

20905:13336:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6648:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22327:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25775:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25405:144;;;;;;;;;;;;;:::i;:::-;;5605:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22105:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26239:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22065:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7298:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5448:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8061:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21041:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28037:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25619:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21414:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5775:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13585:148;;;;;;;;;;;;;:::i;:::-;;27694:129;;;;;;;;;;;;;:::i;:::-;;27542:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12944:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4706:103;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22397:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26348:896;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34052:186;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8781:268;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6114:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21452:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27256:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27831:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25997:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21789:267;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;;;;;;;;6351:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27390:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22145:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13888:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22613:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20992;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4488:99;4541:13;4574:5;4567:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:99;:::o;6648:168::-;6730:4;6747:39;6756:12;:10;:12::i;:::-;6770:7;6779:6;6747:8;:39::i;:::-;6804:4;6797:11;;6648:168;;;;:::o;22327:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;25775:214::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25915:4:::1;25902:9;25886:13;:11;:13::i;:::-;:25;;;;:::i;:::-;25885:34;;;;:::i;:::-;25870:12;:49;;;;25977:4;25963:10;25947:13;:11;:13::i;:::-;:26;;;;:::i;:::-;25946:35;;;;:::i;:::-;25930:13;:51;;;;25775:214:::0;;:::o;25405:144::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25475:4:::1;25463:9;;:16;;;;;;;;;;;;;;;;;;25504:4;25490:11;;:18;;;;;;;;;;;;;;;;;;25529:12;25519:7;:22;;;;25405:144::o:0;5605:107::-;5665:7;5692:12;;5685:19;;5605:107;:::o;22105:33::-;;;;:::o;26239:101::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26325:7:::1;26311:11;;:21;;;;;;;;;;;;;;;;;;26239:101:::0;:::o;22065:33::-;;;;:::o;7298:354::-;7437:4;7454:36;7464:6;7472:9;7483:6;7454:9;:36::i;:::-;7501:121;7510:6;7518:12;:10;:12::i;:::-;7532:89;7570:6;7532:89;;;;;;;;;;;;;;;;;:11;:19;7544:6;7532:19;;;;;;;;;;;;;;;:33;7552:12;:10;:12::i;:::-;7532:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;7501:8;:121::i;:::-;7640:4;7633:11;;7298:354;;;;;:::o;5448:92::-;5505:5;5530:2;5523:9;;5448:92;:::o;8061:217::-;8148:4;8165:83;8174:12;:10;:12::i;:::-;8188:7;8197:50;8236:10;8197:11;:25;8209:12;:10;:12::i;:::-;8197:25;;;;;;;;;;;;;;;:34;8223:7;8197:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;8165:8;:83::i;:::-;8266:4;8259:11;;8061:217;;;;:::o;21041:38::-;;;:::o;28037:121::-;28102:4;28126:15;:24;28142:7;28126:24;;;;;;;;;;;;;;;;;;;;;;;;;28119:31;;28037:121;;;:::o;25619:148::-;25695:4;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25728:9:::1;25711:14;:26;;;;25755:4;25748:11;;25619:148:::0;;;:::o;21414:31::-;;;;;;;;;;;;;:::o;5775:126::-;5848:7;5875:9;:18;5885:7;5875:18;;;;;;;;;;;;;;;;5868:25;;5775:126;;;:::o;13585:148::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13692:1:::1;13655:40;;13676:6;;;;;;;;;;;13655:40;;;;;;;;;;;;13723:1;13706:6;;:19;;;;;;;;;;;;;;;;;;13585:148::o:0;27694:129::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27748:29:::1;27767:4;27772::::0;27748:18:::1;:29::i;:::-;27788:27;27810:4;27788:21;:27::i;:::-;27694:129::o:0;27542:144::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27674:4:::1;27632:31;:39;27664:6;27632:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27542:144:::0;;:::o;12944:78::-;12981:7;13008:6;;;;;;;;;;;13001:13;;12944:78;:::o;4706:103::-;4761:13;4794:7;4787:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4706:103;:::o;22397:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;26348:896::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26581:16:::1;26557:5;:21;;:40;;;;26632:16;26608:5;:21;;:40;;;;26685:18;26659:5;:23;;:44;;;;26783:5;:23;;;26759:5;:21;;;26735:5;:21;;;:45;;;;:::i;:::-;:71;;;;:::i;:::-;26714:5;:18;;:92;;;;26844:17;26819:5;:22;;:42;;;;26897:17;26872:5;:22;;:42;;;;26952:19;26925:5;:24;;:46;;;;27054:5;:24;;;27029:5;:22;;;27004:5;:22;;;:47;;;;:::i;:::-;:74;;;;:::i;:::-;26982:5;:19;;:96;;;;27119:2;27097:5;:18;;;:24;;27089:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27200:2;27177:5;:19;;;:25;;27169:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26348:896:::0;;;;;;:::o;34052:186::-;34093:12;34118:15;34136:21;34118:39;;34189:15;;;;;;;;;;;34181:29;;34218:7;34181:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34168:62;;;;;34107:131;34052:186;:::o;8781:268::-;8873:4;8890:129;8899:12;:10;:12::i;:::-;8913:7;8922:96;8961:15;8922:96;;;;;;;;;;;;;;;;;:11;:25;8934:12;:10;:12::i;:::-;8922:25;;;;;;;;;;;;;;;:34;8948:7;8922:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;8890:8;:129::i;:::-;9037:4;9030:11;;8781:268;;;;:::o;6114:174::-;6199:4;6216:42;6226:12;:10;:12::i;:::-;6240:9;6251:6;6216:9;:42::i;:::-;6276:4;6269:11;;6114:174;;;;:::o;21452:22::-;;;;;;;;;;;;;:::o;27256:128::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27368:8:::1;27341:15;:24;27357:7;27341:24;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;27256:128:::0;;:::o;27831:196::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27924:13:::1;27916:21;;:4;:21;;::::0;27908:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;28014:5;27995:10;:16;28006:4;27995:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;27831:196:::0;;:::o;25997:146::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26131:4:::1;26114:13;26098;:11;:13::i;:::-;:29;;;;:::i;:::-;26097:38;;;;:::i;:::-;26079:15;:56;;;;25997:146:::0;:::o;21789:267::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;6351:150::-;6439:7;6466:11;:18;6478:5;6466:18;;;;;;;;;;;;;;;:27;6485:7;6466:27;;;;;;;;;;;;;;;;6459:34;;6351:150;;;;:::o;27390:146::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27520:8:::1;27482:26;:35;27509:7;27482:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27390:146:::0;;:::o;22145:35::-;;;;:::o;13888:244::-;13165:12;:10;:12::i;:::-;13155:22;;:6;;;;;;;;;;;:22;;;13147:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13997:1:::1;13977:22;;:8;:22;;::::0;13969:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;14087:8;14058:38;;14079:6;;;;;;;;;;;14058:38;;;;;;;;;;;;14116:8;14107:6;;:17;;;;;;;;;;;;;;;;;;13888:244:::0;:::o;22613:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;20992:::-;;;:::o;11209:180::-;11266:7;11286:9;11302:1;11298;:5;;;;:::i;:::-;11286:17;;11327:1;11322;:6;;11314:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;11380:1;11373:8;;;11209:180;;;;:::o;3560:97::-;3612:7;3639:10;3632:17;;3560:97;:::o;10944:220::-;11102:6;11072:11;:18;11084:5;11072:18;;;;;;;;;;;;;;;:27;11091:7;11072:27;;;;;;;;;;;;;;;:36;;;;11140:7;11124:32;;11133:5;11124:32;;;11149:6;11124:32;;;;;;:::i;:::-;;;;;;;;10944:220;;;:::o;28166:3297::-;28323:1;28313:6;:11;28309:102;;28341:37;28357:6;28365:9;28376:1;28341:15;:37::i;:::-;28393:7;;28309:102;28451:7;:5;:7::i;:::-;28441:17;;:6;:17;;;;:54;;;;;28488:7;:5;:7::i;:::-;28475:20;;:9;:20;;;;28441:54;:82;;;;;28513:10;;;;;;;;;;;28512:11;28441:82;28423:880;;;28557:9;;;;;;;;;;;28552:139;;28595:15;:23;28611:6;28595:23;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;28622:15;:26;28638:9;28622:26;;;;;;;;;;;;;;;;;;;;;;;;;28595:53;28587:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28552:139;28709:10;:18;28720:6;28709:18;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28732:31;:42;28764:9;28732:42;;;;;;;;;;;;;;;;;;;;;;;;;28731:43;28709:65;28705:410;;;28813:12;;28803:6;:22;;28795:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;28705:410;;;28923:10;:21;28934:9;28923:21;;;;;;;;;;;;;;;;;;;;;;;;;:65;;;;;28949:31;:39;28981:6;28949:39;;;;;;;;;;;;;;;;;;;;;;;;;28948:40;28923:65;28919:196;;;29027:13;;29017:6;:23;;29009:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;28919:196;28705:410;29136:26;:37;29163:9;29136:37;;;;;;;;;;;;;;;;;;;;;;;;;29131:159;;29235:15;;29211:20;29221:9;29211;:20::i;:::-;29202:6;:29;;;;:::i;:::-;:48;;29194:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;29131:159;28423:880;29316:28;29347:24;29365:4;29347:9;:24::i;:::-;29316:55;;29385:12;29424:14;;29400:20;:38;;29385:53;;29469:7;:35;;;;;29493:11;;;;;;;;;;;29469:35;:63;;;;;29522:10;;;;;;;;;;;29521:11;29469:63;:101;;;;;29549:10;:21;29560:9;29549:21;;;;;;;;;;;;;;;;;;;;;;;;;29469:101;:142;;;;;29588:15;:23;29604:6;29588:23;;;;;;;;;;;;;;;;;;;;;;;;;29587:24;29469:142;:186;;;;;29629:15;:26;29645:9;29629:26;;;;;;;;;;;;;;;;;;;;;;;;;29628:27;29469:186;29451:327;;;29695:4;29682:10;;:17;;;;;;;;;;;;;;;;;;29714:19;29723:9;29714:8;:19::i;:::-;29761:5;29748:10;;:18;;;;;;;;;;;;;;;;;;29451:327;29791:12;29807:10;;;;;;;;;;;29806:11;29791:26;;29919:15;:23;29935:6;29919:23;;;;;;;;;;;;;;;;;;;;;;;;;:53;;;;29946:15;:26;29962:9;29946:26;;;;;;;;;;;;;;;;;;;;;;;;;29919:53;29915:101;;;29999:5;29989:15;;29915:101;30117:7;30113:1288;;;30141:12;30190:7;;30175:12;:22;30172:1076;;;30225:23;30244:3;30225:14;30236:2;30225:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;30218:30;;30303:2;30297;30290:4;:9;;;;:::i;:::-;30289:16;;;;:::i;:::-;30267:18;;:38;;;;;;;:::i;:::-;;;;;;;;30361:2;30356:1;30349:4;:8;;;;:::i;:::-;30348:15;;;;:::i;:::-;30324:20;;:39;;;;;;;:::i;:::-;;;;;;;;30172:1076;;;30389:10;:21;30400:9;30389:21;;;;;;;;;;;;;;;;;;;;;;;;;:48;;;;;30436:1;30414:5;:19;;;:23;30389:48;30385:863;;;30465:40;30501:3;30465:31;30476:5;:19;;;30465:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;30458:47;;30578:5;:19;;;30553:5;:22;;;30546:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30524:18;;:73;;;;;;;:::i;:::-;;;;;;;;30670:5;:19;;;30645:5;:22;;;30638:4;:29;;;;:::i;:::-;:51;;;;:::i;:::-;30616:18;;:73;;;;;;;:::i;:::-;;;;;;;;30766:5;:19;;;30739:5;:24;;;30732:4;:31;;;;:::i;:::-;:53;;;;:::i;:::-;30708:20;;:77;;;;;;;:::i;:::-;;;;;;;;30385:863;;;30847:10;:18;30858:6;30847:18;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;;30890:1;30869:5;:18;;;:22;30847:44;30843:405;;;30919:39;30954:3;30919:30;30930:5;:18;;;30919:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;30912:46;;31030:5;:18;;;31006:5;:21;;;30999:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;30977:18;;:71;;;;;;;:::i;:::-;;;;;;;;31120:5;:18;;;31096:5;:21;;;31089:4;:28;;;;:::i;:::-;:49;;;;:::i;:::-;31067:18;;:71;;;;;;;:::i;:::-;;;;;;;;31214:5;:18;;;31188:5;:23;;;31181:4;:30;;;;:::i;:::-;:51;;;;:::i;:::-;31157:20;;:75;;;;;;;:::i;:::-;;;;;;;;30843:405;30385:863;30172:1076;31275:1;31268:4;:8;31264:93;;;31297:44;31313:6;31329:4;31336;31297:15;:44::i;:::-;31264:93;31383:4;31373:14;;;;;:::i;:::-;;;30126:1275;30113:1288;31413:42;31429:6;31437:9;31448:6;31413:15;:42::i;:::-;28288:3175;;;28166:3297;;;;:::o;11550:191::-;11635:7;11668:1;11663;:6;;11671:12;11655:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11695:9;11711:1;11707;:5;;;;:::i;:::-;11695:17;;11732:1;11725:8;;;11550:191;;;;;:::o;9539:358::-;9701:71;9723:6;9701:71;;;;;;;;;;;;;;;;;:9;:17;9711:6;9701:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;9681:9;:17;9691:6;9681:17;;;;;;;;;;;;;;;:91;;;;9806:32;9831:6;9806:9;:20;9816:9;9806:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;9783:9;:20;9793:9;9783:20;;;;;;;;;;;;;;;:55;;;;9871:9;9854:35;;9863:6;9854:35;;;9882:6;9854:35;;;;;;:::i;:::-;;;;;;;;9539:358;;;:::o;32478:1566::-;32534:28;32565:24;32583:4;32565:9;:24::i;:::-;32534:55;;32600:14;32659:20;;32638:18;;32617;;:39;;;;:::i;:::-;:62;;;;:::i;:::-;32600:79;;32720:1;32696:20;:25;32692:42;;32725:7;;;;32692:42;32790:2;32773:14;;:19;;;;:::i;:::-;32750:20;:42;32746:117;;;32849:2;32832:14;;:19;;;;:::i;:::-;32809:42;;32746:117;32924:23;33003:1;32994:6;32973:18;;32950:20;:41;;;;:::i;:::-;:50;;;;:::i;:::-;:54;;;;:::i;:::-;32924:80;;33015:26;33044:41;33069:15;33044:20;:24;;:41;;;;:::i;:::-;33015:70;;33099:25;33127:21;33099:49;;33161:50;33181:9;33192:18;33161:19;:50::i;:::-;33226:18;33247:44;33273:17;33247:21;:25;;:44;;;;:::i;:::-;33226:65;;33305:23;33331:46;33370:6;33331:34;33346:18;;33331:10;:14;;:34;;;;:::i;:::-;:38;;:46;;;;:::i;:::-;33305:72;;33388:25;33416:48;33457:6;33416:36;33431:20;;33416:10;:14;;:36;;;;:::i;:::-;:40;;:48;;;;:::i;:::-;33388:76;;33475:23;33533:17;33515:15;:35;;;;:::i;:::-;33501:10;:50;;;;:::i;:::-;33475:76;;33587:1;33566:18;:22;;;;33620:1;33599:18;:22;;;;33655:1;33632:20;:24;;;;33693:1;33675:15;:19;:42;;;;;33716:1;33698:15;:19;33675:42;33671:192;;;33734:46;33747:15;33764;33734:12;:46::i;:::-;33800:51;33815:18;33835:15;33800:51;;;;;;;:::i;:::-;;;;;;;;33671:192;33891:17;;;;;;;;;;;33875:44;;:85;33944:15;33920:21;:39;;;;:::i;:::-;33875:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33987:15;;;;;;;;;;;33971:42;;:65;34014:21;33971:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32523:1521;;;;;;;;;32478:1566;;:::o;11749:256::-;11806:7;11841:1;11836;:6;11832:47;;11866:1;11859:8;;;;11832:47;11892:9;11908:1;11904;:5;;;;:::i;:::-;11892:17;;11937:1;11932;11928;:5;;;;:::i;:::-;:10;11920:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;11996:1;11989:8;;;11749:256;;;;;:::o;12016:131::-;12073:7;12100:39;12104:1;12107;12100:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;12093:46;;12016:131;;;;:::o;11402:135::-;11459:7;11486:43;11490:1;11493;11486:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;11479:50;;11402:135;;;;:::o;31471:641::-;31617:21;31655:1;31641:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31617:40;;31686:4;31668;31673:1;31668:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31712:6;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31702:4;31707:1;31702:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31738:49;31755:4;31770:6;31779:7;31738:8;:49::i;:::-;31798:54;31807:9;31818:17;;;;;;;;;;;31847:4;31837:7;:14;;;;:::i;:::-;31798:8;:54::i;:::-;31891:6;:57;;;31963:7;31985:1;32029:4;32056;32076:15;31891:211;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31544:568;31471:641;;:::o;32120:350::-;32264:49;32281:4;32296:6;32305:7;32264:8;:49::i;:::-;32356:6;:22;;;32387:9;32408:4;32415:7;32424:1;32427;32439:4;32446:15;32356:106;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32120:350;;:::o;12159:277::-;12244:7;12276:1;12272;:5;12279:12;12264:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12303:9;12319:1;12315;:5;;;;:::i;:::-;12303:17;;12427:1;12420:8;;;12159: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:474::-;3849:6;3857;3906:2;3894:9;3885:7;3881:23;3877:32;3874:119;;;3912:79;;:::i;:::-;3874:119;4032:1;4057:53;4102:7;4093:6;4082:9;4078:22;4057:53;:::i;:::-;4047:63;;4003:117;4159:2;4185:53;4230:7;4221:6;4210:9;4206:22;4185:53;:::i;:::-;4175:63;;4130:118;3781:474;;;;;:::o;4261:118::-;4348:24;4366:5;4348:24;:::i;:::-;4343:3;4336:37;4261:118;;:::o;4385:222::-;4478:4;4516:2;4505:9;4501:18;4493:26;;4529:71;4597:1;4586:9;4582:17;4573:6;4529:71;:::i;:::-;4385:222;;;;:::o;4613:116::-;4683:21;4698:5;4683:21;:::i;:::-;4676:5;4673:32;4663:60;;4719:1;4716;4709:12;4663:60;4613:116;:::o;4735:133::-;4778:5;4816:6;4803:20;4794:29;;4832:30;4856:5;4832:30;:::i;:::-;4735:133;;;;:::o;4874:323::-;4930:6;4979:2;4967:9;4958:7;4954:23;4950:32;4947:119;;;4985:79;;:::i;:::-;4947:119;5105:1;5130:50;5172:7;5163:6;5152:9;5148:22;5130:50;:::i;:::-;5120:60;;5076:114;4874:323;;;;:::o;5203:619::-;5280:6;5288;5296;5345:2;5333:9;5324:7;5320:23;5316:32;5313:119;;;5351:79;;:::i;:::-;5313:119;5471:1;5496:53;5541:7;5532:6;5521:9;5517:22;5496:53;:::i;:::-;5486:63;;5442:117;5598:2;5624:53;5669:7;5660:6;5649:9;5645:22;5624:53;:::i;:::-;5614:63;;5569:118;5726:2;5752:53;5797:7;5788:6;5777:9;5773:22;5752:53;:::i;:::-;5742:63;;5697:118;5203:619;;;;;:::o;5828:86::-;5863:7;5903:4;5896:5;5892:16;5881:27;;5828:86;;;:::o;5920:112::-;6003:22;6019:5;6003:22;:::i;:::-;5998:3;5991:35;5920:112;;:::o;6038:214::-;6127:4;6165:2;6154:9;6150:18;6142:26;;6178:67;6242:1;6231:9;6227:17;6218:6;6178:67;:::i;:::-;6038:214;;;;:::o;6258:118::-;6345:24;6363:5;6345:24;:::i;:::-;6340:3;6333:37;6258:118;;:::o;6382:222::-;6475:4;6513:2;6502:9;6498:18;6490:26;;6526:71;6594:1;6583:9;6579:17;6570:6;6526:71;:::i;:::-;6382:222;;;;:::o;6610:329::-;6669:6;6718:2;6706:9;6697:7;6693:23;6689:32;6686:119;;;6724:79;;:::i;:::-;6686:119;6844:1;6869:53;6914:7;6905:6;6894:9;6890:22;6869:53;:::i;:::-;6859:63;;6815:117;6610:329;;;;:::o;6945:468::-;7010:6;7018;7067:2;7055:9;7046:7;7042:23;7038:32;7035:119;;;7073:79;;:::i;:::-;7035:119;7193:1;7218:53;7263:7;7254:6;7243:9;7239:22;7218:53;:::i;:::-;7208:63;;7164:117;7320:2;7346:50;7388:7;7379:6;7368:9;7364:22;7346:50;:::i;:::-;7336:60;;7291:115;6945:468;;;;;:::o;7419:1057::-;7523:6;7531;7539;7547;7555;7563;7612:3;7600:9;7591:7;7587:23;7583:33;7580:120;;;7619:79;;:::i;:::-;7580:120;7739:1;7764:53;7809:7;7800:6;7789:9;7785:22;7764:53;:::i;:::-;7754:63;;7710:117;7866:2;7892:53;7937:7;7928:6;7917:9;7913:22;7892:53;:::i;:::-;7882:63;;7837:118;7994:2;8020:53;8065:7;8056:6;8045:9;8041:22;8020:53;:::i;:::-;8010:63;;7965:118;8122:2;8148:53;8193:7;8184:6;8173:9;8169:22;8148:53;:::i;:::-;8138:63;;8093:118;8250:3;8277:53;8322:7;8313:6;8302:9;8298:22;8277:53;:::i;:::-;8267:63;;8221:119;8379:3;8406:53;8451:7;8442:6;8431:9;8427:22;8406:53;:::i;:::-;8396:63;;8350:119;7419:1057;;;;;;;;:::o;8482:997::-;8771:4;8809:3;8798:9;8794:19;8786:27;;8823:71;8891:1;8880:9;8876:17;8867:6;8823:71;:::i;:::-;8904:72;8972:2;8961:9;8957:18;8948:6;8904:72;:::i;:::-;8986;9054:2;9043:9;9039:18;9030:6;8986:72;:::i;:::-;9068;9136:2;9125:9;9121:18;9112:6;9068:72;:::i;:::-;9150:73;9218:3;9207:9;9203:19;9194:6;9150:73;:::i;:::-;9233;9301:3;9290:9;9286:19;9277:6;9233:73;:::i;:::-;9316;9384:3;9373:9;9369:19;9360:6;9316:73;:::i;:::-;9399;9467:3;9456:9;9452:19;9443:6;9399:73;:::i;:::-;8482:997;;;;;;;;;;;:::o;9485:474::-;9553:6;9561;9610:2;9598:9;9589:7;9585:23;9581:32;9578:119;;;9616:79;;:::i;:::-;9578:119;9736:1;9761:53;9806:7;9797:6;9786:9;9782:22;9761:53;:::i;:::-;9751:63;;9707:117;9863:2;9889:53;9934:7;9925:6;9914:9;9910:22;9889:53;:::i;:::-;9879:63;;9834:118;9485:474;;;;;:::o;9965:60::-;9993:3;10014:5;10007:12;;9965:60;;;:::o;10031:142::-;10081:9;10114:53;10132:34;10141:24;10159:5;10141:24;:::i;:::-;10132:34;:::i;:::-;10114:53;:::i;:::-;10101:66;;10031:142;;;:::o;10179:126::-;10229:9;10262:37;10293:5;10262:37;:::i;:::-;10249:50;;10179:126;;;:::o;10311:153::-;10388:9;10421:37;10452:5;10421:37;:::i;:::-;10408:50;;10311:153;;;:::o;10470:185::-;10584:64;10642:5;10584:64;:::i;:::-;10579:3;10572:77;10470:185;;:::o;10661:276::-;10781:4;10819:2;10808:9;10804:18;10796:26;;10832:98;10927:1;10916:9;10912:17;10903:6;10832:98;:::i;:::-;10661:276;;;;:::o;10943:180::-;10991:77;10988:1;10981:88;11088:4;11085:1;11078:15;11112:4;11109:1;11102:15;11129:320;11173:6;11210:1;11204:4;11200:12;11190:22;;11257:1;11251:4;11247:12;11278:18;11268:81;;11334:4;11326:6;11322:17;11312:27;;11268:81;11396:2;11388:6;11385:14;11365:18;11362:38;11359:84;;11415:18;;:::i;:::-;11359:84;11180:269;11129:320;;;:::o;11455:182::-;11595:34;11591:1;11583:6;11579:14;11572:58;11455:182;:::o;11643:366::-;11785:3;11806:67;11870:2;11865:3;11806:67;:::i;:::-;11799:74;;11882:93;11971:3;11882:93;:::i;:::-;12000:2;11995:3;11991:12;11984:19;;11643:366;;;:::o;12015:419::-;12181:4;12219:2;12208:9;12204:18;12196:26;;12268:9;12262:4;12258:20;12254:1;12243:9;12239:17;12232:47;12296:131;12422:4;12296:131;:::i;:::-;12288:139;;12015:419;;;:::o;12440:180::-;12488:77;12485:1;12478:88;12585:4;12582:1;12575:15;12609:4;12606:1;12599:15;12626:410;12666:7;12689:20;12707:1;12689:20;:::i;:::-;12684:25;;12723:20;12741:1;12723:20;:::i;:::-;12718:25;;12778:1;12775;12771:9;12800:30;12818:11;12800:30;:::i;:::-;12789:41;;12979:1;12970:7;12966:15;12963:1;12960:22;12940:1;12933:9;12913:83;12890:139;;13009:18;;:::i;:::-;12890:139;12674:362;12626:410;;;;:::o;13042:180::-;13090:77;13087:1;13080:88;13187:4;13184:1;13177:15;13211:4;13208:1;13201:15;13228:185;13268:1;13285:20;13303:1;13285:20;:::i;:::-;13280:25;;13319:20;13337:1;13319:20;:::i;:::-;13314:25;;13358:1;13348:35;;13363:18;;:::i;:::-;13348:35;13405:1;13402;13398:9;13393:14;;13228:185;;;;:::o;13419:191::-;13459:3;13478:20;13496:1;13478:20;:::i;:::-;13473:25;;13512:20;13530:1;13512:20;:::i;:::-;13507:25;;13555:1;13552;13548:9;13541:16;;13576:3;13573:1;13570:10;13567:36;;;13583:18;;:::i;:::-;13567:36;13419:191;;;;:::o;13616:179::-;13756:31;13752:1;13744:6;13740:14;13733:55;13616:179;:::o;13801:366::-;13943:3;13964:67;14028:2;14023:3;13964:67;:::i;:::-;13957:74;;14040:93;14129:3;14040:93;:::i;:::-;14158:2;14153:3;14149:12;14142:19;;13801:366;;;:::o;14173:419::-;14339:4;14377:2;14366:9;14362:18;14354:26;;14426:9;14420:4;14416:20;14412:1;14401:9;14397:17;14390:47;14454:131;14580:4;14454:131;:::i;:::-;14446:139;;14173:419;;;:::o;14598:147::-;14699:11;14736:3;14721:18;;14598:147;;;;:::o;14751:114::-;;:::o;14871:398::-;15030:3;15051:83;15132:1;15127:3;15051:83;:::i;:::-;15044:90;;15143:93;15232:3;15143:93;:::i;:::-;15261:1;15256:3;15252:11;15245:18;;14871:398;;;:::o;15275:379::-;15459:3;15481:147;15624:3;15481:147;:::i;:::-;15474:154;;15645:3;15638:10;;15275:379;;;:::o;15660:229::-;15800:34;15796:1;15788:6;15784:14;15777:58;15869:12;15864:2;15856:6;15852:15;15845:37;15660:229;:::o;15895:366::-;16037:3;16058:67;16122:2;16117:3;16058:67;:::i;:::-;16051:74;;16134:93;16223:3;16134:93;:::i;:::-;16252:2;16247:3;16243:12;16236:19;;15895:366;;;:::o;16267:419::-;16433:4;16471:2;16460:9;16456:18;16448:26;;16520:9;16514:4;16510:20;16506:1;16495:9;16491:17;16484:47;16548:131;16674:4;16548:131;:::i;:::-;16540:139;;16267:419;;;:::o;16692:225::-;16832:34;16828:1;16820:6;16816:14;16809:58;16901:8;16896:2;16888:6;16884:15;16877:33;16692:225;:::o;16923:366::-;17065:3;17086:67;17150:2;17145:3;17086:67;:::i;:::-;17079:74;;17162:93;17251:3;17162:93;:::i;:::-;17280:2;17275:3;17271:12;17264:19;;16923:366;;;:::o;17295:419::-;17461:4;17499:2;17488:9;17484:18;17476:26;;17548:9;17542:4;17538:20;17534:1;17523:9;17519:17;17512:47;17576:131;17702:4;17576:131;:::i;:::-;17568:139;;17295:419;;;:::o;17720:177::-;17860:29;17856:1;17848:6;17844:14;17837:53;17720:177;:::o;17903:366::-;18045:3;18066:67;18130:2;18125:3;18066:67;:::i;:::-;18059:74;;18142:93;18231:3;18142:93;:::i;:::-;18260:2;18255:3;18251:12;18244:19;;17903:366;;;:::o;18275:419::-;18441:4;18479:2;18468:9;18464:18;18456:26;;18528:9;18522:4;18518:20;18514:1;18503:9;18499:17;18492:47;18556:131;18682:4;18556:131;:::i;:::-;18548:139;;18275:419;;;:::o;18700:172::-;18840:24;18836:1;18828:6;18824:14;18817:48;18700:172;:::o;18878:366::-;19020:3;19041:67;19105:2;19100:3;19041:67;:::i;:::-;19034:74;;19117:93;19206:3;19117:93;:::i;:::-;19235:2;19230:3;19226:12;19219:19;;18878:366;;;:::o;19250:419::-;19416:4;19454:2;19443:9;19439:18;19431:26;;19503:9;19497:4;19493:20;19489:1;19478:9;19474:17;19467:47;19531:131;19657:4;19531:131;:::i;:::-;19523:139;;19250:419;;;:::o;19675:240::-;19815:34;19811:1;19803:6;19799:14;19792:58;19884:23;19879:2;19871:6;19867:15;19860:48;19675:240;:::o;19921:366::-;20063:3;20084:67;20148:2;20143:3;20084:67;:::i;:::-;20077:74;;20160:93;20249:3;20160:93;:::i;:::-;20278:2;20273:3;20269:12;20262:19;;19921:366;;;:::o;20293:419::-;20459:4;20497:2;20486:9;20482:18;20474:26;;20546:9;20540:4;20536:20;20532:1;20521:9;20517:17;20510:47;20574:131;20700:4;20574:131;:::i;:::-;20566:139;;20293:419;;;:::o;20718:241::-;20858:34;20854:1;20846:6;20842:14;20835:58;20927:24;20922:2;20914:6;20910:15;20903:49;20718:241;:::o;20965:366::-;21107:3;21128:67;21192:2;21187:3;21128:67;:::i;:::-;21121:74;;21204:93;21293:3;21204:93;:::i;:::-;21322:2;21317:3;21313:12;21306:19;;20965:366;;;:::o;21337:419::-;21503:4;21541:2;21530:9;21526:18;21518:26;;21590:9;21584:4;21580:20;21576:1;21565:9;21561:17;21554:47;21618:131;21744:4;21618:131;:::i;:::-;21610:139;;21337:419;;;:::o;21762:169::-;21902:21;21898:1;21890:6;21886:14;21879:45;21762:169;:::o;21937:366::-;22079:3;22100:67;22164:2;22159:3;22100:67;:::i;:::-;22093:74;;22176:93;22265:3;22176:93;:::i;:::-;22294:2;22289:3;22285:12;22278:19;;21937:366;;;:::o;22309:419::-;22475:4;22513:2;22502:9;22498:18;22490:26;;22562:9;22556:4;22552:20;22548:1;22537:9;22533:17;22526:47;22590:131;22716:4;22590:131;:::i;:::-;22582:139;;22309:419;;;:::o;22734:194::-;22774:4;22794:20;22812:1;22794:20;:::i;:::-;22789:25;;22828:20;22846:1;22828:20;:::i;:::-;22823:25;;22872:1;22869;22865:9;22857:17;;22896:1;22890:4;22887:11;22884:37;;;22901:18;;:::i;:::-;22884:37;22734:194;;;;:::o;22934:332::-;23055:4;23093:2;23082:9;23078:18;23070:26;;23106:71;23174:1;23163:9;23159:17;23150:6;23106:71;:::i;:::-;23187:72;23255:2;23244:9;23240:18;23231:6;23187:72;:::i;:::-;22934:332;;;;;:::o;23272:220::-;23412:34;23408:1;23400:6;23396:14;23389:58;23481:3;23476:2;23468:6;23464:15;23457:28;23272:220;:::o;23498:366::-;23640:3;23661:67;23725:2;23720:3;23661:67;:::i;:::-;23654:74;;23737:93;23826:3;23737:93;:::i;:::-;23855:2;23850:3;23846:12;23839:19;;23498:366;;;:::o;23870:419::-;24036:4;24074:2;24063:9;24059:18;24051:26;;24123:9;24117:4;24113:20;24109:1;24098:9;24094:17;24087:47;24151:131;24277:4;24151:131;:::i;:::-;24143:139;;23870:419;;;:::o;24295:180::-;24343:77;24340:1;24333:88;24440:4;24437:1;24430:15;24464:4;24461:1;24454:15;24481:180;24529:77;24526:1;24519:88;24626:4;24623:1;24616:15;24650:4;24647:1;24640:15;24667:143;24724:5;24755:6;24749:13;24740:22;;24771:33;24798:5;24771:33;:::i;:::-;24667:143;;;;:::o;24816:351::-;24886:6;24935:2;24923:9;24914:7;24910:23;24906:32;24903:119;;;24941:79;;:::i;:::-;24903:119;25061:1;25086:64;25142:7;25133:6;25122:9;25118:22;25086:64;:::i;:::-;25076:74;;25032:128;24816:351;;;;:::o;25173:85::-;25218:7;25247:5;25236:16;;25173:85;;;:::o;25264:158::-;25322:9;25355:61;25373:42;25382:32;25408:5;25382:32;:::i;:::-;25373:42;:::i;:::-;25355:61;:::i;:::-;25342:74;;25264:158;;;:::o;25428:147::-;25523:45;25562:5;25523:45;:::i;:::-;25518:3;25511:58;25428:147;;:::o;25581:114::-;25648:6;25682:5;25676:12;25666:22;;25581:114;;;:::o;25701:184::-;25800:11;25834:6;25829:3;25822:19;25874:4;25869:3;25865:14;25850:29;;25701:184;;;;:::o;25891:132::-;25958:4;25981:3;25973:11;;26011:4;26006:3;26002:14;25994:22;;25891:132;;;:::o;26029:108::-;26106:24;26124:5;26106:24;:::i;:::-;26101:3;26094:37;26029:108;;:::o;26143:179::-;26212:10;26233:46;26275:3;26267:6;26233:46;:::i;:::-;26311:4;26306:3;26302:14;26288:28;;26143:179;;;;:::o;26328:113::-;26398:4;26430;26425:3;26421:14;26413:22;;26328:113;;;:::o;26477:732::-;26596:3;26625:54;26673:5;26625:54;:::i;:::-;26695:86;26774:6;26769:3;26695:86;:::i;:::-;26688:93;;26805:56;26855:5;26805:56;:::i;:::-;26884:7;26915:1;26900:284;26925:6;26922:1;26919:13;26900:284;;;27001:6;26995:13;27028:63;27087:3;27072:13;27028:63;:::i;:::-;27021:70;;27114:60;27167:6;27114:60;:::i;:::-;27104:70;;26960:224;26947:1;26944;26940:9;26935:14;;26900:284;;;26904:14;27200:3;27193:10;;26601:608;;;26477:732;;;;:::o;27215:831::-;27478:4;27516:3;27505:9;27501:19;27493:27;;27530:71;27598:1;27587:9;27583:17;27574:6;27530:71;:::i;:::-;27611:80;27687:2;27676:9;27672:18;27663:6;27611:80;:::i;:::-;27738:9;27732:4;27728:20;27723:2;27712:9;27708:18;27701:48;27766:108;27869:4;27860:6;27766:108;:::i;:::-;27758:116;;27884:72;27952:2;27941:9;27937:18;27928:6;27884:72;:::i;:::-;27966:73;28034:3;28023:9;28019:19;28010:6;27966:73;:::i;:::-;27215:831;;;;;;;;:::o;28052:807::-;28301:4;28339:3;28328:9;28324:19;28316:27;;28353:71;28421:1;28410:9;28406:17;28397:6;28353:71;:::i;:::-;28434:72;28502:2;28491:9;28487:18;28478:6;28434:72;:::i;:::-;28516:80;28592:2;28581:9;28577:18;28568:6;28516:80;:::i;:::-;28606;28682:2;28671:9;28667:18;28658:6;28606:80;:::i;:::-;28696:73;28764:3;28753:9;28749:19;28740:6;28696:73;:::i;:::-;28779;28847:3;28836:9;28832:19;28823:6;28779:73;:::i;:::-;28052:807;;;;;;;;;:::o;28865:143::-;28922:5;28953:6;28947:13;28938:22;;28969:33;28996:5;28969:33;:::i;:::-;28865:143;;;;:::o;29014:663::-;29102:6;29110;29118;29167:2;29155:9;29146:7;29142:23;29138:32;29135:119;;;29173:79;;:::i;:::-;29135:119;29293:1;29318:64;29374:7;29365:6;29354:9;29350:22;29318:64;:::i;:::-;29308:74;;29264:128;29431:2;29457:64;29513:7;29504:6;29493:9;29489:22;29457:64;:::i;:::-;29447:74;;29402:129;29570:2;29596:64;29652:7;29643:6;29632:9;29628:22;29596:64;:::i;:::-;29586:74;;29541:129;29014:663;;;;;:::o

Swarm Source

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